走迷宫程序(含自动迷宫生成)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
迷宫程序。执行效果如下:
程序间有足够多的注释,就不多作介绍了。代码如下:
///////////////////////////////////////////////////
// 程序名称:迷宫游戏
// 编译环境:Visual C++ / 2010,EasyX 2011惊蛰版
// 作者:krissi>
// 最后修改:2011-3-12
//
#include <>
#include <>
#include <>
//////////////////////////////////////////////////////
// 定义全局变量
//
BYTE** g_imgMap = NULL; // 迷宫地图
SIZE g_szMap; // 迷宫地图的尺寸
IMAGE g_imgSight(360, 280); // 游戏的视野
RECT g_rtSight; // 游戏的视野的范
围
IMAGE g_imgItem(180, 20); // 地图元素
IMAGE g_imgGPS; // 迷你地图,用于显示游戏者在地图中的位置
POINT g_ptGPS; // 迷你地图的显示位置
SIZE g_szGPS; // 迷你地图的尺寸
POINT g_ptPlayer; // 游戏者的位置
// 枚举地图元素,兼做元素位置的 x 坐标
enum MAPITEM { MAP_WALL = 0, MAP_PLAYER = 20, MAP_GROUND = 40, MAP_MARKRED = 60, MAP_MARKGREEN = 80, MAP_MARKYELLOW = 100, MAP_ENTRANCE = 120, MAP_EXIT = 140, MAP_OUTSIDE = 160 };
// 枚举用户的控制命令
enum CMD { CMD_QUIT = 1, CMD_UP = 2, CMD_DOWN = 4, CMD_LEFT = 8, CMD_RIGHT = 16, CMD_MARKRED = 32, CMD_MARKGREEN = 64, CMD_MARKYELLOW = 128, CMD_CLEARMARK = 256 };
//////////////////////////////////////////////////////
// 函数声明
//
void Welcome();
// 绘制游戏界面
void InitImage(); // 初始化游戏图片
void InitGame();
// 初始化游戏数据
void GetMazeSize(); // 提示用户输入迷宫大小
void MakeMaze(int width, int height); // 生成迷宫:初始化(注:宽高必须是奇数)
void TravelMaze(int x, int y); // 生成迷宫:遍历 (x, y) 四周MAPITEM GetMazeItem(int x, int y); // 获取指定坐标的迷宫元素void Paint(); // 绘制视野范围内的迷宫
int GetCmd(int* c);
// 获取用户输入的命令
void DispatchCmd(int cmd); // 处理用户输入的命令
void OnUp();
// 向上移动
void OnLeft(); // 向左移动
void OnRight();
// 向右移动
void OnDown(); // 向下移动
void OnMark(MAPITEM value); // 在地图中做标记bool CheckWin();
// 检查是否到出口
bool Quit();
// 询问用户是否退出游戏
//////////////////////////////////////////////////////
// 函数定义
//
// 主程序
void main()
{
// 初始化
initgraph(640, 480); // 创建绘图窗口
srand((unsigned)time(NULL)); // 设置随机种子
// 显示主界面
Welcome();
// 初始化
InitImage();
InitGame();
// 游戏过程
int c;
while( !((GetCmd(&c) == CMD_QUIT) && Quit()) )
{
DispatchCmd(c);
Paint();
if (CheckWin())
break;
// 延时
Sleep(100);
}
// 清理迷宫地图占用的内存
for(int x = 0; x < + 2; x++)
delete[] g_imgMap[x];
delete [] g_imgMap;
// 关闭图形模式
closegraph();
}
// 绘制游戏界面
void Welcome()
{
// 绘制渐变色外框
for(int i=0; i<128; i++)
{