走迷宫:
1、定义一个二维数组作为迷宫
2、定义老鼠的坐标
3、获取游戏开始时的时间time(NULL)
4、进入循环
1、system 清理屏幕
2、显示迷宫(遍历二维数组)
3、检查是否走出迷宫
获取游戏结束时的时间:计算出共花费多少时间
time(NULL)
是:结束程序
4、获取方向键并处理
判断接下来要走的位置是否有路
1、把新位置赋值为老鼠’@’
2、把旧位置赋值为路 ’ ’
3、把记录老鼠的坐标更新
推箱子:
1、定义角色与数值的关系:
路: 0 ’ ’
角色: 2 ‘@’
墙壁: 3 ‘#’
箱子: 4 ‘
′
目
标
点
:
5
′
∗
′
有
人
的
目
标
点
:
7
′
@
′
有
箱
子
的
目
标
点
:
9
′
' 目标点:5 '*' 有人的目标点: 7 '@' 有箱子的目标点:9 '
′目标点:5′∗′有人的目标点:7′@′有箱子的目标点:9′’
case 0:printf(" “);break;
case 2:printf(”@ “);break;
case 3:printf(”# “);break;
case 4:printf(”$ “);break;
case 5:printf(”* “);break;
case 7:printf(”@ “);break;
case 9:printf(”$ ");break;
2、定义地图
char map[8][8] = {
{0,0,3,3,3,3,0,0},
{0,0,3,5,5,3,0,0},
{0,3,3,0,5,3,3,0},
{0,3,0,0,4,5,3,0},
{3,3,0,4,0,0,3,3},
{3,0,0,3,4,4,0,3},
{3,0,0,2,0,0,0,3},
{3,3,3,3,3,3,3,3},
};
3、定义记录小人的位置坐标的变量
3、记录步数
4、进入循环
1、刷新屏幕
2、显示地图
3、检查是否胜利:判断数组中9的个数,把步数显示
4、获取方向键并处理
1:路
2:墙壁
3:箱子
箱子前面:路
箱子前面:墙
箱子前面:目标点
4、目标点
注意:
获取方向键使用getch.h头文件中的getch函数
把getch.h头文件复制到共享文件夹,然后通过获取超级管理员权限来移动到 /usr/include/
sudo cp getch.h /usr/include
sudo chmod +r /usr/include/getch.h
测试调用getch(),方向键的键值分别是多少
183 上
184 下
185 右
186 左
<stdlib.h>
system("命令名") system("clear") 实现清屏
<time.h>
time(NULL) 获取自从1970-01-01 00:00:00 到现在过了多少秒
#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
int main(int argc,const char* argv[])
{
char map[8][8] = {
{0,0,3,3,3,3,0,0},
{0,0,3,5,5,3,0,0},
{0,3,3,0,5,3,3,0},
{0,3,0,0,4,5,3,0},
{3,3,0,4,0,0,3,3},
{3,0,0,3,4,4,0,3},
{3,0,0,2,0,0,0,3},
{3,3,3,3,3,3,3,3},
};
char m_x = 6,m_y = 3;
int step = 0;
for(;;)
{
int cnt = 0;
system("clear");
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
switch(map[i][j])
{
case 0:printf(" ");break;
case 2:printf("@ ");break;
case 3:printf("# ");break;
case 4:printf("$ ");break;
case 5:printf("* ");break;
case 7:printf("@ ");break;
case 9:printf("$ ");cnt++;break;
}
}
printf("\n");
}
if(4 == cnt)
{
printf("游戏成功,共走了%d步\n",step);
return 0;
}
//角色位置坐标的偏移
int move_x = 0,move_y = 0;
switch(getch())
{
case 183:
move_x--;break;
case 184:
move_x++;break;
case 185:
move_y++;break;
case 186:
move_y--;break;
}
if(0 == map[m_x+move_x][m_y+move_y]
|| 5 == map[m_x+move_x][m_y+move_y])
{
map[m_x+move_x][m_y+move_y] += 2;
map[m_x][m_y] -= 2;
m_x += move_x;
m_y += move_y;
}
else if(4 == map[m_x+move_x][m_y+move_y]
|| 9 == map[m_x+move_x][m_y+move_y])
{
if(0 == map[m_x+move_x*2][m_y+move_y*2]
|| 5 == map[m_x+move_x*2][m_y+move_y*2])
{
map[m_x+move_x*2][m_y+move_y*2] += 4;
map[m_x+move_x][m_y+move_y] -= 2;
map[m_x][m_y] -= 2;
m_x += move_x;
m_y += move_y;
}
}
}
}