java 坦克发射子弹_猿学-java实现坦克大战游戏--坦克发射子弹

一、任务需求

添加hero坦克子弹并且发射。

二、思路

1.创建子弹类

1.由于每颗子弹都是一个独立的线程,会不断变换子弹坐标,所以子弹类要实现Runnable接口。

2.子弹需要坐标x,y以及方向,所以构造函数有三个参数。

3.实现Runnable接口后,要覆盖run方法:

1.如果不让线程sleep,子弹飞出去很快,快到在屏幕如上瞬间消失。

2.所以增加一个sleep()

3.另外,子弹需要判断四个方向,增加switch语句

4.子弹跑出屏幕需要死亡,增加变量islive判断是否存活。否则无限制飞行,不断占用内存空间。

2.hero坦克类中加入shotEnemy()方法,表示发射子弹

1.新建子弹变量s

Shot s = null;

2.判断开火的方向,增加switch语句。

3.开火后,启动线程。

Thread t =newThread(s);

t.start();

3.完成子弹实现过程,接着要在屏幕中让子弹显示,即画出子弹

1.paintComponent方法里加入,画出子弹

判断子弹是否存活

hero.s!=null很重要,游戏刚开始没有发射子弹,hero.s=null,此时进入if去画子弹会出现异常。

if(hero.s!=null&&hero.s.isLive==true){

g.setColor(Color.red);

g.draw3DRect(hero.s.x, hero.s.y, 1, 1, false);

}

2.在KeyPressed监听器处添加,按下J键发射一颗子弹

if(e.getKeyCode()==KeyEvent.VK_J){

hero.shotEnemy();

}

4.MyPanel实现Runnable接口

1.由于子弹打出去后,需要不断让它显示,屏幕每隔一段时间需要repaint()

所以重载run()方法,让MyPanel每隔一段时间repaint()一次

publicvoidrun() {

while(true){

try{

Thread.sleep(100);//休息100ms,重画一次MyPanel

} catch(Exception e) {

e.printStackTrace();

}

repaint();

}

5.由于MyPanel实现了Runnable接口,所以让该线程跑起来

1.在MyTankGame方法中启动线程即可

p1 = newMyPanel();

Thread t = newThread(p1);

t.start();

三、代码如下

MyTankGame.java

vcD4NCjxwcmUgY2xh

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值