返回顶部
首页 > 资讯 > 后端开发 > Python >JAVA实现经典游戏坦克大战的示例代码
  • 712
分享到

JAVA实现经典游戏坦克大战的示例代码

2024-04-02 19:04:59 712人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录前言主要设计功能截图代码实现总结前言 小时候大家都玩过坦克大战吧,熟悉的旋律和丰富的关卡陪伴了我们一整个寒暑假,还记得传说中的经典坦克大战 吗?那些怀旧的记忆,伴随着我们一起走过

前言

小时候大家都玩过坦克大战吧,熟悉的旋律和丰富的关卡陪伴了我们一整个寒暑假,还记得传说中的经典坦克大战 吗?那些怀旧的记忆,伴随着我们一起走过来的经典坦克大战,刚开始那战战兢兢,屡屡被敌人坦克击毁的情景历历在目。现在好了,再也不用担心敌人坦克了,可 以横冲直撞,横扫敌人坦克了。快哉!!!

《坦克大战》游戏以坦克战斗为主题,用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想。

主要需求

可以生成不同的地图,消灭地图上的所有坦克为胜利;可以设置关卡地图,不断增加难度。

主要设计

1、要有难度关卡:第一关,第二关,第三关,第四关,第五关;第一关地图最简单,第五关地图最难;

2、坦克要有血条,打多次才会死

3、地图要我有我方坦克四辆(相当于4条命)和多辆敌方坦克

4、我方坦克的炮弹数量是固定的,设置为500

5、地图右边显示基本信息

6、地图上要在砖块,铁块,河流

功能截图

游戏开始页面

代码实现

窗口布局

public class GameFrame extends JFrame {

    
    private static final long serialVersionUID = -1176914786963603304L;


    public GameFrame() {
        super();


        this.setSize(800, 700);
        this.setTitle("坦克大战");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setResizable(false);
        this.setIconImage(TankGameImages.myTankImg[0]);

        // 显示器屏幕大小
        Dimension screenSizeInfo = Toolkit.getDefaultToolkit().getScreenSize();
        int leftTopX = ((int) screenSizeInfo.getWidth() - this.getWidth()) / 2;
        int leftTopY = ((int) screenSizeInfo.getHeight() - this.getHeight()) / 2;

        // 设置显示的位置在屏幕中间
        this.setLocation(leftTopX, leftTopY);
    }

}

地图渲染核心算法


