Pocket PC 的泡泡






4.42/5 (9投票s)
一款为 PocketPC 设计的令人上瘾的游戏,包含完整的源代码。
引言
Bubbles 是一款为 Pocket PC 设计的棋盘游戏。游戏开始时,棋盘上布满了彩色的球(称为气泡)。可以将颜色相同的相邻气泡从棋盘上移除。您在一次行动中移除的气泡越多,您获得的积分就越多。当您清除整个棋盘时,您将获得额外积分。
Bubbles 是我尝试为 Pocket PC 创建 Windows CE 程序的第一个项目。它最初使用 MFC,但在项目早期就切换到了 ATL。该游戏展示了如何使用 ATL 创建具有小内存占用量的 Windows CE 程序。
红外线支持是 Windows CE 最吸引人的功能之一,因此我也想启用 IrDA 支持。可以使用 IrSockets 在 CE 设备(或 Windows 2000)之间传输高分。它相对容易使用,并且该项目包含一些包装类以启用 IrDA 套接字(非阻塞以避免锁定)。
在开发这款游戏的过程中,我注意到 CE 环境不如桌面 Win32 环境成熟。STL 和 WTL 均缺失。Pocket PC 的 ATL 不如其 Win32 对应物稳定。当您连续播放多个波形文件时,模拟器会锁定。

最烦人的错误在于 ATL 处理 WM_INITDIALOG
。由于代码中的一个非常小的错误,您被迫重写此方法(否则将不会调用 SHInitDialog
)。如果您想自己调用 SHInitDialog
,则需要重写该方法并假装您从未这样做过(否则 ATL 将使用它自己的参数集再次调用它)。非常烦人,我花了一段时间才意识到这是错误的。
大多数 Pocket PC 应用程序只允许一个实例。如果再次启动该应用程序,它会重新激活该应用程序的第一个实例。尽管 95% 的 Pocket PC 程序都需要此功能,但 API(或 ATL)中没有以简单方式实现此功能的任何支持。您需要注册自己的窗口类,当应用程序启动时,您需要查找该窗口类。如果它存在,则需要将该窗口置于前台以再次激活该应用程序。不幸的是,当您的主窗口不是您停用应用程序时的活动窗口时,这不起作用(即,屏幕上有一个对话框)。在这种情况下,将激活主窗口,这会引起一些问题。对话框的“确定”按钮不可见。对话框的 OnActivate
未被调用,因此 SIP(软输入面板)未被禁用,等等...
尽管存在这些问题,但此游戏可以作为您自己游戏的良好起点。游戏逻辑与 UI 分离,并且可以轻松重用高分、选项和关于屏幕。我开始使用此模板编写一个俄罗斯方块克隆游戏,我希望它也能对您有所帮助。