坦克大战2.0向3.0版本的实现

 最近在做一个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();
            
        }

 

 说了半天还没到主题,写的时候老是思绪很乱,明天再写吧,还是要好好准备准备的

这次大意了! 

——明天继续,明天还是中秋节呢!

 

 

 

 

 

 

 

      

转载于:https://www.cnblogs.com/ybzmy/p/9694010.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值