java开发坦克大战小游戏

注:这是马老师讲的坦克大战的具体功能及其实现步骤,非常适合初学者刚学完java想根据需求练练手。

 

版本0

功能:

  • 创建一个指定大小的窗口

掌握:

  • 通过eclipse建立一个新的项目
  • 为新的项目指定不同的源代码和输出目录
  • 指定项目所用的版本
  • 通过eclipse建立新的类

 

版本0.1

功能:

  • 添加关闭窗口的事件
  • 不允许窗口大小改变

掌握:

  • 匿名类的用法(应用场合)
  • 通eclipse重写父类的方法

 

版本0.2

功能:

  • 画出代表坦克的实心圆

掌握:

  • 如何重写paint方法

 

版本0.3

功能:

  • 让坦克运动起来

步骤:

  • 将位置改变为变量;
  • 启动线程不断重复画;
  • 每次重画改变坦克位置

掌握:

  • 内部类的使用(好处,什么时候用)
  • 可以方便的访问包装类的方法;不方便公开的,只为包装类服务的类应当定义为内部类

 

 

版本0.31

功能:

  • 使用双缓冲消除闪烁现象

原因:

  • 刷新重画频率太快,paint方法还没完成
  • 逐条显示

解决:

  • 将所有东西画在虚拟图片上,一次性显示出来

 

 

版本0.4

功能:

  • 代码重构

步骤:

  • 将以后可能需要多处改变的量定义为常量
  • 一般用public static final
  • 常量名一般大写

 

 

版本0.5

功能:

  • 键盘控制坦克

步骤:

  • 键盘监听类KeyMonitor
  • 内部类
  • 注意:switch case语句的使用和break的运用

 

版本0.6——重要版本

功能:

  • 将坦克单独封装成为一个类

步骤:

  • 建立Tank类
  • 为Tank类天界成员变量和构造方法
  • 添加draw方法,使得Tank类可以单独控制自己的画法
  • 添加Tank类处理按键的方法
  • 根据Tank修改TankClient类

掌握:

  • 面向对象的思想
  • 细节隐藏,构建单独的类,首先考虑系统中有哪些类
  • 合适的方法应该出现在合适的类中

 

 

版本0.7——重要版本

功能:

  • 让坦克向8个方向走

步骤:

  • 添加记录按键状态的布尔量
  • 添加代表方向的量(使用枚举)
  • 根据按键状态确定Tank的方向
  • 方向进行下一步的移动(move)

 

 

版本0.8

功能:

  • 让坦克向8个方向走(2)

步骤:

  • 处理键抬起的消息
  • 修改TankClient相关代码

 

 

版本0.9

功能:

  • 添加子弹类

步骤:

  • 添加Missile类
  • 添加x,y,dir等属性以及常量
  • 添加构造方法
  • 根据不同方向,进行不同的运动
  • 在TankClient中模拟一颗子弹

注意:

  • 不一定一次写到位
  • 进行多次试验
  • 将步骤分解开来逐一进行调试

 

 

版本1.0

功能:

  • 根据主战坦克的方向和位置,打出子弹

步骤:

  • 增加对Ctrl键的按键处理
  • 根据坦克打出一发子弹这个话,来确定Tank中的方法fire,其返回值为Missle
  • 根据Tank方向和位置设定子弹的方向和位置x、y出来,然后返回fire方法的实现

 

 

版本1.1

功能:

  • 为了解决坦克停下也能打出炮弹的问题——画出炮筒

步骤:

  • Tank类增加新的属性ptDir
  • 每次move后根据Tank新的方向确定炮筒的方向
  • 将炮筒用直线的形式表示出来

 

 

版本1.2

功能:

  • 打出多发炮弹

步骤:

  • 使用容器装炮弹
  • 每当抬起ctrl键就网容器中加入新的炮弹
  • 逐一画出每一发炮弹

注意:

  • 泛型的使用
  • 将TankClient的实例传递到Tank中
  • this的运用类的初始化过程

 

 

版本1.3

功能:

  • 解决炮弹不消亡的问题
  • 解决坦克出界的问题

