Java Swing手搓童年坦克大战游戏(III)

news2024/12/23 9:37:22

坦克大战豪华山寨版二期工程

计划:实现【道具功能】【分数统计、排行榜】【多种类型敌军坦克派遣】【自建地图】【游戏存档读档】【联网实现双人配合】等,修复一些严重的bug。由于功能比较多,目测会分多篇文章记录……

前言

  通过对原游戏的观察,携带道具的敌方坦克有一圈红线围绕,当玩家击中这个坦克,地图上就会出现一个道具,道具有6种:星星炸弹护盾(圈)钟表城堡坦克。每种道具有不同的功能,初步推测,道具出现的位置也是随机的。

在这里插入图片描述

  坦克周围的红线圈有一个绕坦克转圈的动画效果;一局游戏20辆坦克,有5个道具,平均每4辆一个道具,每4个坦克,第三辆将出现道具坦克。

6种道具

名称效果
星星增强火力和炮弹速度、移动速度
炸弹消灭地图上所有敌军坦克
护盾一段时间内无视敌军炮弹
钟表一段时间内敌军坦克停止移动、停止发射炮弹
城堡老家周围出现一圈钢铁保护,持续20秒
坦克增加一条生命

星星

  玩家获得此道具,坦克外观会发生变化,移动速度加快,坦克火力增强,随着获得星星道具的增多,这些变化都是渐进的,会逐步增加。三个星星封顶,再多吃也不会有更强的火力了。

炸弹

  炸弹道具,吃掉此道具后,地图上的敌军坦克全部被摧毁。

darkAI?.let { dai ->
    //消灭地图上的所有敌军坦克,然后播放一次爆炸音效
    var enemyDie = false
    for (enemy in dai.list) {
        if (!enemy.shells.isDestroyed) {
            die(enemy)
            boom(enemy)
            enemyDie = true
        }
    }
    if (enemyDie) {
        AC.soundManager?.play(AC.bang)
    }
}

护盾(圈)

  在玩家坦克刚出现的时候,或者玩家吃了护盾道具的时候,会有一定时间的无敌状态,刚出现在地图上大约有5秒。吃了护盾道具大约有1分钟或者30秒的无敌时间,这个还需要测试。实测结果,感觉30秒的时间过长,还是改为20秒比较合理一点。

  通过对Battle City游戏的观察,他的道具显示时间为30秒,暂时就定30s了。在这30秒的时间内,玩家坦克周围出现一个保护圈,当敌军坦克击中玩家坦克,这个保护圈就可以挡住敌军炮弹,保护玩家坦克免遭袭击。

if (prop is Shield) {
	player.invincible = true
	player.invincibleCounter = 60 * 30//30 seconds
}

  玩家无敌状态的逻辑处理

if (!enemy.shells.isDestroyed && !player.isDestroyed) {
    //敌军的炮弹击中了玩家坦克
    if (player.pickRect().intersects(enemy.shells.pickRect())) {
        //判断玩家是否处于无敌状态,如果是则玩家对炮弹免疫
        if (player.invincible) {
            die(enemy.shells)
        } else {//玩家处于普通状态
            AC.soundManagerPD?.play(AC.playerdie)
            die(player)
            die(enemy.shells)
            boom(player)
        }
    }
}

钟表

  一段时间内敌军坦克停止移动、停止发射炮弹。这个道具的效果在坦克出生位置如果出现多个坦克的情况会出现bug,后续会修复。目前先维持现状。

城堡

  老家周围出现一圈钢铁保护,持续20秒。

if (prop is Castle) {// 城堡道具类,用钢铁代替砖头保护老家20秒
    for (iron in ironArray) {
        for ((index1, gameObject) in list.withIndex()) {
            if (iron?.id == gameObject.id) {
                CP.tileArray[iron.row][iron.col] = iron
                CP.mapArray[iron.row][iron.col] = CP.TILE_IRON.toByte()
                list[index1] = iron
            }
        }
    }
    protectFps = protectTime * getFps()
}

坦克

  当玩家坦克吃掉一个坦克道具,将增加一条生命。lightAI.addLife(1)

目前存在的问题

