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

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

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

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

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

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

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


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

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


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

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

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

这是第一关

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

第二关

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

第三关

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

第四关

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

第五关

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

第六关

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

第七关

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

第八关

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

第九关

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

第十关

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

第十一关

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

第十二关

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

第十三关

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

第十四关


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

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

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


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

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

比如说:

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

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

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

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

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

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

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

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

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

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

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


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

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

最下面还有一个存放地图的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.****.net/download/qq_36737934/10412920

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

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