练手小项目(三):坦克大战游戏(说明文档)

【Java实战】Java实现坦克大战(韩顺平版) 该坦克大战运用了JavaGUI图形库,多线程,文件IO,反射等Java高级编程中的知识,用来巩固Java语法非常合适。我在韩老师原版的设计上做了一些改变,敌方坦克会永远保持三个,你每杀死一辆敌方坦克,并会在屏幕内随机生成一个敌方坦克以此来增加游戏乐趣,其他内容与原版无异。下面是展示图:该项目总共九个类,包含近1000行代码。 阅读详情

练手小项目:坦克大战游戏(说明文档)
时间:2009年1月31日
开发工具:Eclipse

项目描述:仿马士兵老师的单机版简单的坦克大战游戏,能够实现敌我双方互相攻击,实现坦克击毙后爆炸的效果,坦克能够从任意方向行驶和发射炮弹,增加障碍,能阻碍坦克的行走

项目所使用的一些技术:GUI,事件监听,多线程,简单理解一些设计模式和反射机制,重要的是理解面向对象的思想

项目过程:
1.建立游戏界面
产生一个合适的窗口,并设置其为不可更改框架大小,添加关闭窗口事件,关闭窗口。

2.画出一辆坦克
用圆来模拟一辆坦克。

3.让坦克动起来
启动一个线程来不断重画坦克让坦克动起来,当窗口显示时线程开始运行。

4.消除坦克移动时的闪烁
调用update方法
创建一副和窗口大小的背景虚拟图片,把原先坦克完整的画到此图片上然后再在窗口显示出此图片

5.控制坦克行走
响应键盘事件,按下相应键后完成移动。

6.坦克朝八个方向行走
利用枚举类型定义八个方向,定义四个方向的布尔值
默认坦克初始方向为静止
根据按键响应来确定按的哪些方向写一个移动的方法并在画坦克后调用
如果按键抬起后方向布尔值为false

7.添加子弹类
增加一个子弹类,添加一个构造方法,画出该子弹,添加子弹移动方向根据坦克移动的方向而移动,在坦克类中有一打子弹方法根据坦克中心位置打出子弹
响应CONTROL键在此键上调用打子弹方法。

8.解决子弹在坦克停下后打不出问题
根据炮筒的方向来打出子弹
在坦克类中定义一个炮筒变量,在DRAW方法中画出,但坦克移动时如果方向不是停止就把方向改为炮筒方向,构造子弹类时传递炮筒方向。

9.打出多发炮弹
添加一个子弹类型的容器。
在画的时候拿到每一个子弹,画出在坦克打出子弹的方法中添加每一颗子弹
如果子弹移动到游戏窗口外就认为其死亡在子弹类移动方法中判断是否出界
如果出界则画了子弹方法中判断子弹是否死亡,若死了就不画了。

10.画一辆敌人坦克
增加一个区分敌我的坦克量Good,增加相应的方法设置好坏,如果是坏坦克就画为蓝色的,否则为红色的,修改构造方法在类中NEW出敌人坦克

11.将敌人坦克击毙
在子弹类中加入一个打坦克的方法参数传递坦克类型
分别在子弹与坦克类中添加碰撞检测方法
在击中坦克方法中判断是否碰撞如果碰撞,子弹消失,敌人坦克死亡(不重画)。

12.添加爆炸类
定义一个爆炸生死变量,默认为true.
用不同直径的圆模拟爆炸,在画爆炸时判断是否活着,如果没活就移除它,如果活着就按不同的直径的圆画它。
通过容器装入爆炸,在打坦克后添加每一个爆炸,调用爆炸类构造类函数

13.添加多辆坦克
用容器装敌人坦克,在窗口方法中添加多辆坦克。
打击多辆坦克,加入一个打击一个容器的坦克方法,在调用相应方法