[bug#22]钟表效果结束后,敌军坦克有异常,某些敌军被挤出窗口,卡在边缘动弹不得。
有时候还会造成arrayIndexOutOfBoundsException。后续修复。

[bug#23]多个敌军坦克排队前进向同一个方向发射炮弹,有bug,导致有些坦克无法发射炮弹,炮弹飞跃瓦片

[bug#24]多个坦克在出生位置产生重叠,这种情况在定时结束后,如何处理移动、被炮弹击中,比较理想呢。

效果

在这里插入图片描述

总结

  项目代码已经开源,可以访问github或gitee进行获取。

  链接中release和发行版有编译好的可执行jar包,也可以直接下载后,在命令行或终端中执行java -jar WarOfTank.jar,就可以愉快的玩起来了。当然前提是电脑中已经安装了java环境。理论上,Windows,Mac,Linux都能运行。Linux和Windows测试功能正常。

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

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

相关文章

C语言 函数概述

好 接下来 我们来讲函数 构建C程序的最佳方式 就是模块化程序设计 C语言中 最基本的程序模块被称为 函数 所以 这个知识点的重要性不言而喻 这里 我们讲个故事 诸葛亮六出祁山时 为了逼司马懿出战 派人送给力司马懿一件女人衣服 司马懿只是为使者 诸葛亮的饮食起居 使者感叹…

光电探测器性能指标测试

光电探测器的三个核心指标: 带宽,转换增益,噪声(信噪比,NEP,噪声密度) 测试环境:可调谐激光器(CW LASER),强度调制器(AM),信号发生器(AWG),可调衰…

stm32f103zet6_DAC_2_输出电压

实现效果 DAC输出的电压 同过电压表测量电压 1.DAC配置的步骤 初始化DAC时钟。配置DAC的GPIO端口。设置DAC的工作模式(例如,是否使用触发功能,是否启用DAC中断等)。启动DAC。 2常用的函数 函数 HAL_DAC_Start() - 开启指定…

5月6(信息差)

🌍一次预测多个token,Meta新模型推理加速3倍,编程任务提高17% https://hub.baai.ac.cn/view/36857 🎄 LeetCode 周赛超越 80% 人类选手,推理性能超 Llama3-70B。 ✨ 我国量子计算机实现“四算合一” 实现通算、…

CAPL如何实现TLS握手认证

CAPL有专门的章节介绍如何实现TLS握手认证的函数: CAPL调用哪些函数实现TLS握手认证,需要了解TLS在整个通信过程的哪个阶段。 首先TCP需要建立连接,这是TLS握手的前提。当TLS握手认证完成后,可以传输数据。 所以TLS握手开始前需要确保TCP建立连接,TCP传输数据前需要确保…

5.6代码

1.最大公约数 这个题最重要的是要找到一个区间是1&#xff0c;找到之后就可以直接加次数就可以了 #include <bits/stdc.h>using namespace std;main() {long long n,i,j,a0,b,ans99999;cin>>n;long long s[n],dp[n][n];for(i0;i<n;i){cin>>s[i];if(s[i]1…

五一 作业

#include <iostream>using namespace std; class Num { private:int a; public:Num() {}Num(int a):a(a){}//设置a的值void set(int a){this->aa;}//1-a的和void Sum(){if(a<1){cout<<"a<1"<<endl;return;}int sum0;for(int i1;i<a;i)…

荧光纳米纤维膜的优点

荧光纳米纤维膜是一种具有荧光特性的纳米纤维材料&#xff0c;它结合了纳米纤维的良好性能和荧光物质的发光特性&#xff0c;在多个领域具有潜在的应用价值。 荧光纳米纤维膜可以通过不同的制备方法得到&#xff0c;其中一种常见的方法是利用荧光物质对纳米纤维进行修饰或掺杂。…

如何从Windows 10电脑远程登录Ubuntu系统

要从Windows 10电脑远程登录Ubuntu系统&#xff0c;您可以使用以下步骤&#xff1a; 在Ubuntu上安装xRDP: 首先&#xff0c;在Ubuntu电脑上打开终端&#xff0c;然后输入以下命令来安装xRDP服务&#xff1a; sudo apt update sudo apt install xrdpxRDP是一个开源的远程桌面协议…

【docker 】 push 镜像提示:denied: requested access to the resource is denied

往 Docker Registry &#xff08;私服&#xff09;push 镜像提示&#xff1a;denied: requested access to the resource is denied 镜像push 语法&#xff1a;docker push <registry-host>:<registry-port>/<repository>:<tag> docker push 192.16…

QT开发(四) 制作一个JSON检查小工具

1、JSON概念 1.1 定义 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它易于人类阅读和编写&#xff0c;同时也易于机器解析和生成。JSON基于JavaScript语言的子集&#xff0c;但是独立于编程语言&#xff0c;因此可以被多种…

JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式

技术栈 1. 开发语言&#xff1a;JAVA 2. 数据库&#xff1a;MySQL 3. 后端框架&#xff1a;Spring boot 4. 前端框架&#xff1a;VUE2 5. 电子班牌&#xff1a; Android 7.1 6. 小程序&#xff1a;原生开发 7. 多学校Saas 模式 电子班牌是一款智慧校园管理工具&#xf…

Kubernetes核心概念基本操作

1.1 Namespace命名空间 1.1.1 Namespace核心概念 Kubernetes 的 Namespace&#xff08;命名空间&#xff09;是一种用于创建逻辑隔离分区的机制&#xff0c;它的主要作用是用来实现多套环境的资源隔&#xff0c;它允许用户在同一个物理集群中模拟出多个虚拟集群的效果。以下是…

cmake的使用方法: 将源文件组织到不同的目录

一. 简介 前面几篇文章学习了cmake工具针对单个 .c文件的编译方法。 cmake针对含有多个 .c文件的工程的使用编译。cmake工程编译是如何实现编译生成库文件。 本文学习一下另一种情况&#xff1a;当源文件组织到不同的目录下时&#xff0c;cmake工具该如何编译工程。 二. c…

C++继承 - 下

目录 1. 继承和友元 2. 继承与静态成员 3. 菱形继承以及菱形虚拟继承 3.1. 单继承 3.2. 多继承 3.3. 菱形继承 3.4. 菱形虚拟继承 3.5. 菱形继承的底层细节 3.6. 菱形虚拟继承的底层细节 3.7. 虚拟继承 4. 继承的总结 5. 相关继承练习题 5.1. 如何定义一个无法被继…

Android:弹出对话框方式梳理一览(一)

Android&#xff1a;弹出对话框方式梳理一览&#xff08;一&#xff09; Guide&#xff5c;导言 在Android开发中&#xff0c;对话框可能是我们与用户交互的非常常用的方式&#xff0c;包括弹出一个小界面&#xff0c;可能在实际场景中都非常实用。本篇文章主要就是对Android弹…

陪诊系统|陪诊小程序成品|陪诊系统功能

随着人们对健康的日益关注以及医疗技术的不断进步&#xff0c;陪诊小程序应运而生&#xff0c;通过提供陪同就医、医疗服务和健康管理等功能为患者和家庭成员提供了更多的便利和选择。本文将分析陪诊小程序的关键功能&#xff0c;以便更好地理解其在医疗领域的作用。 在陪诊小程…

分布式任务调度工具 XXL-JOB

默认的账号密码是&#xff1a;admin/123456 一&#xff0c;部署docker容器 docker run \ -e PARAMS"--spring.datasource.urljdbc:mysql://192.168.150.101:3306/xxl_job?Unicodetrue&characterEncodingUTF-8 \ --spring.datasource.usernameroot \ --spring.dataso…

GT资源-Clock资源

一、Transmitter 时钟分布 XCLK&#xff1a;在使用TX buffer的模式下&#xff0c;XCLK来源于TXOUTCLK。在使用TX bypassing的模式下XCLK来源于TXUSERCLK。TXUSRCLK是GTX/GTH中PCS的内部逻辑时钟。TXUSRCLK2是GT Transceiver 用户侧逻辑时钟。 TXUSRCLK与TXUSRCLK2的关系 FPGA …

阿赵UE引擎C++编程学习笔记——信息打印输出

大家好&#xff0c;我是阿赵。   在之前介绍HelloWorld的时候&#xff0c;使用了一个打印的命令&#xff0c;把HelloWorld输出到输出日志里面。   对于我们编写程序代码来说&#xff0c;有2个手段是对程序差错非常重要的&#xff0c;一个是断点&#xff0c;另外一个是输出日…