65.9K
CodeProject 正在变化。 阅读更多。
Home

Lines.NET游戏

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.40/5 (37投票s)

2004年5月12日

CPOL

12分钟阅读

viewsIcon

103519

downloadIcon

1183

面向移动设备的Lines.NET逻辑游戏。

引言

Lines.NET是一款逻辑游戏,面向.NET Compact Framework平台,可在Windows CE.NET 4.0/4.1和Pocket PC 2002/2003操作系统上运行。

Appearance of Lines.NET game in Windows CE.NET emulator

图 1. Windows CE.NET模拟器中的Lines.NET游戏界面

游戏规则

Lines.NET是一款遵循传统“彩色线条”游戏规则的应用程序,专为在.NET Compact Framework环境下运行在移动设备上而设计。简要规则说明如下。

Appearance of Lines.NET game in Pocket PC 2002 emulator

图 2. Pocket PC 2002模拟器中的Lines.NET游戏界面

1. 游戏场地

彩色线条游戏在一个带有方形单元格的矩形板上进行。通常是一个9x9的方形棋盘。彩色球随机放置在棋盘上。传统上,游戏开始时有3个随机颜色的球(参见图3)。

玩家可以选择棋盘上的任何一个球,将其移动到自由位置,前提是该位置可以从当前球的位置到达。每次玩家移动一个球后,都会在棋盘上仍然为空的位置出现3个新球。新球的颜色从6种(在经典彩色线条游戏中)不同颜色中随机选择。

The traditional color lines playing field

图 3. 传统的彩色线条游戏场地

2. 球的移动

棋盘上的任何一个球都可以从其位置移动到任何空单元格。到达新位置的路径长度不限。球只能通过空单元格,并且只能在垂直和水平方向移动(参见图4)以到达其新位置。如果一个单元格被周围的占用其他球的单元格阻挡,则球不会移动到该空单元格。

玩家每次只能移动一个球,但移动的距离不限。每一步结束时,棋盘上会出现一组新球(通常是一组3个随机颜色的球)。

A ball can move only in horizontal and vertical directions

图 4. 球只能沿水平和垂直方向移动

3. 线条

当相同颜色的球组成长度为5或更长的直线时,该直线将从棋盘上移除,玩家将获得积分,并且一组新球的出现将被推迟到下次移动结束。要移除的线条可以是任何方向:水平、垂直甚至对角线。

如果最后一次移动同时完成了两条或多条交叉线,则所有这些线都将从游戏场地中移除。

4. 玩家目标

玩家的主要目标是获得最高分并进入游戏的“高分”列表。玩家的每一次移动都会获得1积分。如果玩家在上次移动中成功移除了5个球组成的直线,将额外获得5积分。如果玩家一次移除了超过5个球,每多一个球将以2的算术级数递增奖励2个额外积分。例如,

  • 6个球 -> 5积分(基础)+ 2积分(第一个额外球)= 7积分
  • 7个球 -> 5积分(基础)+ 2积分(第一个额外球)+ 4积分(第二个额外球)= 11积分
  • 8个球 -> 5积分(基础)+ 2积分(第一个额外球)+ 4积分(第二个额外球)+ 6积分(第三个额外球)= 17积分
  • 等等。

因此,玩家组合的线条越长,获得的积分越多,越接近主要目标。

但是玩家在构建长线条时要小心。虽然主要目标是获得最高分,但玩家的局部目标是不要让棋盘被球淹没,因为如果棋盘上没有地方出现新的球,游戏就会结束,也就没有机会增加分数了。因此,玩家应该尽量保持棋盘干净,并移除合理大小的线条。

特点

Lines.NET是一款“彩色线条”游戏,面向Microsoft® Pocket PC 2002/2003和Microsoft® Windows CE.NET 4.0/4.1操作系统的移动设备。Lines.NET的关键特性在此高亮显示。

  1. 支持安装了.NET Compact Framework的Microsoft® Pocket PC 2002/2003和Microsoft® Windows CE 4.0/4.1操作系统。
  2. 自动调整游戏棋盘大小,使其最佳地适应屏幕(运行Windows CE的设备通常比Pocket PC型号拥有更大的屏幕分辨率)。
  3. 为球的移动和从棋盘上移除球播放声音。
  4. 序列化玩家的高分。
  5. 存储玩家的偏好设置。
  6. 支持通过settings.xml进行增强配置,例如游戏棋盘大小、声音文件位置等(有关AppSettings类的更多详细信息,请参阅文档)。

