配置文件
1、在windows中把getch.h放入共享文件夹
getch.h内容:
#ifndef GETCH_H
#define GETCH_H
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
// 修改终端的控制方式,1取消回显、确认 2获取数据 3还原
static int getch(void)
{
// 记录终端的配置信息
struct termios old;
// 获取终端的配置信息
tcgetattr(STDIN_FILENO,&old);
// 设置新的终端配置
struct termios new = old;
// 取消确认、回显
new.c_lflag &= ~(ICANON|ECHO);
// 设置终端配置信息
tcsetattr(STDIN_FILENO,TCSANOW,&new);
// 在新模式下获取数据
int key_val = 0;
do{
key_val += getchar();
}while(stdin->_IO_read_end - stdin->_IO_read_ptr);
// 还原配置信息
tcsetattr(STDIN_FILENO,TCSANOW,&old);
return key_val;
}
#endif//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()函数获取键值
Ubuntu下的键值:
上:183 下:184 左:186 右:185
案例1、走迷宫:
数据分析:
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 time_0=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('@'==maze[7][9])
{
printf("游戏胜利!用时%ld秒",time(NULL)-time_0);
break;
}
//获取方向键并处理
switch(getch())
{
case 183: //向上
if(' '== maze[man_x-1][man_y])
{
maze[man_x][man_y]=' ';
/* maze[man_x-1][man_y]='@';
man_x--;*/
maze[--man_x][man_y]='@';
}
break;
case 184: //向下
if(' '== maze[man_x+1][man_y])
{
maze[man_x][man_y]=' ';
/* maze[man_x+1][man_y]='@';
man_x++;*/
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-1]='@';
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+1]='@';
man_x++;*/
maze[man_x][++man_y]='@';
}
break;
}
}
}