(由于作者本人水平有限,如有错误还请大家指出)

  1. 画我方坦克 :JFrame是画框,Panel是画板,paint(Graphics g)是画笔。

    • JFrame中设置的大小是包括画板和窗口共同的大小

    • TankGame的构造器中初始化MyPanel,MyPanel的构造器中初始化Hero,一环扣一环

    • 何时调用paint方法:

      1. 组件第一次在屏幕上显示时程序自动调用

      2. repaint方法被调用

      3. 窗口大小发生变化

  2. 按键控制我方坦克移动:Java 的事件控---委派时间模型

    • 按键移动即改变方向加坐标改变

  3. 画出敌人坦克:用Vector保存(多个,有各自生命周期)

  4. 按下J键 我方发射子弹:由于子弹有各自生命周期,每发射一颗子弹就是一个线程。shot类相当于线程数据源,由hero调用线程并发射,在MyPanel判断是否要发射。

    由于hreo可以发射子弹 故画板上应画出子弹动态射击效果,所以应不停重绘面板---run方法可实现循环的效果---故把MyPanel做成一个线程---在TankGame的构造器中启动。

    • run方法可实现循环的效果

    • 线程的使用,一般也要注意该何时终止(这个项目中重绘却不用终止)

  5. 敌方坦克也能发射子弹:给每个敌方坦克配备多颗子弹,用Vector保存。子弹和坦克共存亡,初始化敌方坦克时也初始化子弹,画敌方坦克时也画子弹。【可优化的是,就算坦克消亡,子弹仍可飞完剩下的路程】

  6. 我方子弹击中敌方坦克时 敌方坦克和我方子弹消失,能做出爆炸效果更好:何为被击中---我方子弹在敌方坦克区域内,由于这个方法会改变显示的效果---把这个方法放在run方法中调用,判断是否有被击中的,则遍历敌方坦克 一个一个判断。

    做出爆炸效果:爆炸效果即为三张图片切换九次,定义Bomb类确定爆炸的位置 并用“生命值”控制图片的切换以做出更好的爆炸效果。在坦克被击中处设置一颗炸弹 放入炸弹集合,并在重绘面板时画出来

    • 为什么用Vector存放炸弹,而不是让炸弹一颗一颗的存在---防止同时射中多个坦克,因为用炸弹集合就是 击中一个坦克就放一颗炸弹到炸弹集合 然后画的时候再依次取出画

    • 敌方坦克被击中不仅要把生命值设为false,还要从坦克集合中移除,不然坦克还在那儿 只是没画出来

    • 每变化一些功能,就要看画出来的效果有什么变化,即paint方法中的变化

    • 怎样考虑将一个变量设置为全局还是局部:由于一个类中多个方法都要用到该变量 则设置为全局变量

  7. 敌方坦克自由移动:由于要能不停移动---做成线程,即Enemy继承Runnable,并在run方法中让坦克移动。在初始化敌方坦克时启动线程

  8. 控制坦克移动范围:在移动的时候 判断下一步还能移动吗,直接在Tank父类中根据移动方向的不同控制

  9. 我方坦克发射的子弹消亡后才能再发子弹:按下J键时判断 有无子弹存在(第一次发射)、子弹是否销毁

  10. 我方坦克最多同时发射规定颗子弹:由于是多颗故放在集合中,创建一颗就放在集合中,满个数就不创建了,在按下J键时调用则无需判断了因为方法本身就判断了

    • 由于有多颗子弹了,所以判断是否击中敌方坦克的方法要变,即要依次取出我方子弹了

    • 一个方法的变化,要考虑其他地方是否也要变---牵一发而动全身

  11. 敌方发射的子弹消亡后才能再发射:由于敌方坦克配备的是子弹集合,而且是在Enemy的run中不停发射子弹,故而在发射时判断Enemy子弹集合中子弹的个数是否为零(为零就说明子弹被销毁了),为零就再创建一颗放入集合然后发射

  12. 敌方可同时发射规定颗:只需再上述判断改为判断子弹集合中子弹的个数是否少于规定 个数

  13. 敌方子弹击中我方坦克,消失和爆炸效果:和击中敌方坦克的判断类似,取出敌方子弹,取出我方坦克,判断是否在我方坦克区域

  14. 防止敌方坦克重叠:将敌人坦克从集合中依次取出,判断是否在其他坦克范围内,故要在Enemy中定义坦克集合,并且要把MyPanel中真正的enemies设置到Enemy类(即setEnemies方法)。判断重叠与否,根据要判断的坦克的方向分成四大类,再根据用来判断的坦克分为八类。如果重叠了,则不能move~了

    • 再MyPanel中把集合设置到Enemy类中,不然有越界的异常

  15. 记录玩家总成绩(击中的敌方坦克总数),存盘退出:首先在MyPanel中添加一个画出记录总成绩的区域,在paint中调用。创建类记录成绩,在击中敌方坦克时增加成绩;能存盘退出,IO流,关闭窗口时调用

    • 记录的路径跟着工程走,就在src里创建文件

    • 关闭窗口时调用,addWindowListener

  16. 记录退出游戏时敌人坦克的坐标和方向,存盘退出:关闭窗口时调用的方法中再加上敌人坦克的坐标和方向即可

    • 在Recorder中创建敌人坦克集合,仍像Enemy那样处理

  17. 玩游戏时 可以选择新开游戏还是继续上一局:要能继续上一局,则需从文件中读取数据---将文件的数据恢复成Node结点集合,再根据结点恢复坦克(这些数据主要是初始化坦克时确定坐标和方向)。在游戏开始时能根据玩家选择开始游戏,故而创建一个菜单

    • 在Recorder中创建Node集合,存放数据,在初始化的时候就用这里面的数据,就可以恢复敌方坦克的状态【这儿不能恢复我方坦克的状态】

    • 菜单写在很多位置都可以,写在TankGame的构造器,可能是因为 在选择游戏模式后才会画出面板,故而写在TankGame挺好;加载面板等一系列操作写在构造器而不是主方法,主要是体现封装吧

    • "\r\n" 和 newLine() 都可换行

    • readLine 读取一行内容(返回字符串),但是没有换行,所以需要的话 要自己插入一个换行

    • 字符串转int:Integer.parseInt(String)、 Integer.valueOf(String)

      valueOf(String)方法会返回Integer类的对象,而parseInt(String)方法返回原始的int值

    • 字符串分成几个数据:字符串分割成数组,再根据索引获取

