关闭

java项目之——坦克大战19

标签: java项目
297人阅读 评论(0) 收藏 举报
分类:

本版本:让敌人的坦克更加智能(人工智能)

1.首先让它动起来:方向(move) 然后 随机数产生器
a.坦克中加方法:

public Tank(int x,int y,Boolean good,Direction dir,TankClient tc){
	   this(x,y,good);
	   this.dir = dir;
	   this.tc=tc;	   
   }
修改主类中的代码:

Tank myTank = new Tank(50, 50,true,Tank.Direction.STOP,this);
修改敌方坦克代码:

for(int i=0;i<10;i++){
			tanks.add(new Tank(50+40*(i+1),50,false,Tank.Direction.D,this));
		}

b.随机让坦克运动

if(!good){
		   Direction[] dirs = Direction.values();
		   
			
			   int rn = r.nextInt(dirs.length);<pre name="code" class="html">
dir = dirs[rn]; }



2.让敌军坦克发射炮弹:a.本军炮弹不打本军,添加bGood

<pre name="code" class="html">private boolean good;   //子弹类



使用方法调用good

public boolean isGood() {
		return good;
	}

修改构造方法:

public Missile(int x, int y,boolean good,Tank.Direction dir,TankClient tc) {
        this.x = x;
        this.y = y;
        this.good = good;
        this.dir=dir;
        this.tc= tc;
    }

 b.修改坦克fire方法

public Missile fire(){
        
        if(!live)  return null;
        int x=this.x+Tank.WIDTH/2-Missile.HEIGHT/2;
        int y=this.y-Missile.WIDTH/2+Tank.HEIGHT/2;
        Missile m = new Missile(x, y,good,ptDir,this.tc);
        tc.missiles.add(m);
        return m;
    }

c.修改hitTank方法 好不能打好的,坏不能打坏的

public boolean hitTank(Tank t){
        if(this.live && this.getRect().intersects(t.getRect()) && t.isLive() && this.good !=t.isGood()){
            t.setLive(false);
            this.live=false;
            Explode e = new Explode(x, y, tc);
            tc.explodes.add(e);
            return true;    
        }
            return false;
    }

3.敌军坦克炮火不能太猛
 if(r.nextInt(40)>38) this.fire();

if(r.nextInt(40)>38) this.fire();

总结:人工智能很复杂,在这里如果要做的更加智能,需要使敌方坦克的炮筒总是对准我方坦克   这时候需要角度的计算,比较复杂,有兴趣的可以尝试一下。

下一版本:添加墙,创建Will类

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Java学习总结之坦克大战项目(完结版)

V1.0:
  • u011648768
  • u011648768
  • 2013-09-20 12:21
  • 2403

C++实战项目:坦克大战(一)

对坦克大战情有独钟是因为大学时候第一次参加程序设计比赛就做的这个游戏。当时用的语言是Java,那个比赛让我悟出了面向对象的强大之处,我也是从那时开始接触设计模式的。对我而言,坦克大战有着非同寻常的意义...
  • qq_26046771
  • qq_26046771
  • 2017-03-26 08:54
  • 8854

【Java_项目篇<1>】--JAVA实现坦克大战游戏--坦克发射子弹(三)

前期相关文章【Java_项目篇】–JAVA实现坦克大战游戏–画出坦克(一) 【Java_项目篇】–JAVA实现坦克大战游戏–坦克移动+添加敌方坦克(二)一、任务需求添加hero坦克子弹并且发射。二、...
  • qq_24653023
  • qq_24653023
  • 2016-08-20 21:33
  • 8426

java项目之——坦克大战14

上一个版本:坦克打出多发子弹; 功能:解决炮弹不消亡的问题,解决坦克出界问题。            子弹打中对方坦克或者出界,定义一个控制生死的变量。
  • chdyiboke
  • chdyiboke
  • 2016-08-28 08:01
  • 348

java项目之——坦克大战20

本版本:添加两堵墙。 1.在主类中:墙对象 Wall w1 = new Wall(100, 200, 20, 150, this), w2 = new Wall(300, 100, 300, 20,...
  • chdyiboke
  • chdyiboke
  • 2016-08-29 20:26
  • 368

java项目之——坦克大战26

本版本做最后的修正:敌人死光重新加入,主战坦克死掉F2重新开始。 1.主类中: 画方法里面判断,如果无敌方坦克,就添加。 if(tanks.size()<=0){ for(int i...
  • chdyiboke
  • chdyiboke
  • 2016-08-30 10:25
  • 386

java项目之——坦克大战10

实现了坦克的移动,现在要实现坦克可以打出炮弹: 功能:添加子弹类,添加方法和参数。 1.位置和方向属性 int x,y; Tank.Direction dir; 2.构造方法...
  • chdyiboke
  • chdyiboke
  • 2016-08-13 21:34
  • 367

java项目之——坦克大战24

图形化表示主战坦克的生命值 a.我们在坦克里面创造内部类: private BloodBar bb= new BloodBar(); b.根据不同 的life值来显示,吧它放在坦克的上面...
  • chdyiboke
  • chdyiboke
  • 2016-08-29 22:04
  • 311

java项目之——坦克大战08

功能:然坦克向八个方向行走。(以前只有四个方向)。 内容:添加代表方向的量(枚举)             添加记录按键状态的布尔量     &...
  • chdyiboke
  • chdyiboke
  • 2016-08-12 19:51
  • 325

java项目之——坦克大战05

功能:代码重构(设置常量,比较简单) 内容:需要多处改变的量定义为常量。 public static final int GAME_WIDTH =800; public static final ...
  • chdyiboke
  • chdyiboke
  • 2016-08-12 16:36
  • 146
    个人资料
    • 访问:63138次
    • 积分:1634
    • 等级:
    • 排名:千里之外
    • 原创:105篇
    • 转载:16篇
    • 译文:0篇
    • 评论:15条
    最新评论