千家信息网

Java怎么实现经典游戏泡泡堂

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"Java怎么实现经典游戏泡泡堂",在日常操作中,相信很多人在Java怎么实现经典游戏泡泡堂问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java怎么实
千家信息网最后更新 2025年01月19日Java怎么实现经典游戏泡泡堂

这篇文章主要介绍"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 > map = manager.getMap();                        Set set = map.keySet();                        List temp = new ArrayList<>();                        temp.addAll(set);                        //迭代器在遍历的过程中,迭代器中的元素不可以变化(增加或减少)                        for (int i=temp.size()-1; i>=0 ; i--) {                                List 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 players = ElementManager.getInstance().getElementList("play");                List enemys = ElementManager.getInstance().getElementList("enemylist");                //进行比较                listPK(players, enemys);        }        public void listPK(List list1,List 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 > map =//                              ElementManager.getInstance().getMap();//              List enemys = map.get("enemylist");//              //一秒钟增加一个敌机//              if (time == 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怎么实现经典游戏泡泡堂"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

    0