文/潘家富
迷宫游戏是当今最为经典的一款益智类游戏。迷宫游戏简单,容易上手 ,极具创意 ,虽历经数年 ,仍相当受欢迎。通过随机生成迷宫地图,玩家从入口进入迷宫,探索前行。往往是选择一个路口,走着走着就到了死胡同,只能退回来,选择其它路口再试走。就这样,不断地折回,反复地寻找,最后才能找到出口,最后成功走出迷宫。此时此刻,玩家也从成功走出迷宫获得愉悦的心情,从而把工作生活中的压力释放掉。
本文利用Visual C++6.0实现了迷宫游戏的界面以及地图生成,A*算法实现了迷宫自动搜索,设计出了一个简洁的迷宫游戏平台。
Visual C++6.0编译器负责将C++源代码编译成汇编文件,转换为中间文件(obj文件),然后使用连接器将相关的中间文件连接在一起,生成可执行的二进制文件。其过程如下:
(1)源程序经过预处理后交给编译器。
(2)如果代码无误,编译器将代码生成编译程序,再生成若干个目标程序(obj文件)。
(3)链接器负责将目标程序进行连接,生成可执行的程序。常见Windows应用程序开发的过程如图1。
迷宫游戏结构图如图2。
(1)游戏界面:主要提供游戏平台,为玩家提供可视化的窗口。
(2)迷宫生成:生成各个难度迷宫地图。
(3)手动游戏:主要提供键盘消息响应,玩家可以通过键盘控制小球,移动小球至出口。
(4)自动游戏:主要提供当前迷宫地图的最佳路径,以动画的形式提供给玩家看。
2.4.1 游戏界面设计
通过CMazeGameDlg::BuildDC()类实现游戏界面。建立绘图设备,和调整窗口大小,设置迷宫绘图区大小,记录探险者的坐标,即所处迷宫位置,和创建DC设备环境,加载墙、路以及小球。迷宫游戏界面生成关键代码如下:
图1:VC6.0程序开发过程图
图2:迷宫游戏结构图
图3:迷宫运行效果图
通过CMazeGameDlg::MakeMaze()类实现迷宫地图的生成,其实现原理是:步骤1:初始设置迷宫所有路都为不可走通,即二维数组值都设置成1。步骤2:设置迷宫入口点(ENTRY,XENTRYY),出口点在(2*ROWX,2*COLY+1)。步骤3:探索一条通路出来行。如果到了行墙边,则沿着墙边打通墙。如果到了列墙边,则沿着墙边打通墙。产生一个随机运动的方向,并打通该方向的墙。如果没有运到出口位置(2*ROWX,2*COLY+1)则返回继续,否则进入下一步骤。步骤4:加入随机通路。生成迷宫地图的代码如下:
实际运行效果如图3。
2.4.2 模块功能设计
按键消息处理模块实现。通过CMazeGameDlg::OnKeyDown方法对键盘消息处理,对上下左右按键消息响应。其代码实现如下:
A*搜索实现模块实现。通过CMazeGameDlg::MazePath函数实现自动搜索,实现当前地图的最佳路径搜索,其主要实现代码如下:
利用Visual C++6.0实现了迷宫游戏的界面以及地图生成,A*算法实现了迷宫自动搜索,提供了一个简洁的游戏平台。由于时间和自身技术水平限制,迷宫游戏虽然完成,但还存在许多不够完善的地方,例如:游戏界面简单、功能不够完善,从自动搜索路径后回到手动游戏当中,就必须关掉游戏而重新开始。在以后工作中,会针对类似问题,继续努力,将迷宫游戏做的更完善。