走迷宫程序(含自动迷宫生成)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++)

{

相关文档
最新文档