基于Java坦克大战小游戏设计 (2)
接下来继续完善element下物体类,以及添加有关整体游戏进程、配置、绘画相关的类。
game包:GameRunThread线程用来开始并处理游戏运行中出现的各种事件,继承thread类。
public void run() {// TODO Auto-generated method stubwhile(true) {try {Thread.sleep(GameStartUtil.FrameSleep);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(MyJFrame.FLAG){tankMove();enemyTankAttack();bulletListMove();elementCollide();outOfBound();elementRemove();checkGame();}}}
整个游戏的过程可描述为:英雄坦克移动、敌方坦克攻击、打出的子弹的移动、物体碰撞处理、出界处理、移除非法物体、检查游戏状态。
MyJFrame:游戏主窗体
MyJPanel:游戏画板
TankFightStart:游戏主类,初始化MyJFrame并给窗体添加监听器即可。
gameUtil包:
createElementThread:游戏中创建所有物体的线程,也相当于一个“工厂”,游戏中所有需要的元素,以及配置文件的加载都可以通过它来创建。
gamestartutil:配置游戏的一些固定的东西,包括窗体宽高、线程休眠时间等
.pro文件:游戏的配置文件。物体的图片,物体的坐标等等都应该直接写进配置文件里,再让”工厂“通过读这些文件来创建物体。
manager包:
elementmanager:单例模式。游戏中的所有元素如所有坦克,所有子弹,墙,家等物体、线程等等都归这个类管理。因此要通过构造方法私有化以及用synchronized上锁,让这个类始终只有一个实例。想要什么元素都可以通过这个类来获取到。
接下来,首先让英雄坦克(我方坦克)动起来,并且能发射子弹。
坦克动起来:
整个过程分为如下步骤:
1. 通过createElementThread类 读取hero.pro得到坦克的配置信息(一组图片,坐标等等);
2. 创建坦克:调用createElementThread类中的createHeroTank方法,具体则是通过管理类elementmanager.getElementManager()的setHeroTank方法来创建坦克,注意同时初始化方向和生命值。
3. 画出坦克:在MyJPanel类的paint中加入heroshow方法,该方法则是通过调用tank类中的draw方法来画出坦克。
4. 坦克的逻辑处理:即键盘按下方向键后,坦克要怎么移动的处理。这部分很明显应该写在gamerunthread的run中的tankmove方法中。该方法应该包含英雄坦克还有敌方坦克的移动。
英雄坦克的移动时根据监听键盘按键后得到的状态来进行对应的处理。
监听器应该写在窗体类MyJFrame中,然后根据按键设置坦克状态。
gamerunthread的run中的tankmove方法则根据tank状态来设置坦克的方向,然后调用tank类中的move方法即可。
发射子弹:
整个过程步骤跟上面大同小异:
1. 通过createElementThread类 读取bullet.pro得到子弹的配置信息(一组图片);
2. 创建子弹:调用createElementThread类中addHeroBulletToList方法,添加一颗子弹到elementmanager类中的英雄子弹集合heroTankBullet中。子弹的坐标应该是坦克的大炮的坐标。
这里与创建坦克不同,不需要在run方法中调用创建子弹的方法,而是在监听到按下开火键(F)时再调用它。
3. 画出子弹:同坦克的绘画是一样的道理。
4. 子弹的逻辑处理:即键盘按下开火键之后,子弹的移动。同样应该在gamerunthread中的bulletListMove方法中处理,具体逻辑很简单,只需要遍历elementmanager类中的英雄子弹集合heroTankBullet,如果isExist,那么调用bullet的move方法。
同样的,监听器在窗体类MyJFrame中,监听到F键按下时,调用elementmanager.getElementManager().getceThread()来得到createElementThread的实例,并让它调用addHeroBulletToList方法来创建子弹。
从上面两个物体的创建可以得到所有物体创建的一般步骤:
首先读取该物品的配置文件,获取它的配置信息;
接下来让“工厂”createElementThread来创建这个物体;
然后在MyJPanel中画出来;
在gamerunthread类中加入对这个物体的逻辑处理。
同时在整个过程中,ElementManager类起到很重要的作用,可以通过它来拿到任何东西(如坦克,子弹),还可以通过它来通知“工厂”createElementThread生产东西。
这也是体现java中的“分工”的思想,各个类有各自的工作要做,不多做,不少做。
基于Java坦克大战小游戏设计 (2)相关推荐
- 基于Java坦克大战小游戏设计(1)
还是采用上学期学习到的设计模式,抽点时间写下这个游戏,游戏逻辑部分先写简单一点的,主要想加深对java设计.模块化等方面的理解. 首先先写Element包下各个元素的类:包括子弹.坦克.树木.河流.家 ...
- 一小时制作java坦克大战小游戏
<坦克大战>是由日本南梦宫Namco游戏公司开发的一款平面射击游戏,于1985年发售.游戏以坦克战斗及保卫基地为主题,属于策略型联机类. 同时也是FC平台上少有的内建关卡编辑器的几个游戏之 ...
- 基于java的俄罗斯方块小游戏设计(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 题 目 小游戏开发 摘 要 俄罗斯方块是我们最常见的游戏之一,该 ...
- python小游戏毕设 坦克大战小游戏设计与实现 (源码)
文章目录 0 项目简介 1 游戏介绍 2 实现效果 3 开发工具 3.1 环境配置 3.2 Pygame介绍 4 具体实现 4.1 实现游戏主循环 4.2 制作游戏开始和结束界面 5 最后 0 项目简 ...
- 【JAVA程序设计】基于JAVA的坦克大战小游戏--入门级小游戏
基于JAVA的坦克大战小游戏--入门级小游戏 零.项目获取 一.项目简介 二.开发环境 三.游戏玩法 四.运行截图 零.项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100 ...
- Java实现的经典坦克大战小游戏
Java实现的经典坦克大战小游戏 先看一下游戏结构: 有点多,没有耐心的可以不用看,这里先给出链接吧! 云链接:经典坦克大战 提取码:s9ai 这里就不介绍功能了,贴了一张游戏运行的截图,具体的功能自 ...
- java毕业设计——基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码)——堡垒游戏
基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME的堡垒游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章目录: 基于ja ...
- 基于c语言的小游戏,--基于C语言的小游戏设计.doc
--基于C语言的小游戏设计.doc 级丌 密公 本科生毕业(学位)论文 基于c语言的爪游软设计 李俊佶 (2009061322) TOC \o "1-5" \h \z 指导教师姓名 ...
- html实现经典坦克大战小游戏
文章目录 1.设计来源 1.1 游戏主界面 1.2 游戏界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/w ...
最新文章
- 悠悠二十载,Nginx创始人Igor宣布离职
- Hadoop会遇到的45个问题,你确定你了解吗?
- DearGUI编写贪吃蛇之让蛇跑的方向受控制_最新
- tee 和 ree分别是什么意思?
- ML之ME/LF:机器学习中常见模型评估指标/损失函数(LiR损失、L1损失、L2损失、Logistic损失)求梯度/求导、案例应用之详细攻略
- C++ | C++实现高精度加法——数组加法(附源代码)
- 星辰大海:阿里数据体验技术揭秘!
- db:migrate
- 【项目管理】知识域在过程组中的体现
- 使用MONO使.net程序脱离.net框架运行
- 苹果“双标”?法国版iPhone13仍赠送耳机,在中国同款售价却要149元
- VS2010版快捷键指南
- Double得有效位
- u盘数据恢复软件哪个好?怎么恢复u盘数据?
- html5中加水平分割线,HTML设置水平分割线
- IOI2008 island
- 快速爬取腾讯招聘信息
- 【钉钉-场景化能力包】制造业考勤数据多维分析
- 数据库事务及其四大特性
- LiveNVR传统IP摄像机接入-网页直播实现跨域鉴权