@Service
public class PaintService {
    @Autowired
    private GameContext context;
    private Brick rightBrick = new Brick(700, 50);
    private Iron rightIron = new Iron(700, 50);
    private Water rightWater = new Water(700, 50);

    
    public void drawStuff(Graphics g, Stuff stuff, JPanel panel) {
        switch (stuff.getType()) {
            //枚举的switch,有意思,不需要+StuffTypeEnum.TANK
            case TANK:
                Tank tank = (Tank) stuff;
                switch (stuff.getDirect()) { // 判断所朝的方向
                    case NORTH:
                        this.drawNorth(g, tank, panel);
                        break;
                    case SOUTH:
                        this.drawSouth(g, tank, panel);
                        break;
                    case WEST:
                        this.drawWest(g, tank, panel);
                        break;
                    case EAST:
                        this.drawEast(g, tank, panel);
                        break;
                }
                break;
            case BRICK:

//                g.setColor(new Color(216, 90, 49));
//                g.fill3DRect(stuff.getX() - 20, stuff.getY() - 20, 40, 40, false);

                g.drawImage(TankGameImages.stuffImg[StuffTypeEnum.BRICK.geTKEy()],
                        stuff.getX() - 10, stuff.getY() - 10, 20, 20, panel);
                break;
            case IRON:

//                g.setColor(new Color(225, 225, 225));
//                g.fill3DRect(stuff.getX() - 20,
//                        stuff.getY() - 20, 40, 40, false);

                g.drawImage(TankGameImages.stuffImg[StuffTypeEnum.IRON.getKey()], stuff.getX() - 10,
                        stuff.getY() - 10, 20, 20, panel);
                break;
            case WATER:

//                g.setColor(new Color(65, 64, 253));
//                g.fillRect(stuff.getX() - 20,
//                        stuff.getY() - 20, 40, 40);

                g.drawImage(TankGameImages.stuffImg[StuffTypeEnum.WATER.getKey()],
                        stuff.getX() - 10, stuff.getY() - 10, 20, 20, panel);
                break;
        }

    }

    
    public void drawBomb(Graphics g, Vector<Bomb> bombs, JPanel panel) {
        for (int i = 0; i < bombs.size(); i++) {
            int l = bombs.get(i).getL();
            Bomb b = bombs.get(i); // 从炸弹容器中取出一颗炸弹
            if (b.getLifeTime() > 24) { // 生命值21-25
                g.drawImage(TankGameImages.bomb[0], b.getX() - l / 2, b.getY()
                        - l / 2, l, l, panel);
            } else if (b.getLifeTime() > 18) { // 生命值16-20
                g.drawImage(TankGameImages.bomb[1], b.getX() - l / 2, b.getY()
                        - l / 2, l, l, panel);
            } else if (b.getLifeTime() > 12) { // 生命值11-15
                g.drawImage(TankGameImages.bomb[2], b.getX() - l / 2, b.getY()
                        - l / 2, l, l, panel);
            } else if (b.getLifeTime() > 6) { // 生命值6-10
                g.drawImage(TankGameImages.bomb[3], b.getX() - l / 2, b.getY()
                        - l / 2, l, l, panel);
            } else { // 生命值低于6
                g.drawImage(TankGameImages.bomb[4], b.getX() - l / 2, b.getY()
                        - l / 2, l, l, panel);
            }
            b.lifeDown(); // 生命随时间衰减
            if (b.getLifeTime() == 0) { // 该炸弹死亡
                b.setLive(false);
            }
        }
    }

    
    public void drawEnemyTank(Graphics g, Vector<EnemyTank> enemies, JPanel panel) {
        for (int i = 0; i < enemies.size(); i++) {
            this.drawStuff(g, enemies.get(i), panel); // 画出敌人的坦克
            for (int j = 0; j < enemies.get(i).getBullets().size(); j++) {
                if (enemies.get(i).getBullets().get(j) != null) {
                    Bullet eb = enemies.get(i).getBullets().get(j);
                    g.drawImage(TankGameImages.bullet, eb.getX() - 2,
                            eb.getY() - 2, 4, 4, panel);
                }
            }
        }
    }

    
    public void drawMyTank(Graphics g, Vector<MyTank> myTanks, JPanel panel) {
        for (int m = 0; m < myTanks.size(); m++) {
            MyTank myTank = myTanks.get(m); // 取出我的坦克
            this.drawStuff(g, myTank, panel); // 画出我的坦克
            for (int i = 0; i < myTank.getBullets().size(); i++) {
                if (myTank.getBullets().get(i) != null) {
                    Bullet b = myTank.getBullets().get(i);
                    g.drawImage(TankGameImages.bullet, b.getX() - 2,
                            b.getY() - 2, 4, 4, panel);
                }
            }
        }
    }

    
    public void drawMap(Graphics g, Map map, JPanel panel) {
        Vector<Brick> bricks = map.getBricks();
        Vector<Iron> irons = map.getIrons();
        Vector<Water> waters = map.getWaters();
        for (int i = 0; i < bricks.size(); i++) {
            this.drawStuff(g, bricks.get(i), panel);
        }
        for (int i = 0; i < irons.size(); i++) {
            this.drawStuff(g, irons.get(i), panel);
        }
        for (int i = 0; i < waters.size(); i++) {
            this.drawStuff(g, waters.get(i), panel);
        }
    }

    
    public void drawNorth(Graphics g, Tank tank, JPanel panel) {

//        int x = tank.getX();
//        int y = tank.getY(); //0.设置画笔颜色
//        g.setColor(Color.white);
//        //1.画出左边的矩形
//        g.fill3DRect(x - 20, y - 20, 10,
//                40, false);
//        g.fill3DRect(x + 10, y - 20, 10, 40, false);//2.画出右边矩形
//        //3.更换画笔颜色
//        g.setColor(tank.getColor()); //4.画出轮子条纹
//        for (int
//             i = 0;
//             i < 20 - 1;
//             i++) {
//            g.drawLine(x - 20, y - 20 + (i + 1) * 2, x - 10 - 1, y - 20 + (i + 1) * 2);
//            g.drawLine(x + 10, y - 20 + (i + 1) * 2, x + 20 - 1, y - 20 + (i + 1) * 2);
//        } //5.画出中间1矩形
//        g.fill3DRect(x - 15, y - 14, 30, 28, false); //6.更换画笔颜色
//        g.setColor(Color.white); //7.画出中间2矩形
//        g.draw3DRect(x - 10, y - 9, 20,
//                18, false); //8.画出中间3矩形
//        g.draw3DRect(x - 3, y - 5, 6, 10, false); //9.画直线
//        g.drawLine(x - 15, y - 14, x - 10, y - 9);
//        g.drawLine(x + 15, y - 14, x + 10, y - 9);
//        g.drawLine(x - 15, y + 14, x - 10, y + 9);
//        g.drawLine(x + 15, y + 14, x + 10, y + 9);
//        g.setColor(tank.getColor()); //10.画矩形
//        g.fill3DRect(x - 3, y - 12, 6, 3,
//                false);
//        g.fill3DRect(x - 2, y - 20, 4, 2, false);
//        g.fill3DRect(x - 1, y - 20,
//                2, 11, false);

        Image image;
        if (tank.getTankType() == TankTypeEnum.MY) {
            g.setColor(Color.green);
            image = TankGameImages.myTankImg[DirectionEnum.NORTH.getKey()];// 初始化图片
        } else {
            image = TankGameImages.enemyTankImg[DirectionEnum.NORTH.getKey()];
            g.setColor(Color.gray);
        }
        g.drawImage(image, tank.getX() - 20, tank.getY() - 20, 40, 40, panel);
        g.fillRect(tank.getX() - 20, tank.getY() - 30, tank.getBlood() * 4, 5);
    }

    
    public void drawSouth(Graphics g, Tank tank, JPanel panel) {

//        int x = tank.getX();
//        int y = tank.getY();
//        g.setColor(Color.white);
//        g.fill3DRect(x - 20, y - 20, 10, 40, false);
//        g.fill3DRect(x + 10, y - 20, 10,
//                40, false);
//        g.setColor(tank.getColor());
//        for (int i = 0; i < 20 - 1; i++) {
//            g.drawLine(x - 20, y - 20 + (i + 1) * 2, x - 10 - 1, y - 20 + (i + 1) * 2);
//            g.drawLine(x + 10,
//                    y - 20 + (i + 1) * 2, x + 20 - 1, y - 20 + (i + 1) * 2);
//        }
//        g.fill3DRect(x - 15, y - 14, 30,
//                28, false);
//        g.setColor(Color.white);
//        g.draw3DRect(x - 10, y - 9, 20,
//                18, false);
//        g.draw3DRect(x - 3, y - 5, 6, 10, false);
//        g.drawLine(x - 15,
//                y - 14, x - 10, y - 9);
//        g.drawLine(x + 15, y - 14, x + 10, y - 9);
//        g.drawLine(x - 15,
//                y + 14, x - 10, y + 9);
//        g.drawLine(x + 15, y + 14, x + 10, y + 9);
//        g.setColor(tank.getColor());
//        g.fill3DRect(x - 3, y + 9, 6, 3, false);
//        g.fill3DRect(x - 1, y + 9, 2, 11, false);
//        g.fill3DRect(x - 2, y + 18, 4, 2,
//                false);

        Image image;
        if (tank.getTankType() == TankTypeEnum.MY) {
            g.setColor(Color.green);
            image = TankGameImages.myTankImg[DirectionEnum.SOUTH.getKey()];// 初始化图片
        } else {
            image = TankGameImages.enemyTankImg[DirectionEnum.SOUTH.getKey()];
            g.setColor(Color.gray);
        }
        g.drawImage(image, tank.getX() - 20, tank.getY() - 20, 40, 40, panel);
        g.fillRect(tank.getX() - 20, tank.getY() - 30, tank.getBlood() * 4, 5);
    }

    
    public void drawWest(Graphics g, Tank tank, JPanel panel) {

//        int x = tank.getX();
//        int y = tank.getY();
//        g.setColor(Color.white);
//        g.fill3DRect(x - 20, y - 20, 40, 10, false);
//        g.fill3DRect(x - 20, y + 10, 40,
//                10, false);
//        g.setColor(tank.getColor());
//        for (int i = 0; i < 20 - 1; i++) {
//            g.drawLine(x - 20 + (i + 1) * 2, y - 20, x - 20 + (i + 1) * 2, y - 10 - 1);
//            g.drawLine(x - 20 + (i + 1) * 2, y - 20 + 30, x - 20 + (i + 1) * 2, y - 10 - 1 + 30);
//        }
//        g.fill3DRect(x - 14, y - 15, 28, 30, false);
//        g.setColor(Color.white);
//        g.draw3DRect(x - 9, y - 10, 18, 20, false);
//        g.draw3DRect(x - 5, y - 3, 10,
//                6, false);
//        g.drawLine(x - 15, y - 14, x - 10, y - 9);
//        g.drawLine(x + 15, y - 14,
//                x + 10, y - 9);
//        g.drawLine(x - 15, y + 14, x - 10, y + 9);
//        g.drawLine(x + 15, y + 14,
//                x + 10, y + 9);
//        g.setColor(tank.getColor());
//        g.fill3DRect(x - 12, y - 3, 3,
//                6, false);
//        g.fill3DRect(x - 20, y - 1, 11, 2, false);
//        g.fill3DRect(x - 20,
//                y - 2, 2, 4, false);

        Image image;
        if (tank.getTankType() == TankTypeEnum.MY) {
            image = TankGameImages.myTankImg[DirectionEnum.WEST.getKey()];// 初始化图片
            g.setColor(Color.green);
        } else {
            image = TankGameImages.enemyTankImg[DirectionEnum.WEST.getKey()];
            g.setColor(Color.gray);
        }
        g.drawImage(image, tank.getX() - 20, tank.getY() - 20, 40, 40, panel);
        g.fillRect(tank.getX() - 20, tank.getY() - 30, tank.getBlood() * 4, 5);
    }

    
    public void drawEast(Graphics g, Tank tank, JPanel panel) {

//        int x = tank.getX();
//        int y = tank.getY();
//        g.setColor(Color.white);
//        g.fill3DRect(x - 20, y - 20, 40, 10, false);
//        g.fill3DRect(x - 20, y + 10, 40,
//                10, false);
//        g.setColor(tank.getColor());
//        for (int i = 0; i < 20 - 1; i++) {
//            g.drawLine(x - 20 + (i + 1) * 2, y - 20, x - 20 + (i + 1) * 2, y - 10 - 1);
//            g.drawLine(x - 20 + (i + 1) * 2, y - 20 + 30, x - 20 + (i + 1) * 2, y - 10 - 1 + 30);
//        }
//        g.fill3DRect(x - 14, y - 15, 28, 30, false);
//        g.setColor(Color.white);
//        g.draw3DRect(x - 9, y - 10, 18, 20, false);
//        g.draw3DRect(x - 5, y - 3, 10,
//                6, false);
//        g.drawLine(x - 15, y - 14, x - 10, y - 9);
//        g.drawLine(x + 15, y - 14,
//                x + 10, y - 9);
//        g.drawLine(x - 15, y + 14, x - 10, y + 9);
//        g.drawLine(x + 15, y + 14,
//                x + 10, y + 9);
//        g.setColor(tank.getColor());
//        g.fill3DRect(x + 9, y - 3, 3, 6,
//                false);
//        g.fill3DRect(x + 9, y - 1, 11, 2, false);
//        g.fill3DRect(x + 18, y - 2,
//                2, 4, false);

        Image image;
        if (tank.getTankType() == TankTypeEnum.MY) {
            image = TankGameImages.myTankImg[DirectionEnum.EAST.getKey()];// 初始化图片
            g.setColor(Color.green);
        } else {
            image = TankGameImages.enemyTankImg[DirectionEnum.EAST.getKey()];
            g.setColor(Color.gray);
        }
        g.drawImage(image, tank.getX() - 20, tank.getY() - 20, 40, 40, panel);
        g.fillRect(tank.getX() - 20, tank.getY() - 30, tank.getBlood() * 4, 5);
    }

    
    public void drawRight(Graphics g, GamePanel tgp, RealTimeGameData data) {
        if (data.getMapMakingFlag().equals(Boolean.TRUE)) {
            g.drawString("当前选中画笔(可按C键切换)", 620, 20);
            if (data.getCurrentStuff() == StuffTypeEnum.IRON) {
                drawStuff(g, rightIron, tgp);
            } else if (data.getCurrentStuff() == StuffTypeEnum.BRICK) {
                drawStuff(g, rightBrick, tgp);
            } else if (data.getCurrentStuff() == StuffTypeEnum.WATER) {
                drawStuff(g, rightWater, tgp);
            } else {
                g.drawString("橡皮擦", 680, 50);
            }

        } else {
            for (int i = 0; i < data.getEnemyTankNum(); i++) {
                if (i >= 4) {
                    g.drawImage(TankGameImages.enemyTankImg[DirectionEnum.NORTH.getKey()],
                            402 + 50 * i, 100, 40, 40, tgp);
                } else {
                    g.drawImage(TankGameImages.enemyTankImg[DirectionEnum.NORTH.getKey()],
                            602 + 50 * i, 20, 40, 40, tgp);
                }
            }
            for (int j = 0; j < data.getMyTankNum(); j++) {
                g.drawImage(TankGameImages.myTankImg[DirectionEnum.NORTH.getKey()], 602 + 50 * j,
                        400, 40, 40, tgp);
            }
            g.drawString("我的坦克子弹数目:" + data.getMyBulletNum(), 620, 500);
        }

    }


    public void rePaintPanel(GamePanel panel, Graphics g) {

        RealTimeGameData data = context.getGameData();
        if (data.isStart()) {
            g.setColor(Color.black);
            g.fillRect(0, 0, GameConstants.GAME_PANEL_WIDTH, GameConstants.GAME_PANEL_HEIGHT);
            g.fillRect(280, 600, 40, 40);
            this.drawMap(g, data.getMap(), panel);
            this.drawMyTank(g, data.getMyTanks(), panel); // 画出我的坦克(包括子弹)
            this.drawEnemyTank(g, data.getEnemies(), panel); // 画出敌人坦克(包括子弹)
            this.drawBomb(g, data.getBombs(), panel); // 画出爆炸
            this.drawRight(g, panel, data);

            if (data.getMyTankNum() == 0) { // 如果我的坦克数量为0
                g.drawImage(TankGameImages.gameOver, 250, data.getDy(), 100,
                        100, panel);
            }

            if (data.getEnemyTankNum() == 0) { // 如果敌人坦克的数量为0
                g.drawImage(TankGameImages.gameWin, 250, data.getDy(), 100,
                        100, panel);
            }
            if (data.getDy() == 250) {
                g.fillRect(0, 0, 800, 600);
                g.setColor(Color.BLUE);
                if (data.getMyTankNum() == 0) {
                    g.drawString("失败了!!!", 300, 220);
                } else {
                    g.drawString("挑战成功,请稍等...", 300, 220);
                }
                g.drawString(
                        ("敌人坦克死亡数量:" + (8 - data.getEnemyTankNum())),
                        300, 260);
                g.drawString("我的坦克死亡总数量:" + data.getBeKilled(), 300,
                        280);
                g.drawString(
                        "我的炮弹消耗总数量:"
                                + (GameConstants.MY_TANK_INIT_BULLET_NUM - data
                                .getMyBulletNum()), 300, 300);
                g.drawString("敌人坦克剩余数量:" + data.getEnemyTankNum(), 300,
                        320);
                g.drawString("我的坦克剩余总数量:" + data.getMyTankNum(), 300,
                        340);
                g.drawString("我的炮弹剩余总数量:" + data.getMyBulletNum(), 300,
                        360);
            }
        } else {
            g.drawImage(TankGameImages.startImage, 0, 0, 800, 700, panel);
            //g.drawImage(TankGameImages.font, 0, data.getKy(), panel);
            if (data.isIconSmile()) {
                //g.drawImage(TankGameImages.yctSmile1, data.getKx(), 45,
                //        panel);
                data.setIconSmile(false);
            } else {
                //g.drawImage(TankGameImages.yctSmile2, data.getKx(), 45,
                //        panel);
                data.setIconSmile(true);
            }
        }
    }
}

坦克核心算法


@Service
public class TankEventService {

    
    public boolean isTankOverlap(Tank tank, Stuff stuff, int length) {
        boolean b = false;
        int x = stuff.getX();
        int y = stuff.getY();
        if (tank.getDirect() == DirectionEnum.NORTH) {
            tank.setY(tank.getY() - tank.getSpeed());
            if (Math.abs(tank.getY() - y) < length
                    && Math.abs(tank.getX() - x) < length) {
                b = true;
                tank.setY(tank.getY() + tank.getSpeed());
            } else {
                tank.setY(tank.getY() + tank.getSpeed());
            }
        }
        if (tank.getDirect() == DirectionEnum.SOUTH) {
            tank.setY(tank.getY() + tank.getSpeed());
            if (Math.abs(tank.getY() - y) < length
                    && Math.abs(tank.getX() - x) < length) {
                b = true;
            }
            tank.setY(tank.getY() - tank.getSpeed());
        }
        if (tank.getDirect() == DirectionEnum.EAST) {
            tank.setX(tank.getX() + tank.getSpeed());
            if (Math.abs(tank.getY() - y) < length
                    && Math.abs(tank.getX() - x) < length) {
                b = true;
            }
            tank.setX(tank.getX() - tank.getSpeed());
        }
        if (tank.getDirect() == DirectionEnum.WEST) {
            tank.setX(tank.getX() - tank.getSpeed());
            if (Math.abs(tank.getY() - y) < length
                    && Math.abs(tank.getX() - x) < length) {
                b = true;
            }
            tank.setX(tank.getX() + tank.getSpeed());
        }
        return b;
    }

    
    public boolean isMyTankOverlap(MyTank tank, Vector<EnemyTank> enemies) {
        for (int i = 0; i < enemies.size(); i++) {
            if (isTankOverlap(tank, enemies.get(i), 40))
                return true;
        }
        return false;
    }

    
    public boolean isEnemyTankOverlap(EnemyTank enemy, Vector<EnemyTank> enemies, Vector<MyTank> myTanks) {
        for (int i = 0; i < enemies.size(); i++) {
            if (enemy != enemies.get(i)) {
                if (isTankOverlap(enemy, enemies.get(i), 40)) {
                    enemy.setOverlapNo(true);
                    return true;
                }
            }
        }
        for (int j = 0; j < myTanks.size(); j++) {
            if (isTankOverlap(enemy, myTanks.get(j), 40)) {
                enemy.setOverlapYes(true);
                return true;
            }
        }

        enemy.setOverlapNo(false);
        enemy.setOverlapYes(false);
        return false;
    }

    
    public void enemyGoWest(EnemyTank enemy) {
        for (; ; ) {
            GameTimeUnit.sleepMillis(36);
            if (!enemy.isOverlapNo()&& !enemy.isOverlapYes()) {
                enemy.goWest();
            }
            if (enemy.getMyTankLocation() != DirectionEnum.WEST) {
                enemy.setDirect(enemy.getMyTankDirect());
                break;
            }
        }
    }

    
    public void enemyGoEast(EnemyTank enemy) {
        for (; ; ) {
            GameTimeUnit.sleepMillis(36);
            if (!enemy.isOverlapNo() && !enemy.isOverlapYes()) {
                enemy.goEast();
            }
            if (enemy.getMyTankLocation() != DirectionEnum.EAST) {
                enemy.setDirect(enemy.getMyTankDirect());
                break;
            }
        }
    }

    
    public void enemyGoNorth(EnemyTank enemy) {
        for (; ; ) {
            GameTimeUnit.sleepMillis(36);
            if (!enemy.isOverlapNo() && !enemy.isOverlapYes()) {
                enemy.goNorth();
            }
            if (enemy.getMyTankLocation() != DirectionEnum.NORTH) {
                enemy.setDirect(enemy.getMyTankDirect());
                break;
            }
        }
    }

    
    public void enemyGoSouth(EnemyTank enemy) {
        for (; ; ) {
            GameTimeUnit.sleepMillis(36);
            if (!enemy.isOverlapNo() && !enemy.isOverlapYes()) {
                enemy.goSouth();
            }
            if (enemy.getMyTankLocation() != DirectionEnum.SOUTH) {
                enemy.setDirect(enemy.getMyTankDirect());
                break;
            }
        }
    }

    
    public DirectionEnum enemyGetRandomDirect(DirectionEnum direct1, DirectionEnum direct2, DirectionEnum direct3) {
        int random = (int) (Math.random() * 3);

        DirectionEnum returnDirect = DirectionEnum.INVALID;
        switch (random) {
            case 0:
                returnDirect = direct1;
                break;
            case 1:
                returnDirect = direct2;
                break;
            case 2:
                returnDirect = direct3;
                break;
        }
        return returnDirect;
    }

    
    public void enemyFindAndKill(EnemyTank enemy, MyTank myTank, Map map) {
        int myX = myTank.getX();
        int myY = myTank.getY();
        int enX = enemy.getX();
        int enY = enemy.getY();
        if (Math.abs(myX - enX) < 20 && myY <= 580) {
            if (enY < myY) {
                int s = 0;
                for (int t = 0; t < map.getIrons().size(); t++) {
                    Iron iron = map.getIrons().get(t);
                    if (Math.abs(enX - iron.getX()) <= 10 && iron.getY() > enY
                            && iron.getY() < myY) {
                        s = 1;
                        break;
                    }
                }
                if (s == 0) {
                    enemy.setShot(true);
                    enemy.setMyTankLocation(DirectionEnum.SOUTH);
                }
            } else {
                int s = 0;
                for (int t = 0; t < map.getIrons().size(); t++) {
                    Iron iron = map.getIrons().get(t);
                    if (Math.abs(enX - iron.getX()) <= 10 && iron.getY() < enY
                            && iron.getY() > myY) {
                        s = 1;
                        break;
                    }
                }
                if (s == 0) {
                    enemy.setShot(true);
                    enemy.setMyTankLocation(DirectionEnum.NORTH);
                }
            }
        } else if (Math.abs(myY - enY) < 20 && myY <= 580) {
            if (enX > myX) {
                int s = 0;
                for (int t = 0; t < map.getIrons().size(); t++) {
                    Iron iron = map.getIrons().get(t);
                    if (Math.abs(enY - iron.getY()) <= 10 && iron.getX() < enX
                            && iron.getX() > myX) {
                        s = 1;
                        break;
                    }
                }
                if (s == 0) {
                    enemy.setShot(true);
                    enemy.setMyTankLocation(DirectionEnum.WEST);
                }
            } else {
                int s = 0;
                for (int t = 0; t < map.getIrons().size(); t++) {
                    Iron iron = map.getIrons().get(t);
                    if (Math.abs(enY - iron.getY()) <= 10 && iron.getX() > enX
                            && iron.getX() < myX) {
                        s = 1;
                        break;
                    }
                }
                if (s == 0) {
                    enemy.setShot(true);
                    enemy.setMyTankLocation(DirectionEnum.EAST);
                }
            }
        } else {
            enemy.setShot(false);
            enemy.setMyTankLocation(DirectionEnum.INVALID);
        }
    }
}

