#include <stdio.h>
#include <getch.h>
#include <stdlib.h>
int main(int argc,const char* argv[])
{
// 定义二维数组作为地图 0路 1墙 2人 3目标 4箱子 5人+目标 7目标+箱子
char map[8][8] = {
{0,1,1,1,1,1,1,0},
{0,1,0,2,0,0,1,1},
{1,1,0,1,4,0,0,1},
{1,0,7,3,0,3,0,1},
{1,0,0,4,4,0,1,1},
{1,1,1,0,1,3,1,0},
{0,0,1,0,0,0,1,0},
{0,0,1,1,1,1,1,0},
};
// 记录人的位置
int mr = 1, mc = 3;
// 记录步数
int step = 0;
// 进入游戏
for(;;)
{
// 完成任务的数量
int count = 0;
// 清理屏幕
system("clear");
// 显示地图
for(int r=0; r<8; r++)
{
for(int c=0; c<8; c++)
{
switch(map[r][c])
{
case 0:
printf(" ");
break;
case 1:
printf("#");
break;
case 2:
printf("@");
break;
case 3:
printf("O");
break;
case 4:
printf("=");
break;
case 5:
printf("@");
break;
case 7:
printf("+");
count++;
break;
}
}
printf("\n");
}
// 判断是否过关
if(4 == count)
{
printf("恭喜过关,一共走了%d步\n",step);
break;
}
int or = 0, oc = 0;
// 获取方向键并处理
switch(getch())
{
case 183:
or = -1;
break;
case 184:
or = +1;
break;
case 185:
oc = +1;
break;
case 186:
oc = -1;
break;
}
if(or || oc)
{
if(0 == map[mr+or][mc+oc] || 3 == map[mr+or][mc+oc])
{
map[mr][mc] -= 2;
map[mr+or][mc+oc] += 2;
mr += or;
mc += oc;
step++;
}
else if((4 == map[mr+or][mc+oc] || 7 == map[mr+or][mc+oc]) &&
(0 == map[mr+or*2][mc+oc*2] || 3 == map[mr+or*2][mc+oc*2]))
{
map[mr][mc] -= 2;
map[mr+or][mc+oc] -= 2;
map[mr+or*2][mc+oc*2] += 4;
mr += or;
mc += oc;
step++;
}
}
}
}
基于Linux下的C语言练习游戏
于 2023-07-27 20:41:11 首次发布