C语言编写推箱子游戏(包教包会)
1:效果图:
2:
3:网上找一些图片代表箱子,推得人,我这里采用的是蔡徐坤打篮球!
4.代码
#include#include #include //easyX图形库头文件 #include //关卡 int cas = 0; int map[3][8][8] = { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 4, 0, 4, 3, 1, 1, 3, 0, 4, 5, 1, 1, 1, 1, 1, 1, 1, 4, 1, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 4, 0, 4, 3, 1, 1, 3, 0, 4, 5, 1, 1, 1, 1, 1, 1, 1, 4, 1, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 4, 0, 4, 3, 1, 1, 3, 0, 4, 5, 1, 1, 1, 1, 1, 1, 1, 4, 1, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, }; //绘制地图 void drawmap() { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { switch (map[cas][i][j]) { case 0: //空地 printf(" "); break; case 1: //墙 printf("█"); break; case 3: //目的地:篮筐 printf("☆"); break; case 4: //箱子:篮球 printf("★"); break; case 5: //人:CXK case 8: printf("人"); break; case 7: //把箱子推进目的地:鸡 printf("⊙"); break; } } printf("n"); } } //游戏过程 void playGame() { //按键操作:游戏过程 //找人:找CXK:遍历二维数组--->元素= 5||8 int i, j; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { //找人 if (map[cas][i][j] == 5 || map[cas][i][j] == 8) { break;//break只能跳出一层循环 } } //找人 if (map[cas][i][j] == 5 || map[cas][i][j] == 8) { break;//break只能跳出一层循环 } } //已经找到人了 //通过键盘操作人物 char userKey = _getch(); switch (userKey) { //那几个键移动:wsad 箭头:小键盘 键码值:72 80 75 77 case 'w': case 'W': case 72: //移动的原理:改变二维数组元素的值 //移动的步骤: //1.先让人移动 map[cas][i-1][j]=0||map[cas][i-1][j]=3 if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3) { //人移动的原理:元素的值 map[cas][i][j] -= 5; map[cas][i - 1][j] += 5; } //2.推箱子,让箱子移动 //先找到(固定)箱子 if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7) { //篮球,箱子移动的条件 if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3) { //推箱子的原理:移动元素值 map[cas][i][j] -= 5; map[cas][i - 1][j] += 5; map[cas][i - 1][j] -= 4; map[cas][i - 2][j] += 4; } } break; case 's': case 'S': case 80: //1.先让人移动 map[cas][i-1][j]=0||map[cas][i-1][j]=3 if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3) { //人移动的原理:元素的值 map[cas][i][j] -= 5; map[cas][i + 1][j] += 5; } //2.推箱子,让箱子移动 //先找到(固定)箱子 if (map[cas][i + 1][j] == 4 || map[cas][i + 1][j] == 7) { //篮球,箱子移动的条件 if (map[cas][i + 2][j] == 0 || map[cas][i + 2][j] == 3) { //推箱子的原理:移动元素值 map[cas][i][j] -= 5; map[cas][i + 1][j] += 5; map[cas][i + 1][j] -= 4; map[cas][i + 2][j] += 4; } } break; case 'a': case 'A': case 75: //1.先让人移动 map[cas][i-1][j]=0||map[cas][i-1][j]=3 if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3) { //人移动的原理:元素的值 map[cas][i][j] -= 5; map[cas][i][j - 1] += 5; } //2.推箱子,让箱子移动 //先找到(固定)箱子 if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7) { //篮球,箱子移动的条件 if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3) { //推箱子的原理:移动元素值 map[cas][i][j] -= 5; map[cas][i][j - 1] += 5; map[cas][i][j - 1] -= 4; map[cas][i][j - 2] += 4; } } break; case 'd': case 'D': case 77: //1.先让人移动 map[cas][i-1][j]=0||map[cas][i-1][j]=3 if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3) { //人移动的原理:元素的值 map[cas][i][j] -= 5; map[cas][i][j + 1] += 5; } //2.推箱子,让箱子移动 //先找到(固定)箱子 if (map[cas][i][j + 1] == 4 || map[cas][i][j + 1] == 7) { //篮球,箱子移动的条件 if (map[cas][i][j + 2] == 0 || map[cas][i][j + 2] == 3) { //推箱子的原理:移动元素值 map[cas][i][j] -= 5; map[cas][i][j + 1] += 5; map[cas][i][j + 1] -= 4; map[cas][i][j + 2] += 4; } } break; } } int gameOver() { int flag = 0; //遍历二维数组元素-->目的地:球框 for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if (map[cas][i][j] == 3) { flag = 1; } } } return flag; } int main() { while (1) { drawmap(); playGame(); if (!gameOver()) { cas++; if (cas == 3) break; } system("cls"); } //initgraph(600,600);//窗口:宽度*高度 贴图:基本贴图技术 1.定义图片变量 //IMAGE img; 2.加载图片 //loadimage(&img, L"timg.jpg", 600, 600); 3.显示图片 //putimage(0, 0, &img); //while (1); //防止闪屏 //closegraph(); //关闭窗口 return }
明天发俄罗斯方块的,加群交流学习!
5:



