JAVA 实现《泡泡堂对战版》游戏

时间:2025-03-22 18:36:27
public class GameThread extends Thread{ private boolean running; //表示当前关卡是否在进行 private boolean over = false; //表示游戏是否结束,结束返回开始菜单 private static int sleepTime = 20; //runGame刷新时间 //倒计时变量 private static int allTime = 600*1000; //10分钟 @Override public void run() { while(!over) { running = true;//当前关卡正在进行 //加载元素 loadElement(); //显示人物,流程,自动化 runGame(); //结束当前关 overGame(over); } GameStart.changeJPanel("over"); } //加载元素 private void loadElement() { ElementManager.getManager().loadMap();//加载地图及其元素 } /** * 关卡结束 * 如果over为真则游戏失败返回界面,否则进入下一关 * @param over */ private void overGame(Boolean over) { ElementManager.getManager().overGame(over); } //显示人物,游戏流程,自动化 private void runGame() { allTime = 600*1000; while(running) { Map<String, List<SuperElement>> map = ElementManager.getManager().getMap(); Set<String> set = map.keySet(); for(String key:set) { List<SuperElement> list = map.get(key); for(int i=list.size()-1; i>=0; i--) { list.get(i).update(); if(!list.get(i).isAlive()) list.remove(i); } } //添加游戏的流程控制linkGame()? //玩家与炸弹碰撞死亡 playerBoom(); //可破坏物与炸弹碰撞 fragilityBoom(); //电脑与炸弹碰撞死亡 npcBoom(); //电脑与道具碰撞效果,暂时不开启 //npcMagicBox(); //玩家与道具碰撞效果 playerMagicBox(); //检测是否玩家全部死亡 defeat(); //控制runGame进程 allTime = allTime - sleepTime; try { sleep(20); } catch (InterruptedException e) { // TODO: handle exception e.printStackTrace(); } } } private void defeat() { boolean allDead = true; int surviveP = 0; int winner = 2;//0为玩家1,1为玩家2,2为电脑获胜 List<SuperElement> playerList = ElementManager.getManager().getElementList("player"); List<SuperElement> npcList = ElementManager.getManager().getElementList("npc"); for(SuperElement se:playerList) { if(!((Player)se).isDead()) { surviveP++; } } for(SuperElement npc:npcList) { if(!((Npc)npc).isDead()) { allDead = false; } } //玩家失败 if(surviveP==0||(allTime<=0 && !allDead)) { running = false; over = true; OverJPanel.getResult().setText("defeated"); } //玩家胜利 if(allDead&&surviveP==1) { running = false; over = true; for(SuperElement se:playerList) { if(!((Player)se).isDead()) { surviveP++; winner = ((Player)se).getPlayerNum(); } } OverJPanel.getResult().setText("player "+(winner+1)+" win"); } //时间到,两个玩家都活着 if(allTime<=0&&surviveP==2&&allDead) { running = false; over = true; int score1 = ((Player)playerList.get(0)).score; int score2 = ((Player)playerList.get(0)).score; if(score1==score2) { OverJPanel.getResult().setText("defeated"); } else if(score1>score2) { OverJPanel.getResult().setText("player 1 win"); } else { OverJPanel.getResult().setText("player 2 win"); } } } //玩家与炸弹碰撞判断 private void playerBoom() { List<SuperElement> playerList = ElementManager.getManager().getElementList("player"); List<SuperElement> explodeList = ElementManager.getManager().getElementList("explode"); for(int i=0; i<playerList.size(); i++) { for(int j=0; j<explodeList.size(); j++) { if(explodeList.get(j).crash(playerList.get(i))){ Player player = (Player) playerList.get(i); player.setHealthPoint(-1);//生命值-1 } } } } //npc与炸弹碰撞判断 private void npcBoom() { List<SuperElement> playerList = ElementManager.getManager().getElementList("player"); List<SuperElement> npcList = ElementManager.getManager().getElementList("npc"); List<SuperElement> explodeList = ElementManager.getManager().getElementList("explode"); for(int i=0; i<npcList.size(); i++) { for(int j=0; j<explodeList.size(); j++) { if(explodeList.get(j).crash(npcList.get(i))){ Npc npc = (Npc) npcList.get(i); npc.setDead(true); npc.setX(-100); npc.setY(-100); BubbleExplode e = (BubbleExplode)explodeList.get(j); if(e.getPlayerNum()<2)//目前只有玩家计分 ((Player)playerList.get(e.getPlayerNum())).setScore(((Player)playerList.get(e.getPlayerNum())).getScore()+50); } } } } //障碍物与炸弹碰撞判断 private void fragilityBoom() { List<SuperElement> playerList = ElementManager.getManager().getElementList("player"); List<SuperElement> explodes = ElementManager.getManager().getElementList("explode"); List<SuperElement> fragility = ElementManager.getManager().getElementList("fragility"); for(int i=0; i<fragility.size(); i++) { for(int j=0; j<explodes.size(); j++) { if(explodes.get(j).crash(fragility.get(i))) { MapFragility mapFragility = (MapFragility)fragility.get(i); mapFragility.setDestoried(true); BubbleExplode e = (BubbleExplode)explodes.get(j); if(e.getPlayerNum()<2)//目前只有玩家计分 ((Player)playerList.get(e.getPlayerNum())).setScore(((Player)playerList.get(e.getPlayerNum())).getScore()+10); } } } } //玩家与道具碰撞判断 private void playerMagicBox() { List<SuperElement> playerList = ElementManager.getManager().getElementList("player"); List<SuperElement> magicBoxList = ElementManager.getManager().getElementList("magicBox"); for(int i=0; i<playerList.size(); i++) { for(int j=magicBoxList.size()-1; j>=0; j--) { if(magicBoxList.get(j).crash(playerList.get(i))){ MagicBox magicBox = (MagicBox) magicBoxList.get(j); magicBox.setCharacterIndex(i);//谁吃方块 magicBox.setEaten(true);//方块被吃 ((Player)playerList.get(i)).setScore(((Player)playerList.get(i)).getScore()+30); } } } } //玩家与道具碰撞判断 private void npcMagicBox() { List<SuperElement> npcList = ElementManager.getManager().getElementList("npc"); List<SuperElement> magicBoxList = ElementManager.getManager().getElementList("magicBox"); for(int i=0; i<npcList.size(); i++) { for(int j=magicBoxList.size()-1; j>=0; j--) { if(magicBoxList.get(j).crash(npcList.get(i))){ MagicBox magicBox = (MagicBox) magicBoxList.get(j); magicBox.setCharacterIndex(i+2);//谁吃方块 magicBox.setEaten(true);//方块被吃 } } } } //runGame调用,加入拓展 public void linkGame() {} public static int getAllTime() { return allTime; } }