Java怎么实现经典游戏泡泡堂
发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,这篇文章主要介绍"Java怎么实现经典游戏泡泡堂",在日常操作中,相信很多人在Java怎么实现经典游戏泡泡堂问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java怎么实
千家信息网最后更新 2025年02月16日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安全错误
数据库的锁怎样保障安全
不包含书法爱好数据库
软件开发中常用构件库
数据库识别基础知识
河北手机软件开发多少钱
数据库数据工作手册
互联网科技国家政策
上海大型软件开发价格多少
青岛事业单位招聘网络安全信息
软件开发需要分析工具
构建网络技术基础的关键技术
国外服务器桃色直播
华居天下网络技术有限公司
传输网络技术习题答案
杭州攻略网络技术有限公司
华为网络安全认证多少钱
app运行网络安全水平
网络诈骗属不属于网络安全
杭电 数据库原理
2017全球网络安全支付
有关网络安全英语情景对话
南邮研究生网络安全
网络安全法开始实行的
计算机服务器销售怎么样
青岛事业单位招聘网络安全信息
软件开发职业规划书里的职业兴趣
网络安全挑战赛郑州
网络安全产业发展论坛
奎屯新华互联网科技好不好
无法连接至vac安全服务器
鄞州一站式软件开发项目