Java怎么实现经典游戏泡泡堂
生活随笔
收集整理的這篇文章主要介紹了
Java怎么实现经典游戏泡泡堂
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這篇文章主要介紹“Java怎么實現經典游戲泡泡堂”,在日常操作中,相信很多人在Java怎么實現經典游戲泡泡堂問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java怎么實現經典游戲泡泡堂”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
主要設計
-
設計游戲界面,用swing實現
-
繪制游戲啟動界面、結束界面、地圖、主角、道具
-
實現泡泡爆炸
-
實現雙主角PK(積分制)
-
實現道具掉落和相應屬性加成
-
實現游戲音效和背景音樂
功能截圖
游戲啟動界面:
游戲開始界面:
移動效果:
釋放泡泡
泡泡爆炸效果:
代碼實現
游戲啟動類
publicclassGameStart{
publicstaticvoidmain(String[]args){
//整個程序的入口啟動
StartFramestartFrame=newStartFrame();
startFrame.setVisible(true);
}
}
核心監聽類
publicclassGameListenerimplementsKeyListener{
privateList<?>list;
@Override
publicvoidkeyTyped(KeyEvente){
//TODOAuto-generatedmethodstub
}
//按下左37右39下40上38w87a65s83d68空格32enter10
@Override
publicvoidkeyPressed(KeyEvente){
//TODOAuto-generatedmethodstub
//System.out.println("keypressed"+e.getKeyCode());
list=ElementManager.getInstance().getElementList("play");
Playeroneplayer=(Player)list.get(0);
PlayertwoPlayer=(Player)list.get(1);
switch(e.getKeyCode()){
case65:
oneplayer.setLEFT(true);
// oneplayer.setStop(false);
break;
case87:
oneplayer.setUP(true);
// oneplayer.setStop(false);
break;
case68:
oneplayer.setRIGHT(true);
// oneplayer.setStop(false);
break;
case83:
oneplayer.setDOWN(true);
// oneplayer.setStop(false);
break;
case32:
oneplayer.setPk(true);
break;
case37:
twoPlayer.setLEFT(true);
break;
case38:
twoPlayer.setUP(true);
break;
case39:
twoPlayer.setRIGHT(true);
break;
case40:
twoPlayer.setDOWN(true);
break;
case10:
twoPlayer.setPk(true);
break;
}
}
//松開
@Override
publicvoidkeyReleased(KeyEvente){
//TODOAuto-generatedmethodstub
//System.out.println("keyreleased"+e.getKeyCode());
list=ElementManager.getInstance().getElementList("play");
Playeroneplayer=(Player)list.get(0);
PlayertwoPlayer=(Player)list.get(1);
switch(e.getKeyCode()){
case65:
// if(oneplayer.isLEFT()){
// oneplayer.setStop(true);
// }
oneplayer.setLEFT(false);
break;
case87:
// if(oneplayer.isUP()){
// oneplayer.setStop(true);
// }
oneplayer.setUP(false);
break;
case68:
// if(oneplayer.isRIGHT()){
// oneplayer.setStop(true);
// }
oneplayer.setRIGHT(false);
break;
case83:
// if(oneplayer.isDOWN()){
// oneplayer.setStop(true);
// }
oneplayer.setDOWN(false);
break;
case32:
oneplayer.setPk(false);
break;
case37:
twoPlayer.setLEFT(false);
break;
case38:
twoPlayer.setUP(false);
break;
case39:
twoPlayer.setRIGHT(false);
break;
case40:
twoPlayer.setDOWN(false);
break;
case10:
twoPlayer.setPk(false);
break;
}
}
}
核心線程類
publicclassGameThreadextendsThread{
//計時數據
privatestaticinttime;
privatebooleanflag=true;
//重構老項目
@Override
publicvoidrun(){
//這個循環控制游戲整體進度
// while(flag){
//死循環狀態變量進行控制
//1.加載地圖人物
loadElement();
//2.顯示地圖人物(流程自動化(移動,碰撞))
time=0;
loadBGM();
runGame();
//3.結束地圖
try{
TimeUnit.MILLISECONDS.sleep(150);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
// }
}
//控制進度但是作為控制請不要接觸load只能通過元素管理器訪問元素
publicvoidloadElement(){
ElementManager.getInstance().load();
}
publicvoidrunGame(){
//這個循環控制每個關卡地圖中玩的狀態
ElementManagermanager=ElementManager.getInstance();
while(flag){
Map<String,List<SuperElement>>map=manager.getMap();
Set<String>set=map.keySet();
List<String>temp=newArrayList<>();
temp.addAll(set);
//迭代器在遍歷的過程中,迭代器中的元素不可以變化(增加或減少)
for(inti=temp.size()-1;i>=0;i--){
List<SuperElement>list=map.get(temp.get(i));
for(intj=0;j<list.size();j++){
SuperElementsuperElement=list.get(j);
superElement.update();
if(!superElement.isVisible()){
manager.removeElementByPx(superElement.getY(),superElement.getX());
list.remove(j);
}
}
}
//使用一個獨立的方法來進行判定
PK();
//游戲的流程控制
linkGame();
try{
TimeUnit.MILLISECONDS.sleep(100);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
//死亡通關狀態結束runGame方法
overGame();
time++;//一秒鐘增加10
}
}
publicvoidPK(){
//TODOAuto-generatedmethodstub
List<SuperElement>players=ElementManager.getInstance().getElementList("play");
List<SuperElement>enemys=ElementManager.getInstance().getElementList("enemylist");
//進行比較
listPK(players,enemys);
}
publicvoidlistPK(List<SuperElement>list1,List<SuperElement>list2){
for(inti=0;i<list1.size();i++){
for(intj=0;j<list2.size();j++){
if(list1.get(i).gamePK(list2.get(j))){
list2.get(j).setVisible(false);
}
}
}
}
publicvoidoverGame(){
Playerplayer1=(Player)(ElementManager.getInstance().getElementList("play").get(0));
Playerplayer2=(Player)(ElementManager.getInstance().getElementList("play").get(1));
if(player1.getNum()>=1000||player2.getNum()>=1000){
flag=false;
newThread(){
publicvoidrun(){
newaudioPlay(Audio.OVER).player();
}
}.start();
}
}
//游戲的流程控制
publicvoidlinkGame(){
// Map<String,List<SuperElement>>map=
// ElementManager.getInstance().getMap();
// List<SuperElement>enemys=map.get("enemylist");
// //一秒鐘增加一個敵機
// if(time%10==0){
// enemys.add(Enemy.createEnemy(""));
// }
ElementManager.getInstance().linkGame(time);
}
publicstaticintgetTime(){
returntime;
}
publicstaticvoidsetTime(inttime){
GameThread.time=time;
}
privatevoidloadBGM(){
newThread(){
publicvoidrun(){
while(flag){
audioPlayplay=newaudioPlay(Audio.BGM);
play.player();
if(!flag){
play.stop();
}
}
}
}.start();
}
//敵機的創建
}
總結
以上是生活随笔為你收集整理的Java怎么实现经典游戏泡泡堂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在log4j.properties文
- 下一篇: Grid Search 网格搜索 介绍「