Java坦克大战开发每天总结
第一天 | | 第一天后完成功能 运行程序后弹出窗口,窗口能够关闭,有一个实体圆代表坦克,能够对键盘实施监听,并完成8个方向的移动。对于control键的监听按下后能发出一发子弹。子弹能按照坦克当前的方向向前射出。
Bug || 当坦克不移动时子弹也不能动,出现在坦克位置上。
代码实现思维 || 主程序TankClient ||
主程序是窗口TankClient extends Frame 类,
有坦克类,子弹类,枚举方向。
|| 在main方法类new 一个TankClient对象,调用launch 方法。
|| 在launch方法中set form的各种数据,
|| 在TankClient类中重写paint方法,画出窗体中的对象坦克,即调用坦克
的draw方法。
|| 重写update方法,消除闪烁。
|| 写一个内部类paintThread implements Runnable。在run方法中每隔一段时
间调用repaint方法。(repaint 方法会先调用update方法,然后调用paint
方法)在luanch方法中new paintThread 的对象并调用start方法。这样对
于坦克位置的改变就可以不断刷新重画。
|| 对于键盘的监听,在launch方法中addkeyListener 加入键盘的监听事件
在TankClient中再写一个内部类,KeyMonitor extends keyAdapter。重写
KeyPressed 和 keyReleased 方法。但是因为是坦克对键盘的上下左右
以及control 做出反应,所以交给坦克类处理。即在keyPressed 和
KeyReleased方法中调用坦克类的 keyPressed 和 keyReleased 方法
|| 坦克类 Tank ||
|| 坦克的属性 位置坐标,坦克大小。都应该设置为private 变量。方便类内
部的修改,坦克的方向。
|| 坦克类中的方法:构造方法 、draw()、keyPressed()、keyReleased()、
Move()、Dirction()。
Draw()方法画出坦克。并且调用move(),对于当前的坦克方向进行移动。
Direction() 对当前坦克的方向进行判断。因为有9个方向,L,LU,U,RU,
R,RD,D,LD,STOP。所以在在坦克类定义四个bool类型的成员变量L,U
R,D。在keyPressed方法中当某个键被按下取得时候,对应的bool变量
赋值为true,当相应的键松开时keyReleased调用。对应的bool变量赋值
为fasle。这样根据4个bool类型的值判断坦克方向。
Move()方法则根据方向移动坦克。
|| 子弹类 bullet ||
|| 子弹的属性。位置,方向都由当前的坦克传递。
|| 子弹的draw()方法。根据位置,大小画出。
|| 子弹的move()方法copy 坦克的。
2014年5月 22日