首先要玩这个游戏得先获取键盘的键值,从而判定方向
获取方向键的功能:使用头文件 getch.h 中的gech函数
代码如下:
#ifndef GETCH_H
#define GETCH_H
#include <termios.h>
#include <unistd.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
建立好头文件后由电脑到虚拟的LINUX环境步骤如下:
1、在windows中把getch.h头文件放入共享文件夹
2、终端进入贡献文件夹:
cd /media/sf_Share
3、复制头文件到共享库
sudo cp getch.h /usr/include/
4、加读取权限:
sudo chmod +r /usr/include/gerch.h
分别测试一下上下左右的键值
#include <stdio.h>
#include<getch.h>
int main(int argc,const char*argv[])
{
for(int i=0;i<4;i++)
printf("%d ",getch());
}
得到的方向以及键值如下:
上:183 下:184 右:185 左:186
再大致分析一下代码的整体轮廓
1.确定各种对应关系,墙体、路等用什么表示
2.画好地图
3.移动规则
4.判定规则
准备好这些就可以写代码啦
1.首先分析一下情况
推箱子游戏由路、墙、人、箱子以及目标组成
所以可以考虑用不同的数字代表这些情景,结合二维数组构成基本的地图
我这里的设定如下:分别用数字0、1、 2、 3、 4代表路、墙、人、箱子以及目标
2.地图定义如下:
int arry[8][8]={
{
1,1,1,1,1,1,1,1},
{
1,1,1,4,4,1,1,1},
{
1,1,1,0,4,1,1,1},
{
1,1,0,0,3,4,1,1},
{
1,1,0,3,0,0,1,1},
{
1,0,0,1,3,3,0,1},
{
1,2,0,0,0,0,0,1},
{
1,1,1,1,1<