这就是另外一个小程序了和那个推箱子很像。
#include<stdio.h>
int a[4][4];
void draw_point(int n)
{
if(n == 15)
{
printf("| ");
}
else
{
printf("| %c ", (char)(n + 'A'));
}
}
void draw_line()
{
printf("-----------------\n");
}
void draw()
{
int i, j;
for(j = 0; j < 4; j++)
{
draw_line();
for(i = 0; i < 4; i++)
{
draw_point(a[i][j]);
}
printf("|\n");
}
draw_line();
}
void chushihua()
{
int i, j;
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
a[i][j] = j * 4 + i;
}
}
}
int get_x()
{
int i, j;
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
if(a[i][j] == 15)
{
return i;
}
}
}
}
int get_y()
{
int i, j;
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
if(a[i][j] == 15)
{
return j;
}
}
}
}
void move(char c)
{
int i = get_x();
int j = get_y();
if(c == 'w')
{
if(j == 3)
{
return;
}
a[i][j] = a[i][j + 1];
a[i][j + 1] = 15;
}
else if(c == 'a')
{
if(i == 3)
{
return;
}
a[i][j] = a[i + 1][j];
a[i + 1][j] = 15;
}
else if(c == 's')
{
if(j == 0)
{
return;
}
a[i][j] = a[i][j - 1];
a[i][j - 1] = 15;
}
else if(c == 'd')
{
if(i == 0)
{
return;
}
a[i][j] = a[i - 1][j];
a[i - 1][j] = 15;
}
}
bool isOK()
{
bool bl = true;
int i, j;
for(j = 0; j < 4; j++)
{
for(i = 0; i < 4; i++)
{
if(a[i][j] != j * 4 + i)
{
return false;
}
}
}
return bl;
}
void main()
{
chushihua();
char c[20] = "dsddssaaawddsaawwwd";
int f;
for(f = 0; f < 20; f++)
{
move(c[f]);
}
draw();
int k = 1;
while(k)
{
char c;
printf("请输入指令:");
scanf("%c", &c);
fflush(stdin);
while (c != 'w' && c != 'a' && c != 's' && c != 'd')
{
printf("只能输入wasd其中之一\n");
printf("请输入新的命令:");
scanf("%c", &c);
fflush(stdin);
}
move(c);
draw();
if(isOK())
{
k = 0;
printf("恭喜,任务完成!\n");
}
}
}