Wince课程设计疯狂玻璃球.docx
- 文档编号:8984851
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:11
- 大小:152.08KB
Wince课程设计疯狂玻璃球.docx
《Wince课程设计疯狂玻璃球.docx》由会员分享,可在线阅读,更多相关《Wince课程设计疯狂玻璃球.docx(11页珍藏版)》请在冰豆网上搜索。
Wince课程设计疯狂玻璃球
WINCE课程设计报告
题目:
疯狂玻璃球
目录
一、游戏设计架构概述
1.1游戏总体设计思想3
1.2用户界面模块3
1.3逻辑处理模块5
二、游戏有关算法概述6
2.1多线程处理6
2.2多缓冲控制8
2.3游戏核心算法9
三、游戏程序评价11
3.1自我评价11
附录一应用资料与参考文献目录12
游戏设计架构概述
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从代码构架到算法使用都尽量朝着,程序高效、易维护、可读性好,这几个方面发展的,充分挖掘了作者的技术。
附录一应用资料与参考文献目录
[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编写
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Wince 课程设计 疯狂 玻璃球