牛逼!程序员分分钟用Java开发坦克大战,游戏开发其实并不难
游戏展示:
黄色为玩家,击中玩家
敌人发射子弹
项目需求分析:
1.功能性需求
指定系统须提供哪些服务,定义软件完成哪些功能,提供给那些人使用,功能需求是软件开发的一项基本需求,是需求分析必不可少的一部分。坦克大战是一款经典游戏了,本游戏学习了一些前辈们的经验,整体来说讲,游戏分为敌我双方,主要参与战斗的坦克有玩家控制,敌人坦克可以智能随机出现在屏幕上,并且移动,发射一定数量的子弹;玩家可以在规定的区域内随意移动坦克,当有子弹击中玩家时,玩家死亡,游戏结束;敌人坦克智能运行,敌方坦克由于需要具有一定智能性,随机出现在屏幕上,自由的转动例如:碰到边界知道转向;子弹的运行:坦克有玩家控制打出,根据不同的坦克位置发射子弹,如果击中目标,则会产生爆炸效果;在屏幕上面也将消失。
如果有想学习java的同学,可来我们的java技术学习QQ群:928204055,免费送整套系统的java视频教程!我每晚上8点还会在群内直播讲解Java知识,欢迎大家前来学习哦。下面是部分资料截图:
2.系统性能需求
游戏对于基于计算机系统的性能配置要求是保障能使程序快速,稳定的运行,运行时能够及时的响应,当游戏中玩家坦克被击毁,及时提示游戏失败的信息,能及时有所回应,以满足游戏的规则需求,另外还要保证玩游戏时候,主窗口的大小是不能够随意改动的,保证有可玩性。
3.功能解决的问题
游戏中需要代码利用率很好,毕竟是一个实时运行的作品,每毫秒都会有很多个子弹发射,以及很多个坦克的坐标移动,无数次的对比子弹是否击中坦克,对于键盘监听事件,以及实现线程这个接口,绘图的重绘刷新等问题;逻辑感需要较强,以及面向对象展现的淋漓尽致;甚至之间的关系搞不清楚,很容易出现意外的情况;游戏中为了使加入一下美观,增添了爆炸这一现象,那么这就需要当敌人坦克死亡的时候在外面的面板上实现对固定地方图片进行短暂快速的轮播,实现一个爆炸效果;
总的来说对于坦克大战所要完成的基本的功能有:图形化界面、敌我坦克样式区别、坦克可以发射子弹攻击对方,但却不能攻击队友,坦克设置一定的生命值;
二、主要功能分析
在坦克大战游戏开发过程中,实现的主要的功能;提供给用户所使用,所以首先要画出来个坦克。
1.画出玩家坦克: 需要在JPanel面板上面设置一张画纸paint()并用画笔draw出坦克的大致形状;
2.玩家的坦克可以移动: 如果要是坦克运动起来,需要改变坦克的坐标,并且不停的重绘面板,但什么时候让坦克移动,可以在面板的类中实现事件监听机制(键盘监听)的接口,当玩家摁下w/d/s/a键可以对应上下左右移动;
3.并在我的画纸paint()上面画出敌人坦克;由于敌人坦克与玩家坦克在同一界面,需要画出在同一画板上;
4.玩家的坦克可以发射子弹: 玩家要想发射子弹,要有事件源,便是当用户摁下J键,事件监听当立刻发射一发子弹,但有需要显示在用户的眼前看出效果,所以在面板上面paint()画出子弹;由于子弹发射出来需要朝着发射放不停的移动,所以不进要一直改变子弹的坐标,还要在子弹速度恰当,所以需要用线程实现,并让面板的不停重绘,看出效果;
5.玩家子弹可以连发并且最多发五颗: 玩家若要控制子弹的个数,需要在玩家摁下J键时候,来得出当前存活的子弹数量是否小于5,当符合条件,就创建一颗子弹,当玩家发射子弹大小超过五颗,则不再调用系统的开火函数;由于发射子弹不是只发射一颗,所以设置集合存放子弹,开火一次产生一个子弹,知道子弹碰到边界死亡即是溢出子弹集合;
6.玩家坦克击中敌人坦克则消失,并产生爆炸效果;首先要判断玩家坦克的子弹是否击中了敌人,所以要有不停判断击中敌人的函数,当子弹运行到敌人坦克上,坦克生命需要终结,并产生一颗炸弹,并在paint()画出炸弹;
7.敌人的坦克可以智能移动: 如果要是坦克只能移动,需要随机产生移动方向,由于不停的运动,所以将方法写入到线程的run函数里面,并控制线程休眠来实现移动速度问题;
8.敌人坦克以可以发射子弹: 在画出敌人的同时,在线程中设定一定休眠产生不同方向,不同数量坦克的子弹,并在面板上取出每颗子弹,并画出;
9.敌人子弹击中玩家,玩家消失: 不停的取出敌人的每颗子弹,与玩家坦克进行比对,当子弹触碰到玩家,玩家爆炸消失;
三、概要设计
角色属性设置
坦克:坦克产生的位置,不同类型坦克的颜色,坦克生命标识符,坦克运动的速度,以及不同方向的坦克;
玩家坦克:继承坦克基本属性之后,在次基础上实现,玩家坦克的自由上下左右移动;以及玩家坦克拥有开火发射子弹这种功能;
敌人坦克:继承基本坦克属性之后,需要实现敌人坦克要智能的运动,同时也要在不同位置的坦克对其进行发射子弹线程;
子弹:子弹要有坐标位置,速度,生命值,以及子弹应该可以动,以及子弹也要死亡函数方法的实现;
炸弹:炸弹的坐标,生命,以及生命渐消失的效果方法函数;
功能属性设置
画纸:paint()应该画出来玩家坦克,敌人坦克,以及显示出死亡坦克爆炸效果;
事件监听:当用户摁下wdsa,对应的玩家坦克应该进行方向的改变,当用户发射j则朝发射方向有颗子弹,并且应该一直运行到死亡,除非击中敌方;
击中坦克:当子弹击中到敌方坦克,产生爆炸添加到爆炸集中,并将爆炸信息画到面纸上;
敌人击中玩家:取出游戏里所以的敌人,以及每个敌人的子弹与我的坦克去匹配,判断是否击中;
玩家击中敌人:取出玩家的每颗子弹,与每一个敌人的坦克去匹配,判断是否击中;并将击中坦克相关的判断,放到线程run()里面进行不停并发的判断;
具体功能分析图如下:
坦克角色属性分析图
功能画板分析图
坦克Xmind整体分析图
坦克角色属性Xmind图
坦克功能属性Xmind图
四、系统实现
•Members.java
MyTankGame4.java
欢迎关注胖胖爱Java的简书号,可视化学习java,每天更新文章,让Java学习更加简单。
声明:本文内容来源于网络,如有侵权请联系删除