推箱子 
1)
#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
int main(int arhc,const char* argv[])
{
char box[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},
};
int man_x = 6,man_y = 3;
int a = 0;
for(;;)
{
system("clear");
for(int i=0;i<8;i++)
{
for(int j=0; j<8; j++)
{
switch(box[i][j])
{
case 0:printf(" "); break;
case 1:printf("# "); break;
case 2:printf("@ "); break;
case 3:printf("* "); break;
case 4:printf("o "); break;
case 5:printf("* "); break;
case 6:printf("@ "); break;
}
}
printf("\n");
}
if(box[1][3] == 5 && 5 == box[1][4] && 5 == box[2][4] && 5 == box[3][5])
{
printf("恭喜您成功啦,一共花费了%d步",a);
return 0;
}
switch(getch())
{
case 183: case 119:
if(box[man_x-1][man_y] == 3 && box[man_x-2][man_y] == 4)
{
box[man_x][man_y] = 0;
box[man_x-2][man_y] = 5;
box[--man_x][man_y] = 2;
a++;
}
else if(box[man_x-1][man_y] == 3 && box[man_x-2][man_y] == 0)
{
box[man_x][man_y] = 0;
box[man_x-2][man_y] = 3;
box[--man_x][man_y] = 2;
a++;
}
else if(box[man_x-1][man_y] == 0 && 0 != man_x)
{
box[man_x][man_y] = 0;
box[--man_x][man_y] = 2;
a++;
}
else if(box[man_x-1][man_y] == 5 && box[man_x-2][man_y] == 4)
{
box[man_x][man_y] = 0;
box[man_x-2][man_y] = 5;
box[--man_x][man_y] = 6;
a++;
}
else if(box[man_x-1][man_y] == 4)
{
box[man_x][man_y] = 0;
box[--man_x][man_y] = 6;
a++;
}
break;
case 184: case 115:
if(box[man_x+1][man_y] == 3 && box[man_x+2][man_y] == 4)
{
box[man_x][man_y] = 0;
box[man_x+2][man_y] = 5;
box[++man_x][man_y] = 2;
a++;
}
else if(box[man_x+1][man_y] == 3 && box[man_x+2][man_y] == 0 && 6 != box[man_x][man_y])
{
box[man_x][man_y] = 0;
box[man_x+2][man_y] = 3;
box[++man_x][man_y] = 2;
a++;
}
else if(box[man_x+1][man_y] == 0 && 7 != man_x && 6 != box[man_x][man_y])
{
box[man_x][man_y] = 0;
box[++man_x][man_y] = 2;
a++;
}
else if(box[man_x][man_y] == 6 && box[man_x+1][man_y] == 0)
{
box[man_x][man_y] = 4;
box[++man_x][man_y] = 2;
a++;
}
else if(box[man_x][man_y] == 6 && box[man_x+1][man_y] == 3 && box[man_x+2][man_y] == 0)
{
box[man_x][man_y] = 4;
box[man_x+2][man_y] = 3;
box[++man_x][man_y] =2;
a++;
}
break;
case 185: case 100:
if(box[man_x][man_y+1] == 3 && box[man_x][man_y+2] == 4)
{
box[man_x][man_y] = 0;
box[man_x][man_y+2] = 5;
box[man_x][++man_y] = 2;
a++;
}
else if(box[man_x][man_y+1] == 3 && box[man_x][man_y+2] == 0)
{
box[man_x][man_y] = 0;
box[man_x][man_y+2] = 3;
box[man_x][++man_y] = 2;
a++;
}
else if(box[man_x][man_y+1] == 0 && 7 != man_y)
{
box[man_x][man_y] = 0;
box[man_x][++man_y] = 2;
a++;
}
else if(box[man_x][man_y+1] == 4)
{
box[man_x][man_y] = 0;
box[man_x][++man_y] = 6;
a++;
}
break;
case 186: case 97:
if(box[man_x][man_y-1] == 3 && box[man_x][man_y-2] == 4)
{
box[man_x][man_y] = 0;
box[man_x][man_y-2] = 5;
box[man_x][--man_y] = 2;
a++;
}
else if(box[man_x][man_y-1] == 3 && box[man_x][man_y-2] == 0 && 6 != box[man_x][man_y])
{
box[man_x][man_y] = 0;
box[man_x][man_y-2] = 3;
box[man_x][--man_y] = 2;
a++;
}
else if(box[man_x][man_y-1] == 0 && 6 != box[man_x][man_y])
{
box[man_x][man_y] = 0;
box[man_x][--man_y] = 2;
a++;
}
else if(box[man_x][man_y-1] == 4)
{
box[man_x][man_y] = 0;
box[man_x][--man_y] = 6;
a++;
}
else if(box[man_x][man_y] == 6 && box[man_x][man_y-1] == 0)
{
box[man_x][man_y] = 4;
box[man_x][--man_y] = 2;
a++;
}
else if(box[man_x][man_y] == 6 && box[man_x][man_y-1] == 3 && box[man_x][man_y-2] == 0)
{
box[man_x][man_y] = 4;
box[man_x][man_y-2] = 3;
box[man_x][--man_y] =2;
a++;
}
break;
}
}
}
2)
#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
int main(int arhc,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(;;)
{
system("clear");
int cnt = 0;
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;
}
int x = 0, y = 0;
switch(getch())
{
case 183:
x = -1; y = 0;
break;
case 184:
x = 1; y = 0;
break;
case 185:
x = 0; y = 1;
break;
case 186:
x = 0; y = -1;
break;
}
if(0 == map[m_x+x][m_y+y] || 4 == map[m_x+x][m_y+y])
{
map[m_x][m_y] -= 2;
map[m_x+x][m_y+y] += 2;
m_x += x;
m_y += y;
step++;
}
else if(3 == map[m_x+x][m_y+y] || 7 == map[m_x+x][m_y+y])
{
if(0 == map[m_x+2*x][m_y+2*y] || 4 == map[m_x+2*x][m_y+2*y])
{
map[m_x+2*x][m_y+2*y] += 3;
map[m_x+x][m_y+y] -= 1;
map[m_x][m_y] -= 2;
m_x += x;
m_y += y;
step++;
}
}
}
}
代码2明显简化了。并且1只适用于此图,有些情况没有做出分析
|