1、在Windows中把getch.h放入共享文件夹
2、在Ubuntu终端输入cd /media/sf_Share/ 进入共享文件夹
3、复制getch.h到C标准库中
sudo cp getch.h /usr/include/
4、加读权限
sudo chmod +r /usr/include/getch.h
5、导入getch.h头文件,使用getch.h()函数获取键值
Ubuntu下的键值:
上:183 下:184 左:186 右:185
走迷宫:
数据分析 :
1、定义二维字符数组作为迷宫地图
2、定义变量记录角色当前位置 x y
3、时间:time(NULL)获取1970-1-1到达运行时
过了总秒数
逻辑分析:
进入死循环:
1、显示地图
2、获取方向键并处理
判断前方是不是路’ ’
如果是:
1、把旧位置变成’ ’
2、把新位置变成’@’
3、更新角色位置坐标 x y
3、判断是否到达出口
如果是:程序结束
#include <stdio.h>
#include <getch.h>
#include <stdlib.h>
#include <time.h>
int main(int argc,const char* argv[])
{
char maze[10][10]={
{‘#’,‘#’,‘#’,‘#’,‘#’,‘#’,‘#’,‘#’,‘#’,‘#’},
{‘#’,’ ‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘},
{’#‘,’@‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘},
{’#‘,’ ‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘},
{’#‘,’ ‘,’#‘,’#‘,’#‘,’ ‘,’ ‘,’ ‘,’#‘,’#‘},
{’#‘,’ ‘,’#‘,’#‘,’#‘,’ ‘,’#‘,’ ‘,’#‘,’#‘},
{’#‘,’ ‘,’#‘,’#‘,’#‘,’ ‘,’#‘,’ ‘,’ ‘,’ ‘},
{’#‘,’ ‘,’#‘,’#‘,’#‘,’ ‘,’#‘,’#‘,’#‘,’#‘},
{’#‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’#‘,’#‘,’#‘,’#‘},
{’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘,’#‘},
};
// 记录角色位置
char man_x=2,man_y=1;
time_t seconds1=time(NULL);
for(;😉
{
//清理屏幕
system(“clear”);
//显示地图
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
printf(“%c “,maze[i][j]);
}
printf(”\n”);
}
//判断是否到达出口
if(6man_x&&9man_y)
{printf(“游戏胜利,过了%lu秒!\n”,time(NULL)-seconds1);
return 0;
}
//获取方向键
switch(getch())
{
case 183://向上
if(’ ‘==maze[man_x-1][man_y])
{
maze[man_x][man_y]=’ ‘;
maze[–man_x][man_y]=’@‘;
}
break;
case 184://向下
if(’ ‘==maze[man_x+1][man_y])
{
maze[man_x][man_y]=’ ‘;
maze[++man_x][man_y]=’@‘;
}
break;
case 186://左
if(’ ‘==maze[man_x][man_y-1])
{
maze[man_x][man_y]=’ ‘;
maze[man_x][–man_y]=’@‘;
}
break;
case 185://右
if(’ ‘==maze[man_x][man_y+1])
{
maze[man_x][man_y]=’ ‘;
maze[man_x][++man_y]=’@';
}
break;
}
}
}
推箱子:
数据分析:
1、确定数值与字符的对应关系
0 ’ ’
1 ‘@’
2 ‘#’
3 ‘
′
4
′
o
′
5
′
@
′
7
′
' 4 'o' 5 '@' 7 '
′4′o′5′@′7′’
2、定义8*8整数地图并初始化
3、定义记录角色位置的变量 x y
4、定义记录步数的变量
逻辑分析:
进入死循环:
1、清理屏幕、显示地图
if(0==map[i][j]) printf(" ");
2、判断是否游戏胜利
3、获取方向键并处理
1、前面是路/目标点,参考走迷宫
前方 +1
原位置 -1
更新坐标
2、前方是箱子
箱子的前方是路\目标点
人前方的前方 +3
人前方 -3+1
人原位置 -1
更新坐标
#include <stdio.h>
#include <getch.h>
#include <stdlib.h>
int main(int argc,const char* argv[])
{
int map[8][8]={
{0,0,2,2,2,2,0,0},
{0,0,2,4,4,2,0,0},
{0,2,2,0,4,2,2,0},
{0,2,0,0,3,4,2,0},
{2,2,0,3,0,0,2,2},
{2,0,0,2,3,3,0,2},
{2,0,0,1,0,0,0,2},
{2,2,2,2,2,2,2,2}
};
int count=0;
int steps=0;
char man_x=6,man_y=3;
for(;😉
{
count=0;
system(“clear”);
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(0map[i][j])
printf(" ");
if(1map[i][j])
printf(“@”);
if(2map[i][j])
printf(“#”);
if(3map[i][j])
printf(“KaTeX parse error: Expected '}', got 'EOF' at end of input: … printf("”);
}
}
printf(“\n”);
}
if(count==4)
{
printf("游戏胜利");
printf("步数%d:\n",steps);
return 0;
}
switch(getch())
{
case 183:
if(0==map[man_x-1][man_y]||4==map[man_x-1][man_y])
{
map[man_x][man_y]-=1;
map[--man_x][man_y]+=1;
}
else if(3==map[man_x-1][man_y]||7==map[man_x-1][man_y])
{
if(0==map[man_x-2][man_y]||4==map[man_x-2][man_y])
{
map[man_x][man_y]-=1;
map[man_x-2][man_y]+=3;
map[--man_x][man_y]-=2;
}
}
steps++;
break;
case 184:
if(0==map[man_x+1][man_y]||4==map[man_x+1][man_y])
{
map[man_x][man_y]-=1;
map[++man_x][man_y]+=1;
}
else if(3==map[man_x+1][man_y]||7==map[man_x+1][man_y])
{
if(0==map[man_x+2][man_y]||4==map[man_x+2][man_y])
{
map[man_x][man_y]-=1;
map[man_x+2][man_y]+=3;
map[++man_x][man_y]-=2;
}
}
steps++;
break;
case 186:
if(0==map[man_x][man_y-1]||4==map[man_x][man_y-1])
{
map[man_x][man_y]-=1;
map[man_x][--man_y]+=1;
}
else if(3==map[man_x][man_y-1]||7==map[man_x][man_y-1])
{
if(0==map[man_x][man_y-2]||4==map[man_x][man_y-2])
{map[man_x][man_y]-=1;
map[man_x][man_y-2]+=3;
map[man_x][--man_y]-=2;
}
}
steps++;
break;
case 185:
if(0==map[man_x][man_y+1]||4==map[man_x][man_y+1])
{
map[man_x][man_y]-=1;
map[man_x][++man_y]+=1;
}
else if(3==map[man_x][man_y+1]||7==map[man_x][man_y+1])
{
if(0==map[man_x][man_y+2]||4==map[man_x][man_y+2])
{
map[man_x][man_y]-=1;
map[man_x][man_y+2]+=3;
map[man_x][++man_y]-=2;
}
}
steps++;
break;
}
}
}