【JAVA】飞机大战

news2024/10/6 4:04:31

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

最新的代码运行,可以有两架飞机,分别通过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;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1048915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大型企业网如何部署NAT实现需求

1.企业中堕胎电脑如何共享上网? 2.NAT地址转换原理讲解; 3.企业机房如何用NAT让服务器更安全? - NAT - 网络地址转换 - 什么式网络地址 IP地址 -通信时候的设备标识 - 为什么要把IP地址做转换呢? -- 公网IP&#xff…

迷你无人车 Navigation 导航(5)— 基础框架学习

迷你无人车 Navigation 导航(5)— 基础框架学习 整个功能包整个功能包集合以move_base为核心,将里程计信息、传感器信息、定位信息、地图以及目标点输入给move_base,move_base经过规划后会输出速度指令 move_base包括三个关键部分…

如何像人类一样写HTML之第一个HTML、标签的关系与注释

文章目录 前言一、创建第一个HTML文档创建方式1创建方式2 二、标签的关系三、注释的使用总结 前言 在现代数字化社会中,网页是我们获取信息、与他人交流以及展示自己的重要工具之一。要了解如何创建网页,HTML(Hypertext Markup Language&…

给网站引入各大搜索引擎的关键字提示,白给的接口薅他羊毛

属于是导航网站必要的了 因为网站是个导航网站,有一个搜索框,用户搜索时需要像百度一样有个搜索提示关键词列表。 之前只是用百度,现在给增加了好几个,想换那个就换那个了,直接上图片 可以配置属于是想选哪个选哪个&…

树莓派4B使用Docker部署SpringBoot项目——(二)使用docker安装mysql

树莓派4B使用docker安装mysql 使用的树莓派4B为8GB版本,使用docker pull命令拉取MySQL镜像: docker pull --platformarm64 mysql/mysql-server等待拉取完成 使用docker images查看镜像 创建MySQL容器 docker run -di --namemysql -p 3306:3306 -e MY…

(vue3)create-vue 组合式API

优势: 更易维护:组合式api,更好的TS支持 之前是选项式api,现在是组合式,把同功能的api集合式管理 复用功能封装成一整个函数 更快的速度 更小的体积 更优的数据响应式:Proxy create-vue 新的脚手架工…

批量剪辑视频的秘密武器,添加SRT字幕并提升你的视频品质,高效剪辑的艺术

在如今的数字时代,视频内容的制作和分享变得越来越普遍。如果你是一个视频创作者,或者经常需要编辑和分享视频内容,那么我们为你带来了一款视频批量剪辑工具,让你轻松在固定位置添加字幕,打造专业级剪辑效果&#xff0…

五金零售批发商城小程序的作用是什么

五金产品在人们生活中不可或缺,无论需求高低,总归会购买,而每个城市的五金店也非常多,市场高应用度也促进了各个品牌商们增长,而在实际销售中,无论厂家还是门店商家都会面临一些痛点,如品牌宣传…

Spine Web Player教程

官方文档教程: Spine Web Player 报错: 1、Q:报Animation bounds are invalid XX错误? A:请校对cdn或者npm install的版本号是否与json资源内版本号一致。

SQL做流水号

SELECT REPLICATE(0, 3 - LEN(3)) 3 AS 流水号 SELECT REPLICATE(0, 5 - LEN(3)) 3 AS 流水号 SELECT REPLICATE(0, 8 - LEN(3)) 3 AS 流水号

公司新产品上线如何打出知名度?

任何一个新产品上线时都需要进行推广打出知名度,软文作为一种成本低效果留存时间长的营销方式能够让公司的新产品打出知名度,向潜在用户展示新产品的独特优势以及特性,下面就让媒介盒子告诉大家,新产品上线时,公司应该…

AIGC快速入门体验之虚拟对象

AIGC快速入门体验之虚拟对象 一、什么是AIGC二、AIGC应用场景2.1 代码生成2.2 图片生成2.3 对象生成 三、AIGC虚拟对象3.1 AIGC完全免费工具3.2 快速获取对象3.3 给对象取名3.4 为对象写首诗3.5 和对象聊聊天 一、什么是AIGC AIGC是生成式人工智能(Artificial Intel…

每日一题——寻找右区间(排序 + 二分查找)

寻找右区间(排序 二分查找) 题目链接 理解题目 题目给定一个具有n行2列的二维数组intervals,对于intervals的每一行元素i,就表示一个区间数组,intervals[i][0]即这个区间数组的起始位置start,intervals[i…

JTS:09Touches 接触

这里写目录标题 版本JTS Touches边接触角点接触内部接触线段交叉顶点接触 版本 org.locationtech.jts:jts-core:1.19.0 链接: github JTS Touches 边接触 public void test00() {Coordinate[] coordinates1 new Coordinate[] {new Coordinate(1, 1), new Coordinate(1, 4),…

Gronwall‘s inequality

本文的主要了解下Gronwall不等式的两种形式,此不等式常常用来证明函数有界。 See 知乎: https://zhuanlan.zhihu.com/p/339358108

Vue底层术语解析以及存在关系

Vue底层术语解析以及存在关系 虚拟 DOM渲染函数Vue2Vue3 diff 算法抽象语法树(Abstract Syntax Tree,AST)关系 虚拟 DOM 可能都听说过虚拟dom ,虚拟dom到底是Vue的啥,再此针对性讲解(针对Vue官网简单化理解…

新手十分钟也能完成的Unity小游戏打砖块

由Siki学院打砖块游戏启发完成一个非常非常简单,纯新手也能十分钟做出来的小游戏——打砖块。 一.搭建场景 首先我们先在一个空白的3D项目中创建一个Plane平面,将其放置于世界中央位置,长宽设置为2,并为其添加一个材质Material&am…

掌握Go的运行时:从编译到执行

目录 一、Go运行编译简介Go语言的目标和设计哲学运行时环境编译过程小结 二、执行环境操作系统与硬件层系统调用(Syscalls)虚拟内存 Go运行时(Runtime)Goroutine调度器内存管理和垃圾收集网络I/O代码示例:Go运行时调度…

SQL:增、删、改、查 基本语句 Navicat建库(用法 + 例子)

文章目录 新建数据库新建表 增、删、改、查select 查找insert 添加delete 删除update 修改where 扩展 < > < > ! <> 比较运算符and or 逻辑运算符between...and... 介于..和..之间in 包含like 模糊查询is null 为空的 查询扩展order by 排序limit start coun…

7.网络原理之TCP_IP(下)

文章目录 4.传输层重点协议4.1TCP协议4.1.1TCP协议段格式4.1.2TCP原理4.1.2.1确认应答机制 ACK&#xff08;安全机制&#xff09;4.1.2.2超时重传机制&#xff08;安全机制&#xff09;4.1.2.3连接管理机制&#xff08;安全机制&#xff09;4.1.2.4滑动窗口&#xff08;效率机制…