Java坦克大战Summary相关推荐

  1. java 坦克大战_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

  2. java坦克大战课设报告_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

  3. Java坦克大战游戏源码(java坦克大战)

    Java坦克大战游戏源码(java坦克大战) public Swingtest002() {// 设置标题setTitle("请登陆");// 绝对布局setLayout(null ...

  4. java坦克大战总体功能设计_Java坦克大战设计报告.doc

    Java坦克大战设计报告.doc <语言设计> 设计报告 信息工程学院专业班级:::指导老师:2011年7月22日 目录 目录2 题目一 坦克大战4 1.1题目简介4 1.2设计的内容.要 ...

  5. Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计

    Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计 有图有真相 操作方法:ASDW控制移动,鼠标控制炮筒旋转,鼠标左键开枪,空格发射炮弹, 开发思路是标准的游戏开发思路,单线程 ...

  6. Java坦克大战 (一) 之产生一个窗口

    本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...

  7. Java坦克大战(四)

    这是我的坦克游戏大战的最后一版,里面添加很多新的功能.这个坦克大战的有很多不足之处,但是对于初学者来说依然是一个很好的练习项目,从中我们可以学习Java基础知识,将知识与项目结合,学习面向对象编程思想 ...

  8. java 坦克大战画坦克_java简易坦克大战(2)

    public class Tank1 extends JFrame implements ActionListener { MyPanel mp = null; GuanKaPanel gkmb = ...

  9. java坦克大战(1.0)

    坦克大战 后面开始学习怎么使用java制造一个坦克大战游戏 但是不是直接开始做,而是随着这个游戏程序的制造,一边学习新知识融入到游戏中.包括多线程,反射,IO流- Java坐标体系 在几乎所有的坐标中 ...

  10. java坦克大战爆炸效果_Java极致毁童年系列、你们火星的坦克大战这样的吧

    原标题:Java极致毁童年系列.你们火星的坦克大战这样的吧 这是使用java开发的一个单机版的小游戏 (未使用任何游戏引擎) 和经典版的坦克大战有些不同, 这里是纯坦克之间的战争, 英雄坦克并不用保护 ...

最新文章

  1. 如何减少WIN7响应时间
  2. 信息系统项目管理师历年论文题目
  3. php imagick手册,PHP中使用Imagick实现各种图片效果实例
  4. Linux 常用命令六 cp和mv
  5. 从源码分析RocketMQ系列-MQClientInstance类详解
  6. one_hot编码学习与实践
  7. Redis的雪崩,击穿,穿透详解
  8. 集成基站混频器本振噪声的规格与测量
  9. 第三阶段应用层——1.3 数码相册—英文和汉字的点阵显示
  10. Html+Css+Js轮播图实现
  11. naxtTick获取服务器数据
  12. 我的三维mandelbulb制作fractal成长之路[续]
  13. 柠檬班python自动化百度云_柠檬班python
  14. 6m缓存和8m缓存差距_全能工具箱一款专门为安卓设备研发的综合型系统管理工具。实时内存、进程清理、缓存清理、SD卡文件管理、历史记录清除、开机项管理!...
  15. 怎样下载谷歌最新版100.0.4896.127chromedriver
  16. (一)极大似然估计法原理讲解
  17. CPU测试相关工具搜集
  18. 【jvm内存占用过高分析】
  19. [javaws]jnlp介绍及使用
  20. 快手引流犯法吗?如果发现造成具体损失以及影响恶劣的情况会被起诉

热门文章

  1. 统计学贾俊平第六版pdf下载|贾俊平统计学第六版pdf下载电子书
  2. CAT1 4G+以太网开发板腾讯云手机微信小程序显示温度和下发控制
  3. 用计算机关闭无线网络连接,干货分享:打印机无线连接断开了怎么办?
  4. 摄像头网络信号测试软件,工程宝如何测试摄像机
  5. 解决Unity中文显示乱码问题
  6. 群辉安装linux软件下载,群晖系统Synology DSM安装ipkg包管理和套件安装方法
  7. 费率转换成利率的计算器_存款利率计算器
  8. 莫烦 Tensorflow
  9. JAVA的MySQL字符串拼接_MySQL字符串拼接、截取
  10. 伍德里奇计量经济学第五版第四章计算机操作,伍德里奇计量经济学第四章