14.智能的敌人坦克
敌人坦克动起来,在坦克类构造函数中添加方向,NEW TANK时设定某一个方向,敌人坦克随即懂起来,需要加一个RANDOM类,在坦克移动方法中判断是不是好坦克不是则拿到方向,随即步骤移动
敌军坦克发射炮弹,本军炮弹不打本军坦克,子弹类中添加一个子弹好坏的变量,如果子弹和坦克不同则可打击对方,如果子弹死了不画了

15.坦克出界问题
坦克移动方法中判断坦克位置是否小于或大于窗口大小,做出相应的解决。

16.在窗口中添加两堵墙
添加一个墙类,定义构造方法,画出两堵墙在主类中NEW出两堵墙来
子弹不能穿过墙
在墙这个类中增加一个碰撞检测方法在子弹类中增加一个子弹碰撞检测方法,判断是否撞上,如果撞上了子弹死去。
坦克不能穿过墙
在坦克类中定义一个坦克移动前一步的变量记录坦克撞到墙后的前一步,判断是否撞到,若撞到则返回到前一步

17.坦克互相穿越问题
坦克类中增加撞击坦克方法
判断两辆坦克是否相等,如果不等判断是不是活着,并且撞击到,如果撞到则调用返回前一步的方法。

18.添加一个超级炮弹
子弹朝八个方向发射,CTRL键发射
在子弹类中添加一个发射炮弹的方法有一个方向参数,加入一个发射多发炮弹的方法,拿到八个方向的素质将这些数值转换为数组传递到相应方法中,处理按键A调用发射超级炮弹的方法。

19.增加生命值
增加一个坦克生命值初始为100.
如果子弹打中坦克如果是好坦克生命值减去20
如果生命值小于等于0了,坦克就死了,如果是坏坦克打中就死。
血条表示生命值
在坦克类中增加一个血条内部类
在类中加入画血条的方法,画坦克时调用。

20.敌人与我军他那颗时候解决的问题
敌人死了重新加入
在画坦克时判断是否没有坦克了,若没就增加。
我军时候按F2开始
增加对F2按键处理,如果死了设置为TRUE并且设置生命值为满

21.图形化此游戏。
加入爆炸图片
将爆炸图片代替圆,添加一个TOOLKIT类拿到系统工具
用一个图像数组装图,画的时候画出图。
加入坦克图片
将坦克图片代替圆,用MAP容器装
坦克的方向按着坦克的图片来画
加入子弹图片
方法与加入坦克图片相似。

Unity有哪些适合拿来练手的游戏项目? 首先推荐一篇文章,其中涵盖海量Unity和C#的书籍、demo等海量干货。文章链接:Unity 高级程序员应该具备怎样的能力?要怎样成长为 Unity 高级程序员?Unity有哪些适合练手的游戏项目?还是老规矩,全文无付费无套路,Unity学习路线初级实践版来咯~ 阅读详情

相关推荐

Python游戏开发实战:从零复刻经典坦克大战,掌握Pygame核心机制

游戏开发是编程学习的重要实践领域,其核心在于理解游戏循环、对象管理和实时交互的原理。通过事件驱动、状态更新和渲染绘制等技术,开发者可以构建出交互式应用,这对于深入理解软件架构和实时系统设计具有重要价值。在Python生态中,Pygame库因其简洁透明、社区资源丰富而成为2D游戏开发入门的首选工具,它封装了底层的图形、声音和输入处理,让开发者能聚焦于游戏逻辑的实现。本文以复刻经典坦克大战为具体场景,详细拆解了如何使用Pygame实现游戏对象(如坦克、子弹、墙壁)的面向对象设计、矩形碰撞检测机制以及基于状态检查

weixin_27945229的博客 341

尚学堂科技_马士兵_坦克大战视频教程_java_eclipse

 从今天开始学习这个项目,争取三天内完成。

javain2009的专栏 1136

Cocos Creator实战:从零复刻经典坦克大战,掌握2D游戏开发全流程

游戏开发的核心在于将创意转化为可交互的体验,其基础通常围绕实体管理、碰撞检测与状态逻辑展开。在2D游戏开发领域,这些原理通过游戏引擎得以高效实现,其中Cocos Creator以其对2D项目的友好支持、可视化编辑器及TypeScript脚本语言,成为快速原型开发和项目实践的理想选择。其技术价值在于通过组件化架构和跨平台发布能力,显著降低了开发门槛并提升了代码复用性。在诸如复刻经典街机游戏《坦克大战》的应用场景中,开发者可以系统实践从地图系统构建、实体(坦克、子弹)逻辑、AI行为树到性能优化(如对象池)的完整

weixin_34327223的博客 544

你敢信?清华毕业大佬用了一个坦克大战项目就讲完了23种设计模式

我方坦克有三次生命值,当与敌方坦克或敌方子弹相撞时,生命值减- -, 当生命值是零时,敌方胜利,游戏结束。敌方坦克的生命值为-一,当敌方坦克与我方坦克或者我方子弹相遇就消失,同时我方子弹也消失,并产生爆炸。坦克大战中有我方坦克和敌方坦克,我方坦克有一个,敌方坦克有多个。子弹:父类子弹(Bullet)、 我方子弹(MyBullet)、敌方坦克(EnemyBullet)。坦克:父类坦克(Tank)、 我方坦克(MyTank)、 敌方坦克( EnemyTank)。1. Factory Method(工厂方法)

m0_59595915的博客 191

Python复刻20款经典童年游戏:从贪吃蛇到坦克大战的完整开发指南

游戏开发是理解编程核心概念与工程实践的重要途径,其本质是将复杂逻辑拆解为数据、状态与交互的协同运作。从基础的状态机与队列应用,到网格化算法与碰撞检测原理,经典游戏如贪吃蛇、俄罗斯方块和飞机大战,分别诠释了数据结构、算法设计与面向对象编程的技术价值。这些项目不仅适用于Python初学者巩固语法,更能帮助开发者掌握事件循环、资源管理与性能优化等实战技能。通过Pygame、Tkinter等库,开发者可将理论应用于**游戏开发**与**Python项目实战**,在复刻童年记忆的过程中,系统提升从脚本编写到完整应用构

weixin_29159441的博客 307

分享177个安卓游戏源码,总有一款适合你

分享177个安卓游戏源码,总有一款适合你

zy0412326的专栏 8642

Java坦克大战

Java坦克大战

weixin_72040135的博客 2199

用cocos2d-x开发双人坦克大战:从设计到碰撞检测的完整实践

在2D游戏开发中,引擎选择与核心机制的理解是入门关键。cocos2d-x作为经典的跨平台2D引擎,其场景管理、精灵动画、事件监听和碰撞检测等模块,为开发者提供了完整的游戏开发链路。通过一个双人坦克大战的练手项目,可以系统掌握格子系统、AABB碰撞检测、分轴移动回退、多键输入映射等核心技术。本文从概念到原理,从技术价值到应用场景,剖析了如何利用该引擎实现经典街机玩法,并针对子弹穿透、坦克卡墙、手感调优等实战问题给出解决方案,既适合新手快速上手,也为游戏开发中的碰撞检测与对象管理提供了工程实践参考,最终自然聚焦

weixin_28040125的博客 278

java实现坦克大战

话不多说,直接上思维导图(比较粗略) 目录 ​窗口初始化 游戏父类的编写 添加坦克类 初始化子弹类 添加围墙、基地 添加游戏规则 窗口初始化 准备工作 首先创建一个TankWar项目,在scr相同路径下创建images、music文件夹,将需要使用的图片、音乐分别放在images、music中。创建一个com.tankwar(包),注意命名规范 窗口初始化 在com.tankwar中创建GamePanel类 import javax.swing.JFrame; public

小熙的博客 2万+

FreeFEM++下载安装和使用

最近要利用机器学习求解一些偏微分方程,对于一些复杂的偏微分方程,需要一些精度比较高的参考解,导师推荐了FreeFEM++软件。首次使用,特此记录一下,以备以后查阅。 1、FreeFEM++简介 FreeFEM是开源的有限元模拟系统,有法国利翁斯实验室、埃尔和玛丽居里大学共同开发,在世界范围内广泛使用。 2、FreeFEM++去何处下载? 下载地址:https://freefem.org/ 点击Download,然后会跳转到 https://github.com/FreeFem/FreeFem-source

夜晓岚的博客 1万+

PCB工程师必看:别再搞错1078玻纤布的Dk了,手把手教你算等效介电常数

本文为PCB工程师提供了1078玻纤布等效介电常数(Dk)的详细计算指南,帮助解决高速设计中的信号完整性问题。通过解析玻纤布结构、混合介质理论和实战计算方法,指导工程师准确设置EDA工具参数,避免常见的Dk计算误区,提升设计精度和仿真准确性。

weixin_42546392的博客 399

Java 实战项目坦克大战,一小时学会制作

相信大家听到这个名字已经安耐不住激动的心了吧!这个游戏有单人模式和双人模式两种模式。玩家通过操控指定按键,控制己方坦克移动方向或发射子弹,游戏中会随机生成敌方坦克并发射子弹,己方坦克击中敌方坦克后,敌方坦克消失,摧毁所有敌方坦克后,游戏胜利。若己方坦克被击中或基地被摧毁,游戏失败。 《坦克大战》是由日本南梦宫Namco游戏公司开发的一款平面射击游戏,于1985年发售。游戏以坦克战斗及保卫基地为主题,属于策略型联机类。 同时也是FC平台上少有的内建关卡编辑器的几个游戏之一,玩家可自己创建独特

N_01040709的博客 305

西门子与汇川伺服脉冲连接(速度模式)

如何使用西门子PLC与汇川伺服进行脉冲连接

2301_77347966的博客 1万+

持续更新:适合Java初学者2021年最新练手项目!【建议收藏】

源码下载(实例一): jsp开发完整的博研图书馆后台管理系统,不使用框架开发的,太完美了 http://www.zuidaima.com/share/2358272909446144.htm 源码下载(实例二): javaWeb图书馆管理系统源码mysql版本 https://download.youkuaiyun.com/detail/defonds/7123499 源码下载(实例三): GitHub - uboger/LibraryManager: JAVA GUI 图书馆管理系统 htt...

deqing271的博客 822

ERDAS 2022与ArcGIS共存安装教程:如何避免端口冲突(详细配置步骤)

本文提供了一份详细的ERDAS 2022与ArcGIS共存安装教程,核心在于解决两者因FlexNet许可证服务器导致的端口冲突问题。通过分步指导,包括检查现有端口占用、修改ERDAS许可证文件端口号、配置防火墙及客户端设置,确保两款专业GIS与遥感软件能在同一系统上稳定运行。

weixin_29279047的博客 255

硬件测试之—纹波测试为什么不要使用接地夹子

示波器为什么不推荐使用接地夹

qq_19294353的博客 2989

坦克大战java编写视频_java编写的坦克大战 视频学习后 自己练手写的 适用于初学者...

可实现功能:可以实现子弹连发/////1>按下J键时,判断子弹向量中子弹个数/////2>【若符合 ,则新建子弹 添加到子弹向量 并启动子弹线程/////3>遍历子弹向量并判断子弹属性如是否活着,画出子弹,否则从子弹向量中移除子弹】//子弹击中敌人坦克后 坦克消失/////1>在MyPanel的run函数里添加判断语句 ,判断坦克是否被击中:遍历所有子弹看是否有效,若有...

weixin_39640372的博客 123

Python+Tableau 全流程数据分析实战:从数据清洗到商业洞察可视化

