基于C语言的推箱子项目
数据分析:
数值 | 象征物 | 符号 |
---|---|---|
0 | 路 | ’ ’ |
1 | 墙壁 | ‘#’ |
2 | 人 | ‘@’ |
3 | 箱子 | ‘$’ |
4 | 目标点 | ‘O’ |
6 | 人 | ‘@’ |
7 | 箱子 | ‘$’ |
逻辑分析:
1、定义整数类型的二维数组
char map = {
{0,0,1,1,1,1,0,0},
{0,0,1,4,4,1,0,0},
{0,1,1,0,4,1,0,0},
{0,1,0,0,3,4,1,0},
{1,1,0,3,0,0,1,1},
{1,0,0,1,3,3,0,1},
{1,0,0,2,0,0,0,1},
{1,1,1,1,1,1,1,1}
};
2、定义记录人的位置变量 x y
3、定义记录步数的变量
for(;;)
{
1、清屏、显示界面
2、判断在目标点上箱子的数量是否==4
是:结束程序
3、获取方向键并处理
1、当前方是路\目标点
参考走迷宫 前方+2 原位置-2
2、当人前方是箱子
当箱子的前方是路\目标点
移动
}
代码的具体实现
#include <stdio.h>
#include <getch.h>
#include <stdlib.h>
int main(int argc,const char* argv[])
{
char map[8][8] = {
{0,0,1,1,1,1,0,0},
{0,0,1,4,4,1,0,0},
{0,1,1,0,4,1,0,0},
{0,1,0,0,3,4,1,0},
{1,1,0,3,0,0,1,1},
{1,0,0,1,3,3,0,1},
{1,0,0,2,0,0,0,1},
{1,1,1,1,1,1,1,1}
};
char x = 6,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 1: printf("# ");break;
case 2: printf("@ ");break;
case 3: printf("$ ");break;
case 4: printf("O ");break;
case 6: printf("@ ");break;
case 7: printf("$ "); cnt++;break;
}
}
printf("\n");
}
if(4 == cnt)
{
printf("游戏胜利\n");
return 0;
}
int ox = 0,oy = 0;
// 获取方向键
switch(getch())
{
case 183: ox--; break;
case 184: ox++; break;
case 186: oy--; break;
case 185: oy++; break;
}
if(0 == map[x+ox][y+oy] || 4 == map[x+ox][y+oy])
{
map[x+ox][y+oy] += 2;
map[x][y] -= 2;
x += ox;
y += oy;
}
else if(3 == map[x+ox][y+oy] || 7 == map[x+ox][y+oy])
{
if(0 == map[x+2*ox][y+2*oy] || 4 == map[x+2*ox][y+2*oy])
{
map[x+2*ox][y+2*oy] += 3;
map[x+ox][y+oy] -= 1;
map[x][y] -= 2;
x += ox;
y += oy;
}
}
}
}