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怎么实现经典游戏泡泡堂"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
泡泡
控制
地图
界面
泡泡堂
经典
经典游戏
学习
元素
方法
流程
状态
循环
主角
人物
效果
敌机
更多
核心
进度
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
四川嘉哲软件开发有限公司官网
无线网络安全pdf
上海网络技术诚信服务
松江区正规数据库销售价格
流媒体服务器如何加入小区监控中
全国网络安全周时间
软件开发变更申请单
java数据库分表方案
软件开发公司 内部培训
服务器cpu温度不一样
无系统怎么查看服务器配置
软件开发公司招聘账务要求
asp连接mysql数据库方法
当前网络技术的局限性是什么
赣州银行数据库团队
服务器买来怎么赚钱
网络技术工程大纲
网络安全三种攻击
不痴迷网络安全知识
后端网络技术支撑服务人员外包
电脑没有网络安全模式
地产公司成本大数据库
违反网络安全法从事终
临淄软件开发培训
网络安全模式可以用360系统吗
网络技术和实战经验
每次点击数据库加一
软件开发前期都要自己投资么
软件开发服务费和技术服务费发票
pks 如何连接数据库