📄 34
字号:
if (cNBlock) {
mouseGoahead(cNBlock); /* 前进cNBlock步 */
}
cNBlock = 0; /* 任务清零 */
/*
* 控制电脑鼠转弯
*/
switch (cDirTemp) {
case 1:
mouseTurnright();
break;
case 2:
mouseTurnback();
break;
case 3:
mouseTurnleft();
break;
default:
break;
}
}
/*
* 判断任务是否完成,否则继续前进
*/
if (cNBlock) {
mouseGoahead(cNBlock);
}
}
/*********************************************************************************************************
** Function name: mazeBlockDataGet
** Descriptions: 根据电脑鼠的相对方向,取出该方向上迷宫格的墙壁资料
** input parameters: ucDir: 电脑鼠的相对方向
** output parameters: 无
** Returned value: GucMapBlock[cX][cY] : 墙壁资料
*********************************************************************************************************/
uint8 mazeBlockDataGet (uint8 ucDirTemp)
{
int8 cX = 0,cY = 0;
/*
* 把电脑鼠的相对方向转换为绝对方向
*/
switch (ucDirTemp) {
case MOUSEFRONT:
ucDirTemp = GucMouseDir;
break;
case MOUSELEFT:
ucDirTemp = (GucMouseDir + 3) % 4;
break;
case MOUSERIGHT:
ucDirTemp = (GucMouseDir + 1) % 4;
break;
default:
break;
}
/*
* 根据绝对方向计算该方向上相邻格的坐标
*/
switch (ucDirTemp) {
case 0:
cX = GmcMouse.cX;
cY = GmcMouse.cY + 1;
break;
case 1:
cX = GmcMouse.cX + 1;
cY = GmcMouse.cY;
break;
case 2:
cX = GmcMouse.cX;
cY = GmcMouse.cY - 1;
break;
case 3:
cX = GmcMouse.cX - 1;
cY = GmcMouse.cY;
break;
default:
break;
}
return(GucMapBlock[cX][cY]); /* 返回迷宫格上的资料 */
}
/*********************************************************************************************************
** Function name: rightMethod
** Descriptions: 右手法则,优先向右前进
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void rightMethod (void)
{
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_R) && /* 电脑鼠的右边有路 */
(mazeBlockDataGet(MOUSERIGHT) == 0x00)) { /* 电脑鼠的右边没有走过 */
mouseTurnright(); /* 电脑鼠右转 */
return;
}
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_F) && /* 电脑鼠的前方有路 */
(mazeBlockDataGet(MOUSEFRONT) == 0x00)) { /* 电脑鼠的前方没有走过 */
return; /* 电脑鼠不用转弯 */
}
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_L) && /* 电脑鼠的左边有路 */
(mazeBlockDataGet(MOUSELEFT ) == 0x00)) { /* 电脑鼠的左边没有走过 */
mouseTurnleft(); /* 电脑鼠左转 */
return;
}
}
/*********************************************************************************************************
** Function name: leftMethod
** Descriptions: 左手法则,优先向左运动
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void leftMethod (void)
{
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_L) && /* 电脑鼠的左边有路 */
(mazeBlockDataGet(MOUSELEFT ) == 0x00)) { /* 电脑鼠的左边没有走过 */
mouseTurnleft(); /* 电脑鼠左转 */
return;
}
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_F) && /* 电脑鼠的前方有路 */
(mazeBlockDataGet(MOUSEFRONT) == 0x00)) { /* 电脑鼠的前方没有走过 */
return; /* 电脑鼠不用转弯 */
}
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_R) && /* 电脑鼠的右边有路 */
(mazeBlockDataGet(MOUSERIGHT) == 0x00)) { /* 电脑鼠的右边没有走过 */
mouseTurnright(); /* 电脑鼠右转 */
return;
}
}
/*********************************************************************************************************
** Function name: frontRightMethod
** Descriptions: 中右法则,优先向前运行,其次向右
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void frontRightMethod (void)
{
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_F) && /* 电脑鼠的前方有路 */
(mazeBlockDataGet(MOUSEFRONT) == 0x00)) { /* 电脑鼠的前方没有走过 */
return; /* 电脑鼠不用转弯 */
}
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_R) && /* 电脑鼠的右边有路 */
(mazeBlockDataGet(MOUSERIGHT) == 0x00)) { /* 电脑鼠的右边没有走过 */
mouseTurnright(); /* 电脑鼠右转 */
return;
}
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_L) && /* 电脑鼠的左边有路 */
(mazeBlockDataGet(MOUSELEFT ) == 0x00)) { /* 电脑鼠的左边没有走过 */
mouseTurnleft(); /* 电脑鼠左转 */
return;
}
}
/*********************************************************************************************************
** Function name: frontLeftMethod
** Descriptions: 中左法则,优先向前运行,其次向左
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void frontLeftMethod (void)
{
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_F) && /* 电脑鼠的前方有路 */
(mazeBlockDataGet(MOUSEFRONT) == 0x00)) { /* 电脑鼠的前方没有走过 */
return; /* 电脑鼠不用转弯 */
}
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_L) && /* 电脑鼠的左边有路 */
(mazeBlockDataGet(MOUSELEFT ) == 0x00)) { /* 电脑鼠的左边没有走过 */
mouseTurnleft(); /* 电脑鼠左转 */
return;
}
if ((GucMapBlock[GmcMouse.cX][GmcMouse.cY] & MOUSEWAY_R) && /* 电脑鼠的右边有路 */
(mazeBlockDataGet(MOUSERIGHT) == 0x00)) { /* 电脑鼠的右边没有走过 */
mouseTurnright(); /* 电脑鼠右转 */
return;
}
}
/*********************************************************************************************************
** Function name: centralMethod
** Descriptions: 中心法则,根据电脑鼠目前在迷宫中所处的位置觉定使用何种搜索法则
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void centralMethod (void)
{
if (GmcMouse.cX & 0x08) {
if (GmcMouse.cY & 0x08) {
/*
* 此时电脑鼠在迷宫的右上角
*/
switch (GucMouseDir) {
case UP: /* 当前电脑鼠向上 */
leftMethod(); /* 左手法则 */
break;
case RIGHT: /* 当前电脑鼠向右 */
rightMethod(); /* 右手法则 */
break;
case DOWN: /* 当前电脑鼠向下 */
frontRightMethod(); /* 中右法则 */
break;
case LEFT: /* 当前电脑鼠向左 */
frontLeftMethod(); /* 中左法则 */
break;
default:
break;
}
} else {
/*
* 此时电脑鼠在迷宫的右下角
*/
switch (GucMouseDir) {
case UP: /* 当前电脑鼠向上 */
frontLeftMethod(); /* 中左法则 */
break;
case RIGHT: /* 当前电脑鼠向右 */
leftMethod(); /* 左手法则 */
break;
case DOWN: /* 当前电脑鼠向下 */
rightMethod(); /* 右手法则 */
break;
case LEFT: /* 当前电脑鼠向左 */
frontRightMethod(); /* 中右法则 */
break;
default:
break;
}
}
} else {
if (GmcMouse.cY & 0x08) {
/*
* 此时电脑鼠在迷宫的左上角
*/
switch (GucMouseDir) {
case UP: /* 当前电脑鼠向上 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -