java项目之——坦克大战19

标签: java 项目
477人阅读 评论(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类

查看评论

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

V1.0:
  • u011648768
  • u011648768
  • 2013年09月20日 12:21
  • 2547

JAVA练手项目(三):坦克大战游戏源代码

     经过几天的练习和研究终于自己能写出坦克大战游戏了,写完这个程序后感觉收获了很多东西,对JAVA的知识又有了一定的增长,接下来还准备继续写几个小项目来练习J2SE     由于代码太长就不发在...
  • java_cxrs
  • java_cxrs
  • 2009年02月03日 18:34
  • 4075

java项目之——坦克大战01

功能:产生一个窗口。 知识点:主类继承Frame类 import java.awt.Frame; public class TankClient extends Frame { publ...
  • chdyiboke
  • chdyiboke
  • 2016年08月08日 20:01
  • 328

java项目之——坦克大战16

版本:一颗子弹击中敌方坦克——面向对象思维分析            是否打中:hatTank方法;(游戏中碰撞检测,有些复杂,一般直接调用库方法)在这里我们应用碰撞类:getRect(返回值Rec...
  • chdyiboke
  • chdyiboke
  • 2016年08月28日 10:19
  • 336

java项目之——坦克大战06

功能:让坦克运动由我们来控制 内容:添加键盘监听类keyMonitor。            TankClient添加键盘监听器。             针对不同的键改变坦克的位置,与重画线...
  • chdyiboke
  • chdyiboke
  • 2016年08月12日 17:43
  • 247

java项目之——坦克大战13

上一版本设置了炮筒,使得坦克静止时也可以打出炮弹。但是还有 一个小问题,每次只能打出一发子弹,子弹会被覆盖。 本版本:使坦克可以打出多发子弹。...
  • chdyiboke
  • chdyiboke
  • 2016年08月22日 22:20
  • 252

java项目之——坦克大战23

本版本:主战坦克的生命值。 加入表示生命值的量:life 1.坦克类中:定义变量life private int life = 100;产生getlife和setlife方法 pub...
  • chdyiboke
  • chdyiboke
  • 2016年08月29日 21:32
  • 401

java项目之——坦克大战14

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

java项目之——坦克大战18

本版本:画出多辆坦克。 1.创建敌方坦克集合 List tanks = new ArrayList();2.循环画出,坦克对象t public void paint(Graphics g) { ...
  • chdyiboke
  • chdyiboke
  • 2016年08月28日 19:14
  • 557

java项目之——坦克大战22

本版本:超级炮弹,抬起一个键,八个方向发出子弹。 private void superFire() { Direction[] dirs = Direction.values(); //拿...
  • chdyiboke
  • chdyiboke
  • 2016年08月29日 20:50
  • 425
    个人资料
    持之以恒
    等级:
    访问量: 7万+
    积分: 2015
    排名: 2万+
    最新评论