最近在做一个Java实战项目——坦克大战,由于2.0版本向3.0版本的是实现中有较为重大进步(线程在其中的应用)
所以打算记录一下,作为思路总结,也为了以后留下了一个线索。
2.0版实现了如下简单功能
1.利用Java 坐标系,画出简易坦克
2.利用自己定义的类以及系统提供的集合类(应该用Vector而不是ArrayList,下次写一篇总结这两者的差别)批量生产出敌方坦克,先暂定4辆
3.利用事件监听及处理,让操作者利用W、S、A、D键控制坦克头部的朝向和上下移动
3.0版实现如下功能
1.利用Java 坐标系,画出简易坦克
2..利用自己定义的类以及系统提供的集合类(应该用Vector而不是ArrayList,下次写一篇总结这两者的差别)批量生产出敌方坦克,先暂定4辆
3.利用事件监听及处理,让操作者利用W、S、A、D键控制坦克头部的朝向和上下左右移动
4.利用线程等有关知识,让操作者可以通过点击 J键发射子弹,发射后子弹自动移动
只重点总结第四点:
相比于上一版,这一版只是增加了一个子弹及其移动的功能,实际上,我方的坦克只有物种行为或者说动作,是 上下左右移动和发射子弹
这都是定义在我方坦克类Hero内的方法,发射子弹的方法取名为ShotEnmpy().如下
//我的坦克 class Hero extends Tank{ //子弹 Shot s=null; public Hero(int x,int y) { super(x,y); } //开火 上下左右移动,这是我的坦克的所有行为 /** * 关于开火,也取决于我的坦克的朝向 * */ public void shotEnmpy() { switch(this.direct) { case 0: s=new Shot(x,y-15,0); break; case 1: s=new Shot(x+20,y,1); break; case 2: s=new Shot(x,y+20,2); break; case 3: s=new Shot(x-20,y,3); break; } //启动子弹线程 Thread t=new Thread(s); t.start(); } public void move_up() { y-=speed; } public void move_down() { y+=speed; } public void move_left() { x-=speed; } public void move_right() { x+=speed; } }
但是子弹是什么呢?
我们要明白,和发射子弹不同,子弹是我方和敌方都有的属性。因为我只能控制自己的坦克发射子弹,
我不能控制敌方的坦克是吧,所以说发射子弹是我独有的不能被抽象出来类。可子弹不是啊,子弹是我和敌人
都有的啊,可以抽象成一个类的。取名为Shot .
啥时候调用Shot类的实例或者shotEnmpy()方法呢?具体流程是什么?
因该是当J0被点击的时候,打个比方,点击J键就像是扣动了扳机
此时Hero类的实例方法会调shotEnmy方法,直接上代码
if(e.getKeyCode() == KeyEvent.VK_J) { //开火 this.hero.shotEnmpy(); }
说了半天还没到主题,写的时候老是思绪很乱,明天再写吧,还是要好好准备准备的
这次大意了!
——明天继续,明天还是中秋节呢!