嵌入式开发,没有学到什么实质性的东西,仅仅做了两个控制台小游戏。虽然老师说不符合课程要求,但是自己感觉还蛮有意思的,就保存下来了。
main()里面那个命令控制感觉还是很好的,因为自己在这方面是新手,之前都没有听说过fflush(stdin),感觉用在这里正好。
#include<stdio.h>
int a[5][5];
int b[5][5];
void draw_point(int n)
{
switch(n)
{
case 0:
printf("| ");
break;
case 1:
printf("| A ");
break;
case 2:
printf("| B ");
break;
case 3:
printf("| * ");
break;
case 4:
printf("||||");
break;
default:
break;
}
}
void draw_line()
{
int i;
for(i = 0; i < 21; i++)
{
printf("-");
}
printf("\n");
}
void draw(int x[5][5])
{
int i, j;
for(j = 0; j < 5; j++)
{
draw_line();
for(i = 0; i < 5; i++)
{
draw_point(x[i][j]);
}
printf("|");
printf("\n");
}
draw_line();
}
void set_zero(int x[5][5])
{
int i, j;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
x[i][j] = 0;
}
}
}
void set_point(int x[5][5], int i, int j, int n)
{
x[i][j] = n;
}
void chushihua(int x[5][5])
{
set_zero(x);
set_point(x, 2, 0, 3);
set_point(x, 2, 4, 3);
set_point(x, 0, 2, 3);
set_point(x, 4, 2, 3);
set_point(x, 2, 1, 2);
set_point(x, 2, 3, 2);
set_point(x, 1, 2, 2);
set_point(x, 3, 2, 2);
set_point(x, 2, 2, 1);
}
void chushihua_b(int x[5][5])
{
set_point(x, 2, 0, 3);
set_point(x, 2, 4, 3);
set_point(x, 0, 2, 3);
set_point(x, 4, 2, 3);
}
int get_a_x(int x[5][5])
{
int i, j;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
if(a[i][j] == 1)
{
return i;
}
}
}
}
int get_a_y(int x[5][5])
{
int i, j;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
if(a[i][j] == 1)
{
return j;
}
}
}
}
void move(int x[5][5], char c)
{
int i = get_a_x(x);
int j = get_a_y(x);
if(c == 'w')
{
if(j == 0)
{
return;
}
if(x[i][j - 1] == 4)
{
return;
}
if(x[i][j - 1] == 2)
{
if(j - 1 == 0)
{
return;
}
if(x[i][j - 2] == 2 || x[i][j - 2] == 4)
{
return;
}
x[i][j - 2] = x[i][j - 1];
x[i][j - 1] = x[i][j];
x[i][j] = 0;
}
else
{
x[i][j - 1] = x[i][j];
x[i][j] = 0;
}
}
else if(c == 'a')
{
if(i == 0)
{
return;
}
if(x[i - 1][j] == 4)
{
return;
}
if(x[i - 1][j] == 2)
{
if(i - 1 == 0)
{
return;
}
if(x[i - 2][j] == 2 || x[i - 2][j] == 4)
{
return;
}
x[i - 2][j] = x[i - 1][j];
x[i - 1][j] = x[i][j];
x[i][j] = 0;
}
else
{
x[i - 1][j] = x[i][j];
x[i][j] = 0;
}
}
else if(c == 's')
{
if(j == 4)
{
return;
}
if(x[i][j + 1] == 4)
{
return;
}
if(x[i][j + 1] == 2)
{
if(j + 1 == 4)
{
return;
}
if(x[i][j + 2] == 2 || x[i][j + 2] == 4)
{
return;
}
x[i][j + 2] = x[i][j + 1];
x[i][j + 1] = x[i][j];
x[i][j] = 0;
}
else
{
x[i][j + 1] = x[i][j];
x[i][j] = 0;
}
}
else if(c == 'd')
{
if(i == 4)
{
return;
}
if(x[i + 1][j] == 4)
{
return;
}
if(x[i + 1][j] == 2)
{
if(i + 1 == 4)
{
return;
}
if(x[i + 2][j] == 2 || x[i + 2][j] == 4)
{
return;
}
x[i + 2][j] = x[i + 1][j];
x[i + 1][j] = x[i][j];
x[i][j] = 0;
}
else
{
x[i + 1][j] = x[i][j];
x[i][j] = 0;
}
}
}
void match(int x[5][5], int y[5][5])
{
int i, j;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
if(y[i][j] == 3 && x[i][j] == 0)
{
x[i][j] = 3;
}
}
}
}
bool isOK(int x[5][5], int y[5][5])
{
bool bl = true;
int i, j;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
if(y[i][j] == 3 && x[i][j] != 2)
{
bl = false;
}
}
}
return bl;
}
int main()
{
chushihua(a);
chushihua_b(b);
draw(a);
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(a, c);
match(a, b);
draw(a);
if(isOK(a, b))
{
k = 0;
printf("恭喜,任务达成!\n");
}
}
return 0;
}