完整版本的推箱子小游戏,最简单的纯C语言打造
/* 推箱子小游戏 1.定义绘制样式 用二维数组的方式 2.绘制图像 3.找出当前位置 4.逻辑判断,制造动作 根据数学xy轴的规律,这里使用ij 上移,行轴上升,行数减少 下移,行数下降,函数增加 左移,列数向左,列数减少 右移,列数向右,列数增加 */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #define ROWS 8 //行数 #define COLS 9 //列数 int i = 0; //行轴 int j = 0; //列轴 //定义绘制样式 /* 0 代表 空地 1 代表 墙壁 3 代表 目的地 4 代表 箱子 5 代表 推箱子的人 7 代表 目的地上的箱子 8 代表 目的地上的人 */ int cMap[ROWS][COLS] = { { 0, 1, 1, 1, 1, 1, 1, 1, 0 }, { 0, 1, 0, 0, 3, 3, 3, 1, 0 }, { 0, 1, 5, 0, 0, 1, 1, 1, 1 }, { 1, 0, 0, 4, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 1, 4, 1, 0, 1 }, { 1, 0, 4, 0, 1, 0, 0, 0, 1 }, { 1, 0, 0, 0, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 0, 0, 0, 0 } }; //绘制图像 int GreatMap() { for (int i = 0; i < ROWS;i++) { for (int j = 0; j < COLS; j++) { switch (cMap[i][j]) { case 0: printf(" "); break; case 1: printf("■"); break; case 3: printf("△"); break; case 4: printf("◎"); break; case 5: printf("♀"); break; case 7: printf("●"); break; case 8: printf("♀"); break; default: break; } } printf("\n"); } return 0; } //找出人的当前位置 int FindManIndex() { for (i = 0; i < ROWS;i++) { for (j = 0; j < COLS;j++) { if (cMap[i][j] == 5 || cMap[i][j] == 8) break; } if (cMap[i][j] == 5 || cMap[i][j] == 8) break; } printf("人的坐标:[%d,%d]",j,i); return 0; } //制造动作 int CreateActions() { char cAction = _getch(); //输入字符不用回车 switch (cAction) { case 'W': case 'w': //----------------------------------上移 //如果上方是空地或者目的地 if (cMap[i - 1][j] == 0 || cMap[i - 1][j] == 3) { cMap[i - 1][j] += 5; cMap[i][j] -= 5; } //如果上方是箱子或者目的地上的箱子,同时更上方是空地或者目的地 if ((cMap[i - 1][j] == 4 || cMap[i - 1][j] == 7) && (cMap[i - 2][j] == 0 || cMap[i - 2][j] == 3)) { cMap[i - 2][j] += 4; cMap[i - 1][j] += 1; cMap[i][j] -= 5; } break; case 'A': case 'a': //----------------------------------左移 //如果左方是空地或者目的地 if (cMap[i][j-1] == 0 || cMap[i][j-1] == 3) { cMap[i][j-1] += 5; cMap[i][j] -= 5; } //如果左方是箱子或者目的地上的箱子,同时更左方是空地或者目的地 if ((cMap[i][j-1] == 4 || cMap[i ][j-1] == 7) && (cMap[i][j-2] == 0 || cMap[i ][j-2] == 3)) { cMap[i][j-2] += 4; cMap[i][j-1] += 1; cMap[i][j] -= 5; } break; case 'S': case 's': //----------------------------------下移 //如果下方是空地或者目的地 if (cMap[i + 1][j] == 0 || cMap[i + 1][j] == 3) { cMap[i + 1][j] += 5; cMap[i][j] -= 5; } //如果下方是箱子或者目的地上的箱子,同时更下方是空地或者目的地 if ((cMap[i + 1][j] == 4 || cMap[i + 1][j] == 7) && (cMap[i + 2][j] == 0 || cMap[i + 2][j] == 3)) { cMap[i + 2][j] += 4; cMap[i + 1][j] += 1; cMap[i][j] -= 5; } break; case 'D': case 'd': //----------------------------------右移 //如果右方是空地或者目的地 if (cMap[i][j + 1] == 0 || cMap[i][j + 1] == 3) { cMap[i][j + 1] += 5; cMap[i][j] -= 5; } //如果右方是箱子或者目的地上的箱子,同时更右方是空地或者目的地 if ((cMap[i][j + 1] == 4 || cMap[i][j + 1] == 7) && (cMap[i][j + 2] == 0 || cMap[i][j + 2] == 3)) { cMap[i][j + 2] += 4; cMap[i][j + 1] += 1; cMap[i][j] -=5; } break; } return 0; } int main() { while (1) { GreatMap(); FindManIndex(); CreateActions(); system("cls"); } system("pause"); return 0; }
条条英符铸平凡,行行代码显乾坤;