安装

在开始安装过程之前,请确保您的移动设备已连接到PC,并通过ActiveSync软件建立了连接。如果您没有安装ActiveSync,请在此处获取最新版本:

http://www.microsoft.com/windowsmobile/resources/downloads/pocketpc/activesync37.mspx

1. .NET Compact Framework安装

下载最新发布的.NET Compact Framework可再发行组件包,运行安装过程,并按照安装过程中出现的进一步说明进行操作。您可以在以下链接找到.NET Compact Framework 1.0 SP2 Redistributable:

http://www.microsoft.com/downloads/details.aspx?familyid=359ea6da-fc5d-41cc-ac04-7bb50a134556

2. Lines.NET安装

您可以通过两种方式在您的移动设备上安装Lines.NET。

第一种方式是在您的PC上安装程序。只需运行Lines_NET_install.zip存档中的Lines_NET.exe文件,然后按照安装说明进行操作。您的移动设备必须连接到PC,并且ActiveSync必须已激活。请注意,如果您使用Lines_NET.exe安装应用程序,则不需要Lines_NET.CAB文件。

第二种方式是将Lines_NET.CAB文件(可以在Lines_NET_install.zip存档中找到)手动复制到您的移动设备,然后使用您的移动设备的文件浏览器找到已复制的Cabinet文件位置并直接从设备启动安装。

设计与实现

Lines.NET应用程序是按照经典的MVC(模型-视图-控制器)模式构建的。应用程序的所有类都分为4个命名空间。

1. Lines 命名空间

这是Lines.NET应用程序的根命名空间。它包含实现游戏中使用所有GUI窗体和对话框的类,包括MainForm类。MainForm类除了作为Lines.NET主窗体的表示并包含应用程序的主入口点外,还通过提供Model和View类之间的互通信来扮演控制器的角色。它负责处理来自双方的事件,并决定将它们重定向到何处。其他一些对话框,如InputBoxAboutBoxHiScoreForm也位于此命名空间。

此命名空间中唯一的外部类是AppSettings类,它保存当前运行的游戏设置,并在退出时使用Lines.Utils命名空间中的Properties类将其序列化到settings.xml文件,并在启动时从该文件中读取。此类为Lines.NET应用程序的所有属性提供静态getter和setter。

这些类仅为.NET Compact Framework编写,不能在.NET Framework环境中使用,除了AppSettings类。必须重写它们才能在.NET Framework环境中运行游戏。

2. Lines.Core 命名空间

此命名空间包含Present Lines.NET游戏核心功能的类。从MVC模式的角度来看,它由模型类组成,例如BallBoardGame等。包含在棋盘上查找最短路径和线条组合的游戏算法的类也放在这里。

这些类完全独立于.NET Compact Framework的特定功能,可以在.NET Framework环境中自由使用。

3. Lines.GUI 命名空间

此命名空间包含与Lines.Core命名空间中的类匹配的可视控件,用于在.NET Compact Framework环境中显示它们。例如,BallCtrl用于可视化Lines.Core命名空间中的Ball对象。注意:这些类具有一些Compact Framework的特定功能,需要进行调整才能在.NET Framework中正确使用。

4. Lines.Utils 命名空间

此命名空间包含一些有用的类,可以简化一些例行工作,但实际上不属于上述任何命名空间。其中一个类是用于在.NET Compact Framework环境中播放声音文件的类,该类是从http://www.gotdotnet.com/网站改编的( Sound.cs)。非常感谢他们的开发者分享了这段代码。

另一个可能对您自己的应用程序有用的类是Properties类,它提供了以XML格式写入和读取应用程序属性的功能。该类的关键特性是本地类型支持,因此您无需自己费心格式化/解析/将字符串转换为本地类型,反之亦然。

此命名空间中的PathHelper类也有助于查找和使用应用程序启动时所在的应用程序目录的位置。

