Java坦克大战Summary
(由于作者本人水平有限,如有错误还请大家指出)
画我方坦克 :JFrame是画框,Panel是画板,paint(Graphics g)是画笔。
JFrame中设置的大小是包括画板和窗口共同的大小
TankGame的构造器中初始化MyPanel,MyPanel的构造器中初始化Hero,一环扣一环
何时调用paint方法:
组件第一次在屏幕上显示时程序自动调用
repaint方法被调用
窗口大小发生变化
按键控制我方坦克移动:Java 的事件控---委派时间模型
按键移动即改变方向加坐标改变
画出敌人坦克:用Vector保存(多个,有各自生命周期)
按下J键 我方发射子弹:由于子弹有各自生命周期,每发射一颗子弹就是一个线程。shot类相当于线程数据源,由hero调用线程并发射,在MyPanel判断是否要发射。
由于hreo可以发射子弹 故画板上应画出子弹动态射击效果,所以应不停重绘面板---run方法可实现循环的效果---故把MyPanel做成一个线程---在TankGame的构造器中启动。
run方法可实现循环的效果
线程的使用,一般也要注意该何时终止(这个项目中重绘却不用终止)
敌方坦克也能发射子弹:给每个敌方坦克配备多颗子弹,用Vector保存。子弹和坦克共存亡,初始化敌方坦克时也初始化子弹,画敌方坦克时也画子弹。【可优化的是,就算坦克消亡,子弹仍可飞完剩下的路程】
我方子弹击中敌方坦克时 敌方坦克和我方子弹消失,能做出爆炸效果更好:何为被击中---我方子弹在敌方坦克区域内,由于这个方法会改变显示的效果---把这个方法放在run方法中调用,判断是否有被击中的,则遍历敌方坦克 一个一个判断。
做出爆炸效果:爆炸效果即为三张图片切换九次,定义Bomb类确定爆炸的位置 并用“生命值”控制图片的切换以做出更好的爆炸效果。在坦克被击中处设置一颗炸弹 放入炸弹集合,并在重绘面板时画出来
为什么用Vector存放炸弹,而不是让炸弹一颗一颗的存在---防止同时射中多个坦克,因为用炸弹集合就是 击中一个坦克就放一颗炸弹到炸弹集合 然后画的时候再依次取出画
敌方坦克被击中不仅要把生命值设为false,还要从坦克集合中移除,不然坦克还在那儿 只是没画出来
每变化一些功能,就要看画出来的效果有什么变化,即paint方法中的变化
怎样考虑将一个变量设置为全局还是局部:由于一个类中多个方法都要用到该变量 则设置为全局变量
敌方坦克自由移动:由于要能不停移动---做成线程,即Enemy继承Runnable,并在run方法中让坦克移动。在初始化敌方坦克时启动线程
控制坦克移动范围:在移动的时候 判断下一步还能移动吗,直接在Tank父类中根据移动方向的不同控制
我方坦克发射的子弹消亡后才能再发子弹:按下J键时判断 有无子弹存在(第一次发射)、子弹是否销毁
我方坦克最多同时发射规定颗子弹:由于是多颗故放在集合中,创建一颗就放在集合中,满个数就不创建了,在按下J键时调用则无需判断了因为方法本身就判断了
由于有多颗子弹了,所以判断是否击中敌方坦克的方法要变,即要依次取出我方子弹了
一个方法的变化,要考虑其他地方是否也要变---牵一发而动全身
敌方发射的子弹消亡后才能再发射:由于敌方坦克配备的是子弹集合,而且是在Enemy的run中不停发射子弹,故而在发射时判断Enemy子弹集合中子弹的个数是否为零(为零就说明子弹被销毁了),为零就再创建一颗放入集合然后发射
敌方可同时发射规定颗:只需再上述判断改为判断子弹集合中子弹的个数是否少于规定 个数
敌方子弹击中我方坦克,消失和爆炸效果:和击中敌方坦克的判断类似,取出敌方子弹,取出我方坦克,判断是否在我方坦克区域
防止敌方坦克重叠:将敌人坦克从集合中依次取出,判断是否在其他坦克范围内,故要在Enemy中定义坦克集合,并且要把MyPanel中真正的enemies设置到Enemy类(即setEnemies方法)。判断重叠与否,根据要判断的坦克的方向分成四大类,再根据用来判断的坦克分为八类。如果重叠了,则不能move~了
再MyPanel中把集合设置到Enemy类中,不然有越界的异常
记录玩家总成绩(击中的敌方坦克总数),存盘退出:首先在MyPanel中添加一个画出记录总成绩的区域,在paint中调用。创建类记录成绩,在击中敌方坦克时增加成绩;能存盘退出,IO流,关闭窗口时调用
记录的路径跟着工程走,就在src里创建文件
关闭窗口时调用,addWindowListener
记录退出游戏时敌人坦克的坐标和方向,存盘退出:关闭窗口时调用的方法中再加上敌人坦克的坐标和方向即可
在Recorder中创建敌人坦克集合,仍像Enemy那样处理
玩游戏时 可以选择新开游戏还是继续上一局:要能继续上一局,则需从文件中读取数据---将文件的数据恢复成Node结点集合,再根据结点恢复坦克(这些数据主要是初始化坦克时确定坐标和方向)。在游戏开始时能根据玩家选择开始游戏,故而创建一个菜单
在Recorder中创建Node集合,存放数据,在初始化的时候就用这里面的数据,就可以恢复敌方坦克的状态【这儿不能恢复我方坦克的状态】
菜单写在很多位置都可以,写在TankGame的构造器,可能是因为 在选择游戏模式后才会画出面板,故而写在TankGame挺好;加载面板等一系列操作写在构造器而不是主方法,主要是体现封装吧
"\r\n" 和 newLine() 都可换行
readLine 读取一行内容(返回字符串),但是没有换行,所以需要的话 要自己插入一个换行
字符串转int:Integer.parseInt(String)、 Integer.valueOf(String)
valueOf(String)方法会返回Integer类的对象,而parseInt(String)方法返回原始的int值
字符串分成几个数据:字符串分割成数组,再根据索引获取
Java坦克大战Summary相关推荐
- java 坦克大战_java课程设计之坦克大战
本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...
- java坦克大战课设报告_java课程设计之坦克大战
本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...
- Java坦克大战游戏源码(java坦克大战)
Java坦克大战游戏源码(java坦克大战) public Swingtest002() {// 设置标题setTitle("请登陆");// 绝对布局setLayout(null ...
- java坦克大战总体功能设计_Java坦克大战设计报告.doc
Java坦克大战设计报告.doc <语言设计> 设计报告 信息工程学院专业班级:::指导老师:2011年7月22日 目录 目录2 题目一 坦克大战4 1.1题目简介4 1.2设计的内容.要 ...
- Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计
Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计 有图有真相 操作方法:ASDW控制移动,鼠标控制炮筒旋转,鼠标左键开枪,空格发射炮弹, 开发思路是标准的游戏开发思路,单线程 ...
- Java坦克大战 (一) 之产生一个窗口
本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...
- Java坦克大战(四)
这是我的坦克游戏大战的最后一版,里面添加很多新的功能.这个坦克大战的有很多不足之处,但是对于初学者来说依然是一个很好的练习项目,从中我们可以学习Java基础知识,将知识与项目结合,学习面向对象编程思想 ...
- java 坦克大战画坦克_java简易坦克大战(2)
public class Tank1 extends JFrame implements ActionListener { MyPanel mp = null; GuanKaPanel gkmb = ...
- java坦克大战(1.0)
坦克大战 后面开始学习怎么使用java制造一个坦克大战游戏 但是不是直接开始做,而是随着这个游戏程序的制造,一边学习新知识融入到游戏中.包括多线程,反射,IO流- Java坐标体系 在几乎所有的坐标中 ...
- java坦克大战爆炸效果_Java极致毁童年系列、你们火星的坦克大战这样的吧
原标题:Java极致毁童年系列.你们火星的坦克大战这样的吧 这是使用java开发的一个单机版的小游戏 (未使用任何游戏引擎) 和经典版的坦克大战有些不同, 这里是纯坦克之间的战争, 英雄坦克并不用保护 ...
最新文章
- 如何减少WIN7响应时间
- 信息系统项目管理师历年论文题目
- php imagick手册,PHP中使用Imagick实现各种图片效果实例
- Linux 常用命令六 cp和mv
- 从源码分析RocketMQ系列-MQClientInstance类详解
- one_hot编码学习与实践
- Redis的雪崩,击穿,穿透详解
- 集成基站混频器本振噪声的规格与测量
- 第三阶段应用层——1.3 数码相册—英文和汉字的点阵显示
- Html+Css+Js轮播图实现
- naxtTick获取服务器数据
- 我的三维mandelbulb制作fractal成长之路[续]
- 柠檬班python自动化百度云_柠檬班python
- 6m缓存和8m缓存差距_全能工具箱一款专门为安卓设备研发的综合型系统管理工具。实时内存、进程清理、缓存清理、SD卡文件管理、历史记录清除、开机项管理!...
- 怎样下载谷歌最新版100.0.4896.127chromedriver
- (一)极大似然估计法原理讲解
- CPU测试相关工具搜集
- 【jvm内存占用过高分析】
- [javaws]jnlp介绍及使用
- 快手引流犯法吗?如果发现造成具体损失以及影响恶劣的情况会被起诉
热门文章
- 统计学贾俊平第六版pdf下载|贾俊平统计学第六版pdf下载电子书
- CAT1 4G+以太网开发板腾讯云手机微信小程序显示温度和下发控制
- 用计算机关闭无线网络连接,干货分享:打印机无线连接断开了怎么办?
- 摄像头网络信号测试软件,工程宝如何测试摄像机
- 解决Unity中文显示乱码问题
- 群辉安装linux软件下载,群晖系统Synology DSM安装ipkg包管理和套件安装方法
- 费率转换成利率的计算器_存款利率计算器
- 莫烦 Tensorflow
- JAVA的MySQL字符串拼接_MySQL字符串拼接、截取
- 伍德里奇计量经济学第五版第四章计算机操作,伍德里奇计量经济学第四章