前言
很多人感觉迷宫实现比较难,自动寻路更是摸不着头脑,现在我们就从0开始实现一个手动实现迷宫的过程,认真理解后过几天我再总结一个AI自动寻路的迷宫算法供大家参考。
思路
首先为了使思路更加的清晰,我使用了一个9x9的数字矩阵代表迷宫,0代表有路-可以通过,1代表人物,2代表障碍-不能通过。
- 输入字符实现迷宫中人物移动(例如:w-向上走 a-向左走 s-向下走 d-向右走)
- 下面这段代码可以实现输入一个字符回车后,显示输入的字符。(第二个getchar()是为了消除回车,因为在c语言中回车也算一个字符,比如我输入w 回车,其实是2个字符。)
char ch = getchar();
getchar();
printf("%c\n", ch);
- 人物的移动其实就是交换数据,比如,现在我是 a[0][0] 输入d,也就是向右走1个单位,其实就是a[0][0] 与a[0][1] 交换数据。(现在不考虑障碍,对于二维数据,a[][],后边的[]代表同一行,前边的[]代表同一列)
- [重点]:那么如果现在我的位置是a[x][y]:
w-向上走 :a[x][y] 与a[x-1][y]交换位置,向上走一步,x的值减1
a-向左走: a[x][y] 与a[x][y-1]交换位置,向左走一步,y的值减1
s-向下走: a[x][y] 与a[x+1][y]交换位置,向下走一步,x的值加1
d-向右走: a[x][y] 与a[x][y+1]交换位置,向右走一步,y的值加1 - 如何检测输入的字符是wasd的哪一个字符? if switch都可以,我用的switch
int main(){
// 可以连续输入字符,进行移动
while (1)
{
move();
}
return 0;
}
void move(){
char ch = getchar();
getchar();
printf("%c\n", ch);
int temp = -1; //
switch (ch){
case 'w':
temp = a[x][y];
a[x][y] = a[x-1][y];
a[x-1][y] = temp;
x--;
break;
case 'a':
temp = a[x][y];
a[x][y] = a[x][y-1];
a[x][y-1] = temp;
y--;
break;
case 's':
temp = a[x