“智能算法”如下:
char clever(int Hx, int Hy, int Fx, int Fy)
{
int i;
int min = 9998,p=0;
if (map[Hy][Hx - 1] != BLANK_CELL && map[Hy][Hx - 1] != SNAKE_FOOD)
distance[0] = 9999;
else
distance[0] = abs(Fx - (Hx - 1)) + abs(Fy - Hy);
if (map[Hy - 1][Hx] != BLANK_CELL && map[Hy - 1][Hx] != SNAKE_FOOD)
distance[1] = 9999;
else
distance[1] = abs(Fx - Hx) + abs(Fy - (Hy - 1));
if (map[Hy + 1][Hx] != BLANK_CELL && map[Hy + 1][Hx] != SNAKE_FOOD)
distance[2] = 9999;
else
distance[2] = abs(Fx - Hx) + abs(Fy - (Hy + 1));
if (map[Hy][Hx + 1] != BLANK_CELL && map[Hy][Hx + 1] != SNAKE_FOOD)
distance[3] = 9999;
else
distance[3] = abs(Fx - (Hx + 1)) + abs(Fy - Hy);
for (i = 0; i < 4; i++)
{
if (min > distance[i])
{
min = distance[i];
p = i;
}
}
return movable[p];
}
將上面這個簡單的“智能算法”替換原來用按鍵操作的算法部分就可以了。
原來的鍵盤控制代碼如下:
while (1)
{
a[0] = snake->x[0];
a[1] = snake->y[0];
j = 0;
if (_kbhit())
{
ch = _getch();
if (_kbhit())
{
Sleep(20);
j = 1;
}
}
switch (ch)
{
case 72:
{
movement(hOut, snake);
snake->y[snake->length - 1] -= 1; //上
break;
}
case 80:
{
movement(hOut, snake);
snake->y[snake->length - 1] += 1; //下
break;
}
case 75:
{
movement(hOut, snake);
snake->x[snake->length - 1] -= 2; //左
break;
}
case 77:
{
movement(hOut, snake);
snake->x[snake->length - 1] += 2; //右
break;
}
}
不過這個“智能算法”還很傻,還是借鑑了別人的經驗下弄出來的,所以智能蛇勉強還算智能吧