基于C语言在Linux下实现的走迷宫项目
一、Windows下获取方向键:
1、导入 #include <conio.h>
2、通过getch()的返回值获取键盘上的键值
上:72 下:80 左:75 右:77
二、Linux下获取方向键:
1、在Windows中把getch.h文件放入共享文件夹中
2、把getch.h放入C标准库默认路径中,在Linux终端输入
sudo cp /media/sf_Share/getch.h /usr/include/
3、给getch.h加读权限
sudo chmod +r /usr/include/getch.h
获取getch()的返回值
上:183 下:184 左:186 右:185
三、项目分析:
数据分析:
1、定义字符型的二维数组作为地图
2、定义记录角色位置变量
3、time(NULL) 获取1970-1-1 到现在过了多少秒
逻辑分析:
进入死循环
1、清理屏幕、显示地图
system
clear
2、判断是否到达出口
如果是:程序结束
3、获取方向键并处理
上:183 下:184 左:186 右:185
前方是墙 不需要处理
前方是路 ’ ’ 可以移动
①前方位置变成 ‘@’
②原来位置变成 ’ ’
③更新位置变量
代码的具体实现:
#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
#include <time.h>
int main(int argc,const char* argv[])
{
// 1、定义地图二维数组
char map[10][10] = {
{'#','#','#','#','#','#','#','#','#','#'},
{'#',' ','#','#','#','#','#','#','#','#'},
{'#','@','#','#',' ',' ',' ','#','#','#'},
{'#',' ','#','#',' ','#',' ','#','#','#'},
{'#',' ','#','#',' ','#',' ','#','#','#'},
{'#',' ','#','#',' ','#',' ',' ',' ','#'},
{'#',' ',' ',' ',' ','#','#','#',' ','#'},
{'#','#','#','#','#','#','#','#',' ',' '},
{'#','#','#','#','#','#','#','#','#','#'},
{'#','#','#','#','#','#','#','#','#','#'},
};
// 2、定义记录角色位置变量
int x = 2, y = 1;
// 3、记录开始时间
time_t start_time = time(NULL);
for(;;)
{
// 清理屏幕
system("clear");
// 显示地图
for(int i=0; i<10; i++)
{
for(int j=0; j<10; j++)
{
printf("%c ",map[i][j]);
}
printf("\n");
}
// 判断是否到达出口
if(7 == x && 9 == y)
{
printf("游戏胜利!总用时%lu秒\n",
time(NULL) - start_time);
return 0;
}
// 获取方向键并处理
switch(getch())
{
case 183:
if(' ' == map[x-1][y])
{
map[x-1][y] = '@';
map[x--][y] = ' ';
}
break;
case 184:
if(' ' == map[x+1][y])
{
map[x+1][y] = '@';
map[x++][y] = ' ';
}
break;
case 186:
if(' ' == map[x][y-1])
{
map[x][y-1] = '@';
map[x][y--] = ' ';
}
break;
case 185:
if(' ' == map[x][y+1])
{
map[x][y+1] = '@';
map[x][y++] = ' ';
}
break;
}
}
}