推箱子
1、确定数字与字符的对应关系
路 0
墙壁 1
人 2
箱子 3
目标点 4
人 6
箱子 7
2、定义二维数组地图
3、定义人的坐标
4、进入死循环
1、清理屏幕并显示地图
2、检查是否完成任务
是:一共走了几步,结束程序
3、获取方向键
#include <stdio.h>
#include <getch.h>
#include <stdlib.h>
int main(int arg,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,1,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 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 1:printf(" # ");break;
case 2:printf(" @ ");break;
case 3:printf(" $ ");break;
case 4:printf(" 0 ");break;
case 6:printf(" @ ");break;
case 7:printf(" $ ");
cnt++;
break;
}
}
printf("\n");
}
if(cnt==4)
{
printf("游戏结束,共走了%d步\n",step);
return 0;
}
int ox=0,oy=0;
switch(getch())
{
case 183: ox--;break;
case 184: ox++;break;
case 185: oy++;break;
case 186:oy--;break;
}
if(0==map[m_x+ox][m_y+oy]||
4==map[m_x+ox][m_y+oy])
{
map[m_x+ox][m_y+oy]+=2;
map[m_x][m_y] -=2;
m_x += ox;
m_y += oy;
step++;
}
else if(3==map[m_x+ox][m_y+oy]||
7==map[m_x+ox][m_y+oy])
{
if(0==map[m_x+ox*2][m_y+oy*2]||
4==map[m_x+ox*2][m_y+oy*2])
{
map[m_x+ox*2][m_y+oy*2]+=3;
man[m_x+ox][m_y+oy]-=1;
map[m_x][m_y]-=2;
m_x+=ox;
m_y+=oy;
step++;
}
}
}
}
#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,1,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 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 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("游戏结束,共走了%d步\n",step);
return 0;
}
switch(getch())
{
case 183:
if(0 == map[m_x-1][m_y] ||
4 == map[m_x-1][m_y])
{
map[m_x-1][m_y] += 2;
map[m_x][m_y] -= 2;
m_x--;
step++;
}
else if(3 == map[m_x-1][m_y] ||
7 == map[m_x-1][m_y])
{
if(0 == map[m_x-2][m_y] ||
4 == map[m_x-2][m_y])
{
map[m_x-2][m_y] += 3;
map[m_x-1][m_y] -= 1;
map[m_x][m_y] -= 2;
m_x--;
step++;
}
}
break;
case 184:
if(0 == map[m_x+1][m_y] ||
4 == map[m_x+1][m_y])
{
map[m_x+1][m_y] += 2;
map[m_x][m_y] -= 2;
m_x++;
step++;
}
else if(3 == map[m_x+1][m_y] ||
7 == map[m_x+1][m_y])
{
if(0 == map[m_x+2][m_y] ||
4 == map[m_x+2][m_y])
{
map[m_x+2][m_y] += 3;
map[m_x+1][m_y] -= 1;
map[m_x][m_y] -= 2;
m_x++;
step++;
}
}
break;
case 185: //右
if(0 == map[m_x][m_y+1] ||
4 == map[m_x][m_y+1])
{
map[m_x][m_y+1] += 2;
map[m_x][m_y] -= 2;
m_y++;
step++;
}
else if(3 == map[m_x][m_y+1] ||
7 == map[m_x][m_y+1])
{
if(0 == map[m_x][m_y+2] ||
4 == map[m_x][m_y+2])
{
map[m_x][m_y+2] += 3;
map[m_x][m_y+1] -= 1;
map[m_x][m_y] -= 2;
m_y++;
step++;
}
}
break;
case 186:
if(0 == map[m_x][m_y-1] ||
4 == map[m_x][m_y-1])
{
map[m_x][m_y-1] += 2;
map[m_x][m_y] -= 2;
m_y--;
step++;
}
else if(3 == map[m_x][m_y-1] ||
7 == map[m_x][m_y-1])
{
if(0 == map[m_x][m_y-2] ||
4 == map[m_x][m_y-2])
{
map[m_x][m_y-2] += 3;
map[m_x][m_y-1] -= 1;
map[m_x][m_y] -= 2;
m_y--;
step++;
}
}
break;
}
}
}
方法两种 第一种较难理解第二种理解较为容易但是代码量较大