c语言控制台输出制作推箱子游戏

来源:互联网 发布:软件图标下载 编辑:程序博客网 时间:2024/05/22 13:37
嵌入式开发,没有学到什么实质性的东西,仅仅做了两个控制台小游戏。虽然老师说不符合课程要求,但是自己感觉还蛮有意思的,就保存下来了。

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;}

 

 

原创粉丝点击