总结

通过此次的《坦克大战》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。

以上就是JAVA实现经典游戏坦克大战的示例代码的详细内容,更多关于JAVA坦克大战的资料请关注编程网其它相关文章!

--结束END--

本文标题: JAVA实现经典游戏坦克大战的示例代码

本文链接: https://lsjlt.com/news/137962.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JAVA实现经典游戏坦克大战的示例代码
    目录前言主要设计功能截图代码实现总结前言 小时候大家都玩过坦克大战吧,熟悉的旋律和丰富的关卡陪伴了我们一整个寒暑假,还记得传说中的经典坦克大战 吗?那些怀旧的记忆,伴随着我们一起走过...
    99+
    2024-04-02
  • 怎么用JAVA实现经典游戏坦克大战
    这篇文章主要介绍“怎么用JAVA实现经典游戏坦克大战”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用JAVA实现经典游戏坦克大战”文章能帮助大家解决问题。主要设计要有难度关卡:第一关,第二关,第...
    99+
    2023-06-29
  • Java Swing实现坦克大战游戏
    目录一、引言二、效果图三、实现四、完成一、引言 90坦克大战,很经典的一款游戏,当年与小伙伴一人一个手柄,搬上小板凳坐在电视机前,身体时不时跟随手柄摇晃着,时而表情严肃、眉头紧锁,时...
    99+
    2024-04-02
  • Java实现经典游戏飞机大战-I的示例代码
    目录前言主要设计功能截图代码实现启动类核心类核心算法总结前言 《飞机大战-I》是一款融合了街机、竞技等多种元素的经典射击手游。华丽精致的游戏画面,超炫带感的技能特效,超火爆画面让你肾...
    99+
    2024-04-02
  • Java实现坦克大战小游戏代码如何编写
    Java实现坦克大战小游戏代码如何编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。小游戏介绍:红色坦克是我们的操纵坦克,黑色是敌人坦克。上下左右键控制坦克移动...
    99+
    2023-06-26
  • HTML5如何实现经典坦克大战
    这篇文章主要为大家展示了“HTML5如何实现经典坦克大战”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML5如何实现经典坦克大战”这篇文章吧。 ...
    99+
    2024-04-02
  • HTML5怎么实现经典坦克大战
    这篇文章主要介绍“HTML5怎么实现经典坦克大战”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“HTML5怎么实现经典坦克大战”文章能帮助大家解决问题。 代码如下:...
    99+
    2024-04-02
  • Java编写实现坦克大战小游戏
    本文实例为大家分享了Java实现坦克大战小游戏的具体代码,供大家参考,具体内容如下 创作背景:n年前的学期末课题设计,从b站上学的,一个代码一个代码敲出来的。 小游戏介绍: 红色坦克...
    99+
    2024-04-02
  • Pygame坦克大战游戏开发实战详解代码
    导语 哈喽!哈喽——我是木木子 今天来升级下之前写的坦克大战游戏嘛,哈哈哈 其实也不算是修改,就是稍微的调试一下!​​ 因为之前写的界面都是英文的 ,有的...
    99+
    2024-04-02
  • Java实现经典游戏2048的示例代码
    目录前言主要设计功能截图代码实现界面布局类业务逻辑类总结前言 2014年Gabriele Cirulli利用周末的时间写2048这个游戏的程序,仅仅只是好玩而已。他想用一种不同的视觉...
    99+
    2024-04-02
  • Java实现经典游戏FlappyBird的示例代码
    目录前言主要设计功能截图代码实现游戏启动类核心类工具类总结前言 《布谷鸟闯关-简单版》是一个基于java的布谷鸟闯关游戏,摁上键控制鸟的位置穿过管道间的缝隙,需要做碰撞检测,监听键盘...
    99+
    2024-04-02
  • Vue3+Canvas实现坦克大战游戏(一)
    目录前言架构搭建Canvas 构造函数画布绘制文本渲染画布重绘前的 clear核心:绘制函数BattleCity 构造函数实现坦克的移动坦克发射子弹的逻辑总结前言 记得几年前刚做前端...
    99+
    2024-04-02
  • Vue3+Canvas实现坦克大战游戏(二)
    目录前言敌方坦克的生成坦克移动的算法子弹击中物体的算法爆炸效果的实现生成障碍物(石墙、砖墙等)总结前言 接着上篇讲,本篇主要给大家讲解一下子弹击中物体、物体销毁、敌方坦克构建生成、运...
    99+
    2024-04-02
  • 如何实现Pygame坦克大战游戏
    这篇文章将为大家详细讲解有关如何实现Pygame坦克大战游戏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。正文1)游戏规则:游戏过程是这样的,玩家操作坦克消灭电脑控制的坦克,并保护自己基地。基地图标是一只...
    99+
    2023-06-29
  • Java实现经典游戏打砖块游戏的示例代码
    目录前言主要设计功能截图代码实现游戏核心类小球类砖块类总结前言 《JAVA打砖块》游戏是自制的游戏。玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的&l...
    99+
    2024-04-02
  • JAVA实现经典扫雷游戏的示例代码
    目录前言主要设计功能截图代码实现总结前言 windows自带的游戏《扫雷》是陪伴了无数人的经典游戏,本程序参考《扫雷》的规则进行了简化,用java语言实现,采用了swing技术进行了...
    99+
    2024-04-02
  • python实现双人版坦克大战游戏
    游戏介绍: 双人版的《坦克大战》的基本规则是玩家消灭出现的敌方坦克保卫我方基地。 中间还会随机出现很多特殊道具吸收可获得相应的功能,消灭玩即可进入下一关。 方向键:上下左右移动即可。...
    99+
    2024-04-02
  • JavaSwing坦克大战游戏的设计和实现
    目录需求分析:功能设计:具体设计:图形用户界面界面中的元素游戏截图:        还记得传说中的经典90坦克...
    99+
    2024-04-02
  • Java实现经典游戏推箱子的示例代码
    目录前言主要设计功能截图代码实现核心类声音播放类总结前言 《推箱子》推箱子是一个古老的游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出...
    99+
    2024-04-02
  • Java实现经典游戏泡泡堂的示例代码
    目录前言主要设计功能截图代码实现游戏启动类核心监听类核心线程类总结前言 《泡泡堂I》是一个基于java的自制游戏,游戏设计为双人pk积分赛模式,在这个模式里面,玩家只要率先达到一定分...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作