疯狂玻璃球Wince课程设计报告.docx
《疯狂玻璃球Wince课程设计报告.docx》由会员分享,可在线阅读,更多相关《疯狂玻璃球Wince课程设计报告.docx(13页珍藏版)》请在冰点文库上搜索。
疯狂玻璃球Wince课程设计报告
WINCE课程设计报告
题目:
疯狂玻璃球
姓名:
张亮
学号:
201130050221
专业:
计算机科学与技术
指导老师:
戴晟辉
2013年11月20日
目录
一、游戏设计架构概述
1.1游戏总体设计思想1
1.2用户界面模块2
1.3逻辑处理模块3
二、游戏有关算法概述5
2.1多线程处理5
2.2多缓冲控制6
2.3游戏核心算法7
三、游戏程序评价10
3.1自我评价10
四、游戏程序评价................................................................................................11
附录一应用资料与参考文献目录13
游戏设计架构概述
1.1游戏总体设计思想
本游戏是微软SmartPhone平台下的手机游戏,由于平台的特殊性,所以在游戏的架构和设计上既要符合游戏的特点,又要考虑到与设计其他pc游戏的不同。
难点在于手机资源是很有限的,不能直接从设计pc游戏的架构直接搬到SmartPhone游戏上,架构设计的变化是必然的。
在本游戏中我们提出了一套全新的设计架构,充分考虑到了C#语言的特点,以及.NET平台的优点。
在架构中摈弃了以前手机游戏设计中,虽然采用面向对象开发但是没有充分利用面向对象的不足,大量采用了当前先进的设计模式。
在本游戏中以状态为主线,将游戏分为两大模块,用户界面层和逻辑处理层(见图1)。
每一层中都将状态分离,用面向对象继承多态的方式,对每个状态进行有效管理。
对于用户的操作,则采用了“命令”的方式将用户的每一个动作都抽象成一个“Command”类去执行。
另外,对于一些特殊的操作,比如:
贴图;我们采取了再次封装微软类库的方式,使所有的操作都集中到一个类中处理。
如此设计使得每个类的分工相当明确,避免了无效代码的出现,且从逻辑复杂度上降低了出错的可能,在代码的维护上也起到了至关重要的作用。
图1
1.2用户界面模块
在用户界面模块中,最主要的工作是将所绘制的图形进行输出。
其次,在这一层面中对不同的界面采用了不同的状态加以处理,且这些状态都派生于一个接口父类,另外对于各种凌乱的状态采用了状态管理类来统一的管理,状态之间的转换也是由该类负责执行的。
在这一层次中接收用户的操作信息,并将信号传入相应得逻辑处理模块中进行处理。
(对整个层次的描述见图2)
图2
图3
1.3逻辑处理模块
逻辑处理模块是整个游戏的核心,它处理一切从用户界面传入的消息,并做出相应得处理。
在整个游戏中,每一个用户层的状态都相应有一个逻辑处理模块。
在这些逻辑层模块中游戏主逻辑(GameRun)的模块是整个游戏的核心处理区,几乎所有的算法都集中于此。
该逻辑处理模块中,还是采用了状态模式,对整个游戏过程加以控制。
在这些状态分别由:
慢落状态(downslow)、快落状态(downfast)、选择玻璃球状态(selectblock)、消状态(cleanblock)、暂停状态(Pause)等等,几个主要的状态组成,并且仍旧采用一个状态管理类对所有的状态加以管理,负责状态的转换。
图4
此外该状态中也处理用户的按键事件,并根据用户消息急迫程度采取了,同步处理和异步处理的方式,使得程序的开销大大降低。
对于每一种按键事件,都抽象成了命令来处理,每个命令对应一个处理类,这样使得按键处理和算法模块式相互分离的,提高了代码的完整性、可移植性。
图5
二、游戏有关算法概述
2.1多线程处理
在整个游戏中涉及到了并发的问题,即用户事件的处理和游戏逻辑的处理是同步执行的,这就使得必须采用多线程来进行处理,我们在设计游戏时充分考虑到了这种情况,采用双线程的方式来控制整个游戏。
即主线程负责对用户按键事件的接收,而游戏线程则对游戏的逻辑进行了全方位的控制。
此外由于多线程,必然导致临界区的出现,在设计算法时注意到了这一情况,并用相应得方法加以了控制(图7)。
图6
图7(临界区处理)
2.2多缓冲控制
整个游戏是大部分是采用贴图的方式完成对整个界面的绘制,在整个游戏中有很多纷繁复杂的绘制工作要做,且这些绘制都是异时发生的,这就提出了一个问题如果频繁的对界面进行绘制必会导致屏幕的闪动,使整个游戏陷入一个混乱的局面,为解决这一难题,采用的缓冲控制机制,即先将要绘制的图形画到一张缓冲上,在每次游戏一个大循环结束之后再进行对游戏界面的绘制工作,这样保证了每次绘制时间间隔的平均性,又不会因为频繁的刷新屏幕而是整个屏幕闪动(图8)。
图(8)
但是,这么处理并能完全解决游戏的流畅性,由于游戏的特殊性,如果每次对每种物体都进行重绘将导致效率的低下,更糟的是,对于静止玻璃球的绘制是采用了每个球绘制的方式,使得每次都要进行一个O(n2)的绘制,这就使得开销极大,并且随着球数的增加这种状况会越加严重,游戏速度会变得越来越慢,以致到玩家不能忍受的地步。
为此程序设计者对算法作了极大的调整。
设计者观察到,整张画面不动的元素居多,尤其是那个二维的静止球在消去以前始终是静止不动的,所以在“selectblock”状态时将界面绘制到另一张缓冲中,既保存了静态的界面,并在“downslow”和“downfast”状态时直接利用这张缓冲进行绘制静态的画面,这就避免了绘制二维玻璃球O(n2)算法的频繁出现,大大的提高了效率。
(图9、图10)
图(9)
图(10)
2.3游戏核心算法
在对游戏的主要算法的描述上,介绍在游戏中非常关键的算法。
判断消层的算法,首先对于每一个玻璃球,采用了如下的数据结构进行控制。
其中curObjectId表示当前玻璃球采用图片索引,而backColorId则表示当有道具存在时道具的图片索引,且该数据结构还定义了当前块所处的状态。
publicclassGameObject:
IObjectChange
{
publicGameObject(intobjId)
{
curObjectId=objId;
backColorId=curObjectId;
curObjectState=GameObject.ObjectState.Idle;
}
///
///在picturesImage中的index
///
privateintcurObjectId;
///
///道具的背景颜色,仅当isColorRelated==true时有效
///
protectedintbackColorId;
///
///当前所画的图形在picturesImage中的index
///
privateintcurFrameIndex;
///
///Down下落状态
///
publicenumObjectState
{
Down=0,
Clearing,
Idle,
Cleared
}
}
在用户手册中可以看到游戏的消层规则,实际上玩家遇到的消层状况完全是由于这个算法所导致的,当一个新的块掉下来后,算法会去扫描所有的玻璃块,对于被扫描到的每一块都进行是否可消的判断,即是否横向、纵向、斜向有没有连续的三个球所对应得curObjectId有没有相同的如果有一组相同即可消(图11)
图11
三、游戏程序评价
3.1自我评价
在架构方面突破了原来游戏设计的思想,在前人的基础上提出了自己独创的一套游戏架构,并在实践中的到了肯定,这种设计思想使的代码的模块化非常的清晰,使得程序的修改和添加变得相当简单,且不会破坏整个架构。
最明显例子是,在遇到绘制静止玻璃球时出现效率低下,由于架构的优越性使得修改算法不会去破坏其他模块的代码,用相当小的代价完成了算法的替换。
在算法方面,程序设计者尽量采用了一些高效的算法,比如:
两次缓冲的应用,尤其是第二次缓冲的应用是整个游戏的质量大大的提高了。
另外,在代码质量上体现了两位programmer是富有经验的程序设计者,在代码的关键地方作者用了大量的注释加以了说明,使得源代码更加富有可读性。
总体来说,整个project从代码构架到算法使用都尽量朝着,程序高效、易维护、可读性好,这几个方面发展的,充分挖掘了作者的技术。
四、设计总结
通过此次课程设计,使我更加扎实的掌握了有关SMARTPNONE游戏架构设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。
实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
过而能改,善莫大焉。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。
最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。
在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!
课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。
同时,设计让我感触很深。
使我对抽象的理论有了具体的认识。
我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在实验课上,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我们的将来也有很大的帮助。
以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。
果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
附录一应用资料与参考文献目录
[1]《C#入门经典》
KarliWatson等编写,2003.12月。
清华大学出版社ISBN7-302-05333-2
[2]《VisualC++网络游戏建模与实现》
苏羽等编写,2003.6月。
北京科海电子出版社ISBN7-900107-97-5
[3]《C#技术揭秘》
TomArcher,AndrewWhitechapel编写2003.7月。
机械工业出版社ISBN7-111-12257-7
[4]《使用Microsoft.NET框架精简版编写移动游戏》
RaviKrishnaswamy编写2004.8月《msdn开发精选》
[5]《使用.NET框架精简版开发Smartphone应用程序》
ChristianForsberg编写