Java坦克大战游戏源码解析 带声音 带道具 带地图编辑器

2021年9月7日 9点热度 0条评论 来源: 雷子墨

前段时间闲来无事,自己用Java语言仿照着FC版本的坦克大战自己实现了一个,希望给初学者,想用用java做桌面游戏的童鞋们一些参考,本游戏纯Java语言开发(原生Java),没有使用任何的游戏引擎,

演示视频地址:https://www.bilibili.com/video/av21952686/?p=2(部分完成版)

演示视频地址:https://www.bilibili.com/video/av21952686/?p=1(完成版)

下载链接在文末,请耐心浏览本博客

游戏界面如下:

如上图:这个游戏有四个模式,分别是单人游戏模式、双人游戏模式、预览关卡地图模式和自定义地图模式

接下来进去单人游戏模式:

可以看到游戏界面上有,玩家坦克,敌方坦克,还有道具,各种砖墙障碍物以及坦克发出的子弹,当然基地也是必不可少的了

 

双人模式是类似的:看下图,蓝色的坦克是电脑坦克(敌方坦克),黄色坦克是玩家1,紫色坦克是玩家2

 

预览关卡模式,可以看到目前我已经写好的所有关卡:

目前我总共做了14关,当然你如果觉得我写的地图不够,或者不好玩的话,你可以在自定义地图模式里面去画出你自己喜欢的地图:

这是第一关

第二关

第三关

第四关

第五关

第六关

第七关

第八关

第九关

第十关

第十一关

第十二关

第十三关

第十四关

 

接下来进入自定义地图模式:

如上图,蓝色的格子里面就是我们可以把各种墙块放进去的地方,右上角的几个墙块是我们可以选择的画到地图上的墙块类型,有砖墙,钢砖,草坪,河流,当然,不能少了擦子这个东西。

 

下面开始介绍这个游戏的一些基本功能:

这个游戏基本实现了fc坦克大战的所有功能,额,除了计算得分

比如说:

1.页面上绘制出了坦克,墙块,基地,子弹以及道具,利用双缓冲使得页面不闪屏,很流畅

2.坦克可以发射子弹,子弹可以打掉砖墙,可以打掉基地(这个时候会导致游戏结束),可以打爆坦克

3.游戏有背景音效,比如游戏开始的音效,坦克发出子弹的音效,坦克爆炸的音效,子弹撞击的音效,游戏结束的音效

4.玩家坦克可以捡道具,有六种道具

    第一种:坦克道具,这个吃到了坦克的生命数会加1

    第二种:定时器道具,这个吃到了过后地方坦克会不行动两秒

    第三种:炸弹道具:这个吃到了过后,会让页面上所有地方坦克立即原地爆炸

    第四种:星星道具,这个吃到了会增加坦克的移动速度和攻击速度(发射子弹的速度),累计三个可以变成钢枪

    第五钟:钢枪道具,这个吃到了过后可以打掉页面上所有的墙,无论草坪,河流,钢砖,砖墙

    第六种:钢撬道具,这个吃到了过后可以让保护基地的砖墙全部变成钢砖

5.自定义地图:我们可以按照自己的想法,画出自己喜欢的地图,并且保存起来

 

下面开始讲代码,先给出项目结构图:

最下面还有一个存放地图的map文件夹

这个游戏是基于mvc的设计模式开发的,面板类(视图)、模型类、工具类等Java类分工明确,各自处理自己对应的模块,和功能,互不干扰,耦合性低,易于拓展。

 

先从包结构开始讲起

enumtype包:见名知意,存放的是枚举类型,这个包里面的类都是枚举类,共有5个。

    1.Direction:方向枚举类,上下左右

    2.GameType:游戏类型枚举类,单人模式,双人模式

    3.TankType:坦克枚举类:敌方坦克,玩家坦克1,玩家坦克2

    4.ToolType:道具枚举类:增加坦克道具,爆炸道具,钢撬道具,星星道具,定时器道具,钢枪道具

frame包:存放各个面板类

    1.GamePanel:游戏面板类,这个类里面实现了游戏逻辑的判断,比如音效应该在什么时候播放,坦克应该在什么时候检测碰撞,键盘事件的响应处理等等

    2.LevelPanel:关卡面板类,这个类里面主要是处理游戏开始时,展示在窗口里面的关卡值,还有闪烁的准备字样

    3.LoginPanel:登录面板类,这个类处理的是,打开游戏时的选项卡面板

    4.MainFrame:主面板框架类,所有的面板都必须在Frame窗体上,才能显示出来

    5.MapEditorPanel:地图编辑器面板类,这个类是负责自定义地图模式所展示出来的页面,画地图,保存地图的处理

    6.MapPreviewPanel:关卡地图预览面板类,这个类处理预览地图的面板页面

main包下只有一个Start类,这个类是启动类,是整个程序的入口,main方法所在

model包:存放模型类

    1.Boom:爆炸模型类,这个类是爆炸效果实体类,用于展示坦克被子弹击中后的爆炸效果等

    2.BotTank:电脑坦克类,这个类是电脑坦克实体类,继承自坦克类,负责处理电脑坦克随机发射子弹,随机移动等

    3.Bullet:子弹类,这个类是子弹实体类,负责处理子弹的移动,子弹的碰撞等

    4.DisplayableImage:可显示图形的抽象类,这个类是所有展示在面板上面的实体类的父类,抽象出来碰撞检测方法,画图方法等

    5.Level:关卡类,这个类是关卡的实体类,负责处理上一关,下一关的记录,以及获取出所有关卡总数

    6.Map:地图类,这个类负责从文件中读取出地图的坐标数据并封装成集合,对外提供读地图和写地图的方法

    7.Tank:坦克类,这个类是坦克实体类,保存一些坦克的属性

    8.Tool:道具实体类,这个类负责产生道具

    未完待续。。。

 

总结一下游戏中用到的Java知识点:Java程序流程语句控制,Java数组,Java集合框架,Java文件流输入输出操作,Java AWT事件处理,Java Swing 组件,Java Graphics 画布类,Java 抽象类和多态,Java 反射,Java 封装和抽象思想 等等等等。

 

游戏代码注释详细,下面给出下载地址

https://download.csdn.net/download/qq_36737934/10412920

考虑到大家没有csdn积分,给出gitee开源仓库地址

https://gitee.com/zimolove3/TankWar

在此感谢一下明日科技的《零基础学Java》,游戏开发中,有部分参考了书上的源码,谢谢

如有问题或建议,请联系博主——我叫子墨,qq:461009747

 

    原文作者:雷子墨
    原文地址: https://blog.csdn.net/qq_36737934/article/details/80306363
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。