一、基本思路
1.建立8*8迷宫数组,使用0,1,2,3初始化,0,1,2,3分别表示墙、通道、入口、出口,使用地图贴图知识建立迷宫;
2.建立堆栈结构记录走过的方格编号,即走到某个方格就把该方格编号压入堆栈;若发现路不通,就把该编号出栈,栈顶元素表示
小球所在的方格编号;
3.根据迷宫数组中的值,在初始化函数中对每一格进行贴图,墙贴蓝色的,其余均为白色,找到迷宫入口,记录编号并压入堆栈,
record数组记录走过的棋格,将该编号对应的方格设为0;
4.到了MyPaint函数,根据编号确定小球的贴图坐标,把小球贴到对应方格;
5.根据小球编号判断其上、下、左、右是否能走,假设下能走,那就把下对应的编号压入堆栈,更新record及Nowpos和Prepos;
6.如果发现到了某一格走不动了,就退回到上一格,更新Nowpos和Prepos;
二、效果
三、代码如下
#include "stdafx.h"
#include <stack>
using namespace std;
const int rows = 8,cols = 8;
HINSTANCE hInst;
HBITMAP ball;
HDC hdc,mdc,bufdc;
HWND hWnd;
DWORD tPre,tNow;
char *str;//记录目前搜寻状态的字符串指针
int nowPos,prePos;//nowPos--小球目前位置的方格编号,小球贴图;prePos--小球之前位置的方格编号,以此编号白色覆盖小球贴图
bool find;//是否找到迷宫出口
stack<int> path;//建立int型堆栈path
//0,1,2,3代表墙、通道、入口和出口
int mapIndex[rows*cols] = { 0,2,0,0,0,0,0,0, //材1
0,1,0