步骤:

  • 加入控制炮弹生死的量bLive(Missile)
  • 当炮弹已经死去就不需要对其重画
  • 当炮弹死亡就从容器炒中去除
  • 当炮弹飞出边界就死亡

 

Debug的运用

  • 一步一步跟踪代码
  • 为代码设置断点
  • Step into和step over的概念
  • 学会在运行过程中观察变量的值

 

 

版本1.4

功能:

  • 画一辆敌人的坦克

步骤:

  • 加入区别敌我的量good
  • 根据敌我的不同设置不同的颜色
  • 更新Tank的构造函数,加入good
  • TanClient中new出敌人的坦克并画出

 

 

版本1.5

功能:

  • 将敌人的坦克击毙

分析:

  • 一颗子弹击中敌人的坦克

步骤:

  • Missile中加入hitTank(Tank)方法,返回布尔类型
  • 碰撞检测的辅助类Rectangle
  • 为Tank和Missile都加入getRect方法
  • 当击中敌人坦克时候,坦克被打死,子弹也死去
  • 增加控制tank生死的量live
  • 如果死去就不画了

 

 

版本1.6

功能:

  • 加入爆炸的感觉

步骤:

  • 添加爆炸类(加入不同直径的圆模拟爆炸,加入live,加入位置属性,加入draw方法)
  • 爆炸应该存在于集合类中(TankClient加入集合,将集合中的爆炸逐一画出)
  • 击毙一辆坦克后应产生爆炸(hitTank是应产生爆炸,不能直接访问爆炸集合,加入TankClient引用Missile类,当new Missile时候应该指定哪里画出哪个TankClient,修改Tank类fire方法,当new Missile时候将保存好的TankClient变量传递给Missile

 

 

版本1.7

功能:

  • 添加多量坦克

步骤:

  • 用容器类来装敌人的Tank
  • 向容器中装入多辆敌人Tank
  • 画出来
  • 运行,不能打掉(添加hitTanks方法,打一系列Tank,TankClient里面每发子弹都打tanks)

 

 

版本1.8

功能:

  • 让敌方坦克更加智能

步骤:

  • 让敌方坦克动起来(构造方法中可以指定方向,new敌方坦克的时候指定敌方坦克的方向)
  • 然敌方坦克向随机方向移动(Tank是静态的,添加随机数产生器java.util.Random,move完成后如果是敌方坦克的随机产生一个数,来设定坦克的下一个方向,Direction.values();)
  • 让敌方坦克向随机方向移动随机步数(添加变量,记录随机步数,当==0时,改变方向,否则知识随机步数递减)
  • 让敌方坦克发射炮弹(我方坦克炮弹不大我方坦克,炮弹添加好坏bGood,根据好坏画不同颜色,修改炮弹的构造方法,修改Tank的fire方法,修改hitTank方法,好不能打好,坏不能打坏)
  • 敌方炮火不能太猛烈

 

 

版本1.9

功能:

  • 添加两堵墙

步骤:

  • 建立一个Wall类,建立Wall对象,画出来
  • 让每一颗子弹打击每一堵墙(hitWall()方法,子弹速度不能太快,否则容易穿过墙);
  • 让坦克不能穿过墙(记录上一次的位置oldx,oldy,修改构造函数,每次move之前记录上一次的位置,添加stay方法,记录移动前的位置,当撞到时回到移动前的位置,当碰到墙的时候stay());

 

 

版本2.0

功能:

  • 坦克不能相互穿越

步骤:

  • 当坦克撞到Tank的时候stay();

 

 

 

版本2.1

功能:

  • 超级炮弹

步骤:

  • 处理按键A

 

 

版本2.2

功能:

  • 主坦克的生命值

步骤:

  • 加入fire变量
  • 在窗口显示生命值

 

 

版本2.3

功能:

  • 图形化表示主战坦克的生命值

步骤:

  • 根据不同的life值进行不同的显示

 

 

版本2.4

功能:

  • 添加血块

步骤:

  • 添加blood类
  • 添加必要的方法
  • 让blood对象固定轨迹运动,并在一定时间后消失

 

 

版本2.5

功能:

  • 敌人死光了重新加入
  • 主战坦克死了按F2开始复活

 

 

你可能感兴趣的:(●Java)