【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;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值