• 【JAVA】飞机大战


    代码和图片放在这个地址了:
    https://gitee.com/r77683962/fighting/tree/master

    20231016:
    1、原来画面比较闪烁,使用双缓冲解决了;
    2、当前服务端和客户端可以分别操作不同友方飞机;
    3、日志打印自己定义了下格式;

    20231003:
    1、添加背景音乐;

    20231001:
    1、现在子弹打中飞机,飞机会挂(打敌人的飞机,或者友方的飞机被打中都会挂);
    2、把敌方飞机发子弹的频率调低了下,不然打不过;

    20230930:
    1、添加了随机添加敌机,这样敌机比较多了(友军发的红色子弹,敌方发射蓝色子弹);
    2、把刷新的速度调快了些;
    3、子弹的Vector有数量限制(30个);
    4、敌机数量也有限制(8个);

    运行效果:
    在这里插入图片描述

    20230929:
    1、当前友方飞机和敌方飞机支持自动发子弹;
    2、友方飞机1可以通过AWSD和F分别控制方向和发射子弹;友方飞机2可以通过上下左右和空格分别控制方向和发射子弹;
    3、未监测子弹飞出屏幕外;
    4、当前子弹只能竖直向上飞和向下飞;
    5、当前敌机只有两辆,不能自动生成;
    6、还有很多未开发的;

    最新的代码运行,可以有两架飞机,分别通过WASD(方向),F(发子弹);上下左右(控制方向),空格(发子弹)
    但是敌人的飞机还没有。

    代码写的比较匆忙,不太好。

    在这里插入图片描述

    这是晚上添加了友方飞机和敌方飞机发射子弹操作截图,但是未检测子弹飞出屏幕和飞机被敌方子弹打中后场景

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    
    class MyThread extends Thread
    {
        GameFrame gameFrame;
    
        public MyThread()
        {
            gameFrame = new GameFrame();
        }
    
        public void run()
        {
            System.out.println("run");
            Boolean runFlag = true;
            while (runFlag)
            {
                runFlag = gameFrame.Run();
                //System.out.println("runFlag: " + runFlag);
                try
                {
                    Thread.sleep(100);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
        }
    
        public static void main(String[] args) {
            MyThread gameFrame = new MyThread();
            gameFrame.start();
        }
    }
    
    public class GameFrame extends JFrame
    {
        private Boolean runFlag;
    
        private final Graphics graphics;
    
        private final Image planeImage;
    
        private final Image bulletImage;
        private final Image backgroundImage1;
        private final Image backgroundImage2;
    
        //plane x
        private int planeX;
    
        //plane y
        private int planeY;
    
        private int bulletX;
        private int bulletY;
    
        private boolean bulletFlag;
        private int backgroundY;
    
        //bullet move step
        private final int moveStep;
    
        private final int width;
        private final int height;
    
        public GameFrame()
        {
            setTitle("Fighting");
            setLayout(null);
            moveStep = 4;
            width = 629;
            height = 990;
            setSize(width, height);
            setLocationRelativeTo(null);
            setVisible(true);
            KeyCapture();
            backgroundY = 0;
            bulletFlag = false;
            planeY = height - 200;
            planeX = width / 2;
            runFlag = true;
            graphics = getContentPane().getGraphics();
            planeImage = Toolkit.getDefaultToolkit().getImage("D:\\Code\\JAVA\\class\\Fighting\\images\\bullet05.png");
            bulletImage = Toolkit.getDefaultToolkit().getImage("D:\\Code\\JAVA\\class\\Fighting\\images\\bullet_02.png");
            backgroundImage1 = Toolkit.getDefaultToolkit().getImage("D:\\Code\\JAVA\\class\\Fighting\\images\\mapback.png");
            backgroundImage2 = Toolkit.getDefaultToolkit().getImage("D:\\Code\\JAVA\\class\\Fighting\\images\\mapback.png");
        }
    
        public void KeyCapture()
        {
            this.addKeyListener(new KeyAdapter()
            {
                public void keyPressed(KeyEvent e)
                {
                    int keyCode = e.getKeyCode();
                    System.out.println("keyCode: " + keyCode);
                    switch (keyCode)
                    {
                        case KeyEvent.VK_UP:
                            planeY -= moveStep; break;
    
                        case KeyEvent.VK_DOWN:
                            planeY += moveStep; break;
    
                        case KeyEvent.VK_LEFT:
                            planeX -= moveStep; break;
    
                        case KeyEvent.VK_RIGHT:
                            planeX += moveStep; break;
    
                        case KeyEvent.VK_SPACE:
                            bulletX = planeX;
                            bulletY = planeY;
                            bulletFlag = true;
                            break;
    
                        case KeyEvent.VK_Q:
                            runFlag = false;
                            break;
    
                        default:
                            System.out.println("KeyCode error!");break;
                    }
                }
            });
        }
    
        public Boolean Run()
        {
            //System.out.println("x: " + planeX + " y:" + planeY);
    
            // background
            graphics.drawImage(backgroundImage2, 0, backgroundY, width, height, this);
            graphics.drawImage(backgroundImage1, 0, backgroundY - height, width, height, this);
    
            // plane
            graphics.drawImage(planeImage, planeX, planeY, null);
    
            //bullet
            if (bulletFlag)
            {
                graphics.drawImage(bulletImage, bulletX, bulletY, null);
                bulletY -= 2 * moveStep;
            }
    
            backgroundY += 2;
    
            return runFlag;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
  • 相关阅读:
    虚拟机(VMware )如何固定系统IP
    【C++基础】【集成编译环境04】Visual Station 2022 项目集成【2】 Opencv 的库的项目集成和遇到的坑
    目标检测——YOLOv7算法解读
    Matlab实现异构交通流
    基于Android的高校移动成绩查询系统的设计与实现
    飞书项目发布3个月,已签约理想汽车、安克创新等100余家公司
    Maven进阶实战
    信奥一本通 贪心算法 回顾
    deepin V23通过flathub安装steam畅玩游戏
    基于KPCA 和 STFT 非侵入式负荷监控(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/r77683962/article/details/133363763