更多详情请参阅Lines.NET API文档,您可以在下载区的源代码文件“doc”文件夹中找到。或者,您也可以阅读源代码中的C#注释,这些注释已反映在文档中。

.NET Compact Framework特定问题

在编写Lines.NET游戏时,我遇到了几个关于使用.NET Compact Framework的问题,有时不得不采用临时解决方案来解决它们,因为我找不到任何合适的解决方案。

其中第一个问题是操作系统检测。尽管.NET Compact Framework应用程序在Pocket PC 2002/2003和Windows CE.NET 4.0/4.1下的行为不同,但我无法在.NET Compact Framework下以编程方式检测我的应用程序当前正在运行的操作系统。Lines.NET使用配置文件来定义操作系统。但我确信一定有一种无需这种临时方法就能检测到的方法。

不同的行为的一个好例子是Pocket PC版本中SIP(软输入面板)的使用:为了让用户有机会填写表单,需要使用SIP面板。SIP面板和显示它的按钮仅在窗体上放置MainMenu对象时才出现。因此,即使对话框不需要上下文菜单,也必须放置一个虚拟的MainMenu对象,这在不需要SIP面板的Windows CE.NET操作系统中看起来很难看。

另一个不同之处是MainMenu本身,在Pocket PC 2002/2003下,它位于底部,而在Windows CE.NET下,它位于对话框的顶部,并且应该始终考虑其大小来在菜单下方放置GUI组件。我无法找到检测MainMenu对象高度的方法,因此再次不得不将此属性放入应用程序的配置文件中。

第二个主要问题是在使用线程和从非主线程创建对话框时暴露出来的。球的移动是在单独的线程中运行的。移动结束后,游戏场地会被检查是否有空间进行下一步,如果没有,则触发游戏结束事件。游戏结束事件的处理器会显示一个游戏结束对话框,并要求玩家输入姓名以保存记录。然后开始新游戏。这就是应该能正常工作的理想场景。然而,从副线程显示对话框后,会启动一个奇怪的未命名线程(调试应用程序时可以看到),这仅在已placed在显示对话框中的MainMenu时发生。当玩家尝试关闭应用程序时,此未命名线程的终止会导致.NET Compact Framework核心内部出现一些奇怪的运行时异常。这似乎是.NET Compact Framework的一个内部问题。为了摆脱这个问题,使用了看门狗定时器来确定游戏结束并从主线程显示游戏结束对话框。

在开发Lines.NET的过程中,还遇到了许多其他问题,并成功地解决了。

 Appearance of Lines.NET in real life on a SIMpad device

图 5. 真实生活中的Lines.NET在SIMpad设备上的外观

未来计划

尽管Lines.NET 1.1版本已经发布并包含了一整套期望的功能,但未来版本可能会增加更多功能,例如:

  1. 允许玩家通过友好的图形用户界面配置完整的游戏设置,而不是通过编辑settings.xml文件。
  2. 允许玩家通过增强Lines.GUI.Preferences类来配置颜色(球、棋盘、指示器等)和其他游戏外观设置。
  3. 实现上一步的撤销功能。

尽管仍有一些需要实现和改进的地方,但用户已经可以享受这款游戏了。

Lines.NET游戏已成功测试的设备列表

  1. Visual Studio.NET Pocket PC 2002设备模拟器(参见图2)。
  2. Visual Studio.NET Windows CE.NET 4.0设备模拟器(参见图1)。
  3. 安装了Windows CE.NET 4.1操作系统的西门子SIMpad(参见图5)。
  4. 安装了Pocket PC 2003操作系统的华硕MyPal A620。

有用链接

以下是对于任何开发.NET Compact Framework平台应用程序的人来说,肯定会有用的资源列表:

谢谢

非常感谢我的父亲,他热衷于玩“彩色线条”游戏,这鼓励我编写了这个应用程序。Lines.NET游戏献给我的爸爸。这是我送给他的生日礼物,还有您在图5中看到的SIMpad设备。他是“彩色线条”游戏的超级粉丝,尽管他总是没有机会在他想玩的时候玩。

我花了一段时间才完成我的礼物,但现在我很高兴我的父亲可以享受它了!

© . All rights reserved.