本文通过Python+Tableau完整演示电商销售数据分析流程。首先使用Python进行数据清洗(缺失值处理、异常值过滤等)和探索性分析(商品类别、时间趋势等),然后导入Tableau创建交互式可视化仪表盘。分析发现电子产品销售额最高但利润率低,美妆类利润率最优,东部地区销售表现最好。最终提出优化供应链、加强美妆推广等商业建议,展示了Python数据处理与Tableau可视化的高效配合。所有代码可直接运行,适合数据分析初学者和从业者实战参考。

weixin_44520581的博客 338

12个Java实践项目:练完变学神

【尚学堂Java游戏项目“超级玛丽“】Java实战教程 最近有很多看过java300集小伙伴私信我说推荐几个Java实践练手项目,在这里我收集了12个可以供大家在平时学习过程中进行练手的项目! 尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受https://www.bilibili.com/video/BV1qL411u7eE 11.4万2054 尚学堂官方 最近学习Java的小伙伴们快来练练看看自己的.

weixin_43390504的博客 1万+

车载网络测试实操源码_使用CAPL解析VBF文件

VBF(Versatile Binary Format)文件是一种二进制文件格式,被沃尔沃、福特、马自达、吉利等汽车制造商广泛采用。这种格式无法使用我们常规的烧录器进行刷写,通常需要进行解析转化。如果各位需要自己编写软件或脚本来刷写VBF文件,或者需要对刷写功能进行测试时,那么本篇文章就会对你非常有用。今天我们就来讲一下如何使用CAPL脚本对VBF文件进行数据解析。VBF文件包含三部分:VBF版本段、文件头段、数据段。前面的版本段和文件头段是ASCII码,包含版本、地址、校验码等信息

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 3001

PDD psnl_verification anti_content 生成顺序与环境校验说明

K不是明文 URL,而是从当前href再派生出来的一小段摘要值。页面 URL 变,K会跟着变但K不是直接肉眼可读的 URL 字串可以把它理解成“URL 的短摘要字段”。这一步是最容易被误解的地方。它吃进去的是压缩后的中间串不是直接吃环境字段它内部还带有长度预算 / 字符映射 / 位置处理逻辑所以最终看到的环境字段 bytes协议头deflate 压缩自定义编码多层叠加后的结果。先把字段总包做再把压缩结果转成raw再拼fTail最后走做字符级输出因此,当前看到的协议字段流。

码王吴彦祖的博客 70

30个Python小游戏,小白练手,我都能玩一天

30个Python小游戏 ,原来这么简单

nnn0245的博客 7566

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

用游戏的方式学习Java

这段时间以来,觉得面基础的学习是很重要的,最近待业在家,所以闲暇的时候温习下J2SE的知识,同时,通过写一些应用来加深自己的理解。于是乎,参考http://www.bjsxt.com/里面的一些教程,写了个坦克大战的小游戏玩玩,并在在此基础下加了一些扩展。当然代码本身可能还有许多Bug,不过通过写这东西来练练手还是不错的。下面介绍下这个小东西:(一)在游戏的功能方面大致有以下几点:(1)关

Wiki.M's development 760

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Java游戏项目合集】10套毕设游戏项目(附源码+文档)

保姆级教程,手把手教你编程,助你轻松毕业~ 每天一个练手项目~ 适合小白、实战练手、简历必备项目 本套视频课程包含: 1.羊了个羊 2.飞机大战项目 3.超级玛丽项目

m0_72882572的博客 282

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

整理的JAVA 项目练手

贪吃蛇 源码下载(实例一): JAVA贪吃蛇源代码 http://download.youkuaiyun.com/detail/java_cxrs/1005980 源码下载(实例二): java swing编写的3个小游戏程序源码,俄罗斯方块,贪吃蛇和坦克大战 http://www.zuidaima.com/share/2255780075867136.htm 源码下载(实例三): java贪吃蛇源代码 、 java贪吃蛇源代码 http://www.zuidaima.com/share/1737620634422

HATAO999999的博客 502
上一篇: 详细解析Java中抽象类和接口的区别
下一篇: JAVA练手项目(三):坦克大战游戏源代码
不善^
博客等级 码龄18年 635粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值