⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pushboxai.h

📁 基于CGX库的推箱子游戏. CGX库源码已在之前上传了.
💻 H
字号:
/*
 * CACIter:用于记录结点访问状态的辅助模板类。TNodeKey为唯一确定当前状态的哈希值类型,应当是一个struct。
 * 三种状态是:nsNone:无或不在结点访问状态表中;nsVisiting:正在访问;nsDead:已死亡
 */

#if !defined(AI__INCLUDED_)
#define AI__INCLUDED_


#include "stdafx.h"
#include "conio.h"
#include <map>
#include <vector>

/* 地图最大宽度和高度 */
#define MAXMAPWIDTH  40
#define MAXMAPHEIGHT 40
/* 假定最多有6个箱子 */
#define MAXBOXCOUNT  6

/* 地图上几种元素:空格表示空地,X表示阻挡物,?表示箱子移动的目的地,O表示箱子的起始位置,*表示人的起始位置 */
#define MAP_EMPTY ' '
#define MAP_BLOCK 'X'
#define MAP_HOLE '?' // target position
#define MAP_BOX  'O' // box start position(internal use)
#define MAP_MAN  '*' // man start position(internal use)

/* 当前状态。x,y为人的位置,boxx[],boxy[]为箱子的位置。假定最多有6个箱子 */
typedef struct
{
 // man pos
 char x, y;
 char boxx[MAXBOXCOUNT], boxy[MAXBOXCOUNT];
}_PushStatus;

typedef enum 
{
 trFailed, 
 trUnknown,
 trSuccess
}TryResult;

/* 工作类 */
class CPushBoxAI
{
public: 
 /* 记录当前工作路径的数组,记录最短成功路径的数组 */
 std::vector<_PushStatus> m_vStepLog, m_vSuccLog;
 /* 地图,其中不包含人和箱子 */
 char m_Map[MAXMAPWIDTH][MAXMAPHEIGHT];
 /* 地图宽高、箱子数量、最短成功路径 */
 int m_nWidth, m_nHeight, m_nBoxCount, m_nMinSteps;
 /* 初始化地图和初始状态 */
 void Init(_PushStatus& status);
 /* 尝试下一个方向。status是当前状态,level是下一个方向的深度(步数),dx,dy指出下一个方向 */
 TryResult TryDir(_PushStatus status, int level, int dx, int dy);
 /* 求解 */
 bool Execute(void);
 /* 打印当前状态下的地图 */
 void DumpMaze(_PushStatus status);
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -