您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java怎么實現經典游戲泡泡堂”,在日常操作中,相信很多人在Java怎么實現經典游戲泡泡堂問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java怎么實現經典游戲泡泡堂”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
設計游戲界面,用swing實現
繪制游戲啟動界面、結束界面、地圖、主角、道具
實現泡泡爆炸
實現雙主角PK(積分制)
實現道具掉落和相應屬性加成
實現游戲音效和背景音樂
游戲啟動界面:
游戲開始界面:
移動效果:
釋放泡泡
泡泡爆炸效果:
public class GameStart { public static void main(String[] args) { //整個程序的入口 啟動 StartFrame startFrame = new StartFrame(); startFrame.setVisible(true); } }
public class GameListener implements KeyListener { private List<?> list; @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } //按下 左37 右39 下40 上38 w87 a65 s83 d68 空格32 enter10 @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub //System.out.println("keypressed"+e.getKeyCode()); list = ElementManager.getInstance().getElementList("play"); Player oneplayer = (Player)list.get(0); Player twoPlayer = (Player)list.get(1); switch (e.getKeyCode()) { case 65: oneplayer.setLEFT(true); // oneplayer.setStop(false); break; case 87: oneplayer.setUP(true); // oneplayer.setStop(false); break; case 68: oneplayer.setRIGHT(true); // oneplayer.setStop(false); break; case 83: oneplayer.setDOWN(true); // oneplayer.setStop(false); break; case 32: oneplayer.setPk(true); break; case 37: twoPlayer.setLEFT(true); break; case 38: twoPlayer.setUP(true); break; case 39: twoPlayer.setRIGHT(true); break; case 40: twoPlayer.setDOWN(true); break; case 10: twoPlayer.setPk(true); break; } } //松開 @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub //System.out.println("keyreleased"+e.getKeyCode()); list = ElementManager.getInstance().getElementList("play"); Player oneplayer = (Player)list.get(0); Player twoPlayer = (Player)list.get(1); switch (e.getKeyCode()) { case 65: // if (oneplayer.isLEFT()) { // oneplayer.setStop(true); // } oneplayer.setLEFT(false); break; case 87: // if (oneplayer.isUP()) { // oneplayer.setStop(true); // } oneplayer.setUP(false); break; case 68: // if (oneplayer.isRIGHT()) { // oneplayer.setStop(true); // } oneplayer.setRIGHT(false); break; case 83: // if (oneplayer.isDOWN()) { // oneplayer.setStop(true); // } oneplayer.setDOWN(false); break; case 32: oneplayer.setPk(false); break; case 37: twoPlayer.setLEFT(false); break; case 38: twoPlayer.setUP(false); break; case 39: twoPlayer.setRIGHT(false); break; case 40: twoPlayer.setDOWN(false); break; case 10: twoPlayer.setPk(false); break; } } }
public class GameThread extends Thread{ //計時數據 private static int time ; private boolean flag=true; //重構老項目 @Override public void run() { //這個循環控制游戲整體進度 // while(flag){ // 死循環 狀態變量進行控制 //1.加載地圖 人物 loadElement(); //2.顯示地圖人物(流程 自動化(移動,碰撞)) time = 0; loadBGM(); runGame(); //3.結束地圖 try { TimeUnit.MILLISECONDS.sleep(150); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // } } //控制進度 但是作為控制 請不要接觸load 只能通過元素管理器訪問元素 public void loadElement(){ ElementManager.getInstance().load(); } public void runGame(){ //這個循環控制每個關卡 地圖中玩的狀態 ElementManager manager = ElementManager.getInstance(); while(flag){ Map<String, List<SuperElement> > map = manager.getMap(); Set<String> set = map.keySet(); List<String> temp = new ArrayList<>(); temp.addAll(set); //迭代器在遍歷的過程中,迭代器中的元素不可以變化(增加或減少) for (int i=temp.size()-1; i>=0 ; i--) { List<SuperElement> list = map.get(temp.get(i)); for (int j = 0; j < list.size(); j++) { SuperElement superElement = 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 (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //死亡 通關狀態 結束runGame方法 overGame(); time++; //一秒鐘增加10 } } public void PK() { // TODO Auto-generated method stub List<SuperElement> players = ElementManager.getInstance().getElementList("play"); List<SuperElement> enemys = ElementManager.getInstance().getElementList("enemylist"); //進行比較 listPK(players, enemys); } public void listPK(List<SuperElement> list1,List<SuperElement> list2){ for (int i = 0; i < list1.size(); i++) { for (int j = 0; j < list2.size(); j++) { if (list1.get(i).gamePK(list2.get(j))) { list2.get(j).setVisible(false); } } } } public void overGame(){ Player player1 = (Player)(ElementManager.getInstance().getElementList("play").get(0)); Player player2 = (Player)(ElementManager.getInstance().getElementList("play").get(1)); if(player1.getNum()>=1000||player2.getNum()>=1000) { flag = false; new Thread() { public void run() { new audioPlay(Audio.OVER).player(); } }.start(); } } //游戲的流程控制 public void linkGame(){ // 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); } public static int getTime() { return time; } public static void setTime(int time) { GameThread.time = time; } private void loadBGM() { new Thread() { public void run() { while(flag) { audioPlay play = new audioPlay(Audio.BGM); play.player(); if(!flag) { play.stop(); } } } }.start(); } //敵機的創建 }
到此,關于“Java怎么實現經典游戲泡泡堂”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。