8.1.3 选择音效
在游戏中执行下列操作时需要提供音效:
● 当一对新的宝石出现在游戏区域的顶部时。
● 当形成了一组宝石并被消除时。每当可以一次性消除多组宝石时,每消除一组新
的宝石就使用渐高的音效,表示这样可以得到更多的分值。渐高的音调也会使玩家对他的游戏成果感到愉悦。
● 当彩虹宝石落地时。
● 当游戏结束时。
除了音效之外,我们还将提供背景音乐,所有的游戏音频都将使用BASS来提供。
8.1.4 游戏的最低配置
该游戏将不设任何最低系统要求,从QVGA屏幕到WVGA屏幕,以及采用Windows Mobile 2003 SE以上的手机都适用。
我们要提供两种不同的图形集,一种用于较低分辨率的屏幕(QVGA);另一种用于较高分辨率的屏幕(VGA)。游戏会自动检测屏幕的分辨率而选择使用哪套图形集。如果游戏在VGA屏幕上采用横屏模式,那么它也将采用小图形集合。
当屏幕的垂直高度大于其宽度时,我们将使用屏幕的高度来判断显示哪套图形集。在运行Windows Mobile 6的QVGA屏幕上,游戏窗体的高度为268像素,由游戏的ClientSize.Height属性返回。由于需要在该区域中显示15行,所以将268除以15,结果为每行占17.86像素。但是,还要为分值的显示、游戏区域的边框等留出一点位置,所以我们将每行所占的空间设置为16像素。因此小宝石图形高度应该为16像素。
对于较大的大图形,VGA屏幕的ClientSize.Height属性返回536,除以15得到每行的高度为35.73像素。为了简化创建图形的工作,我们将它的高度降低为32像素,正好是小图形高度的2倍。
为了选择使用哪套图形集,只需要看屏幕的高度是否小于480像素。如果是,则要么是运行于QVGA模式的竖屏手机,要么是VGA模式的横屏手机。如果屏幕高度是480像素或更大,那就有足够的空间来使用大图形集。
我们可以通过Screen.PrimaryScreen.Bounds.Height属性来判断屏幕的大小。它返回的是屏幕的实际高度,包含了通知栏及菜单栏所占用的空间。如果屏幕在竖屏和横屏之间进行切换,该属性值会进行更新来返回新的屏幕高度。
8.2 编写游戏
游戏设计方案已经完成了,接下来我们开始编写代码。该游戏完整的源代码包含在本书配套下载代码GemDrops项目中,您可以在Visual Studio中打开该项目查看这里所介绍的任何代码上的细节。本节主要介绍GemDrops游戏是如何创建的。
构建一个完整的游戏就会涉及大量的对同一个代码片段的迭代修改。因此,我们需要逐步来构建该项目。当我们查看游戏中的每一段代码时,您可能会注意到完成了的代码中包含了一些我们开始时没有提到的额外功能。我们会回过头来看整个过程中每一个要点,所以当您看到它们时不要担心我们会将它们忽略掉。
在接下来的各节描述中我不准备手把手地指导您如何重新创建该项目,所以不要遵循这些内容来从头构建游戏。但它们详细地阐明了创建游戏时所要经历的一些过程,并引导您纵览各个步骤,而这些都是在创建自己的游戏时所需要的。在接下来的各个部分中没有绝对地包含所有的游戏代码,因为其中有很多代码您已经在前面的章节中看到过了。我们会将焦点放在游戏中所有重要的组件上,并介绍如何将它们构造成一个最终的游戏。
8.2.1 创建项目
首先,创建一个名为GemDrops的Windows移动应用程序项目。在Visual Studio中保持该项目为打开状态,然后将游戏引擎项目添加到解决方案中,并为GemDrops添加对游戏引擎的引用。
在开始时,GemDrops项目只包含一个默认窗体Form1。我们需要为项目添加一些新类:一个代表显示在屏幕上的宝石的游戏对象类和一个代表游戏本身的游戏对象类。因此,要在项目中添加两个类:一个是CObjGem类,它继承自GameEngine.CGameObjectGDIBase类;另一个是CGemDropsGame类,它继承自GameEngine.CGameEngine.GDIBase类。
我们将在接下来的各节中介绍这些类,并为它们添加代码,现在让它们暂时为空。