美文网首页
JAVA实现坦克大战小游戏——玩家坦克子弹发射

JAVA实现坦克大战小游戏——玩家坦克子弹发射

作者: 让你变好的过程从来都不会很舒服 | 来源:发表于2021-08-19 17:37 被阅读0次

需求

当用户按下J键,用户坦克就发射一颗子弹

思路

1、当发射一颗子弹后,就相当于启动一个线程
2、Hero有子弹的对象,当按下J时、我么就启动一个发射行为(线程),让子弹不停的移动,形成一个射击的效果
3、我们的MyPanel需要不停的重绘 子弹,才能实现子弹移动的效果
4、当子弹移动到面板边界时、就应该销毁(把启动的线程销毁)

步骤

1、新建子弹实体类

package com.tank.tankgame2;

/**
 * 射击子弹实体
 */
public class Shot implements Runnable {
    int x; // 子弹x坐标
    int y; // 子弹y坐标
    int direct = 0; // 子弹的方向
    int speed = 2; // 子弹的速度
    boolean isLive = true; // 子弹是否还存活

    public Shot(int x, int y, int direct) {
        this.x = x;
        this.y = y;
        this.direct = direct;
    }

    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 根据方向来改变x,y坐标
            switch (direct){
                case 0: // 上
                    y-=speed;
                    break;
                case 1: // 右
                    x+=speed;
                    break;
                case 2: // 下
                    y+=speed;
                    break;
                case 3: // 左
                    x-=speed;
                    break;
            }
            System.out.println("子弹 x="+x + "y="+y);
            // 当子弹触发边界线程销毁
            if(!(x>=0 && x<=1000 && y>=0 && y<=750)){
                isLive=false;
                break;
            }
        }

    }
}

2、在自己的坦克对象中加入子弹

package com.tank.tankgame2;

/**
 * 自己的坦克
 */
public class Hero extends Tank {

    // 定义一个Shot对象,表示一个射击(线程)
    Shot shot = null;

    public Hero(int x, int y) {
        super(x, y);
    }
    // 射击
    public void shotEnemyTank(){
        // 创建Shot对象 , 根据当前的Hero对象的位置和方向来创建Shot
        switch (getDirect()){ // 得到Hero对象方向
            case 0:
                shot = new Shot(getX()+20,getY(),0);
                break;
            case 1:
                shot = new Shot(getX()+60,getY()+20,1);
                break;
            case 2:
                shot = new Shot(getX()+20,getY()+60,2);
                break;
            case 3:
                shot = new Shot(getX(),getY()+20,3);
                break;
        }
        // 启动shot线程
        new Thread(shot).start();
    }

}

3、在面板中增加监听(J键)

 // 如果用户按下的是J,就发射
        if(e.getKeyCode() == KeyEvent.VK_J){
            hero.shotEnemyTank();
        }

相关文章

网友评论

      本文标题:JAVA实现坦克大战小游戏——玩家坦克子弹发射

      本文链接:https://www.haomeiwen.com/subject/mxpebltx.html