您的位置:首页 > 编程语言 > Java开发

泡泡堂 Java版

2016-02-11 08:59 246 查看
一、简介:这个算是我学Java后做的第二个小程序吧,那时的能力还在菜鸟行列,能做成这样已经挺满意了,不足的地方肯定还有很多,但我也没有时间去优化了,等有空再去做一个网页版的。上传主要是供Java初学者参考学习,大神勿喷。

附上普通版源码文件,需要算法版的再找我要吧




二、主要介绍:






界面主要是用JavaSwing做的,开始菜单窗口用了CardLayout布局切换各种页面。



游戏界面主要分为三个部分:计分栏、游戏栏与道具栏。视图的更新采用独立线程无限重画JFram的方式,游戏中改变了角色的坐标就能自动实现角色的移动。



这是设计时定的结构关系,主要是一个树状结构,这样有利于集中控制与降低程序的耦合性。



碰撞检测有必要提一下,因为碰撞检测贯穿了整个游戏,角色与角色之间有碰撞,角色与***之间有碰撞,角色与障碍物、

***与障碍物之间都有碰撞。

三、游戏算法



这里的两种背景用了两种不同的算法来实现,分别是回溯法与分治法,为什么背景要用算法实现?因为我这里想实现的是背景能

随着时间的变化而变换颜色布局,但是要永远满足每两个相邻的格子颜色不一样,这就需要算法来计算了,这个思路来自于地图

的着色问题。



做出来的效果大概是这样的



敌方的出场需要满足一定的随机性与分散性,这里我用到的是n后分布,n后分布能实现每两个敌方角色的出场位置不在同行同列上。



寻径算法主要是用在幽灵角色上面,从而实现幽灵能追着玩家跑,寻径算法有很多,这里用的是回溯算法,这是一种不太聪明的算法,

因为幽灵走的未必是最短路径。



读档存档有两种方法,单机版可以存到appdatas,如果是网络版就建议存到数据库了,我这里的存档由于时间原因只做了一点。

四、主要遇到的问题






冲突表现主要是不能在移动的同时放***,解决方案有两种,一种是分开线程监听,另一种是把移动键监听分割成按下事件与释放事件,

按下后角色自动移动,直到释放按键才会停止,这样在角色移动时按其他按键阶段移动键的监听也不会影响了,因为他还没监听到释放移

动键的事件,还在自动移动。



由于是重画窗体的更新方式,闪烁问题是肯定会有的,这里的解决方法是利用双缓冲技术,

双缓冲是什么,你们百度比我说要清楚。



由于是人机对战,敌方自杀行为表现为敌方的智能性不高,很容易被自己的***炸死,具体的解决方法就是给它们更多的思想与算法,

具体操作就不一一说了,因为这个是可以有很多种方法的,而我的方法并不好。

由于分为开始菜单与游戏窗口两个界面,所以在切换的时候会遇到焦点丢失问题,解决方法很简单,不用我说了吧



重构是比较重要的一步,但是很多人会忽略,下图是重构前后的UML图,对比鲜明,就不再多说了



五、感悟:

像这样的程序很多人都能做,但是醉翁之意不在酒,真正的意义在于你在里面体会到了什么,学到了什么,小小的程序往往能牵扯出很深的编程知识与思想,现在我在学习Web架构,希望结交这方面的大神,共同学习,共同进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: