大家好,欢迎来到IT知识分享网。
学习编程语言时,看视频看书的时候不是看看就过去了,编程毕竟是门一门手艺活,孰能生巧。
建议一边看,一边将视频中的示例或者小项目教学自己也实现一下,刚开始不会可以照着敲,比只看不动手强一百倍。
这篇文章主要为大家详细介绍了C++基于easyx图形库实现推箱子游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了C++实现推箱子游戏的具体代码,供大家参考,具体内容如下:
头文件:
#include<stdio.h> #include<stdlib.h> //#include<Windows.h> #include<conio.h> #include<graphics.h> #include<stdbool.h> //播放音乐需要的头文件 #include <mmsystem.h> #pragma comment(lib,"winmm.lib") //格子边长 #define SPACE 60 //6.3.1 定义变量 IMAGE png[12];//5张图,定义5个变量,定义一个数组 #define MapMany 6 //枚举方向 enum CH { right = 1, left = 2, up = 3, down = 4 }ch; //定义一个全局三维数组 //0表示空地“ ” 1表示墙“■” 2代表目的地“⊙” 3代表人站在空地上“♀” 4代表箱子“□” //5箱子与目的地重合“◆” 6,人站在目的地上“♀” //下面定义地图 int map[MapMany][10][10] = { //图一 { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 0, 1, 1, 0, 0, 0, 2, 1 }, { 1, 0, 0, 1, 1, 0, 0, 0, 0, 1 }, { 1, 0, 0, 1, 1, 1, 1, 0, 4, 1 }, { 1, 0, 0, 1, 1, 1, 1, 0, 0, 1 }, { 1, 0, 0, 1, 1, 1, 0, 0, 0, 1 }, { 1, 0, 0, 1, 1, 1, 0, 0, 0, 1 }, { 1, 4, 0, 0, 0, 0, 0, 3, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, }, //图二 { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 1, 2, 0, 0, 0, 4, 0, 1 }, { 1, 0, 1, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 1, 0, 0, 1, 1, 0, 0, 1 }, { 1, 0, 1, 0, 0, 1, 1, 0, 0, 1 }, { 1, 0, 1, 1, 1, 1, 1, 0, 3, 1 }, { 1, 0, 1, 1, 1, 1, 1, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 2, 0, 0, 4, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, }, //图三 { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 0, 1, 0, 0, 3, 0, 0, 1 }, { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 1, 1, 1, 1, 0, 0, 1 }, { 1, 4, 0, 1, 1, 1, 1, 0, 0, 1 }, { 1, 0, 0, 1, 1, 0, 0, 0, 4, 1 }, { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 4, 0, 1, 0, 0, 1 }, { 1, 2, 0, 0, 0, 0, 1, 0, 2, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, }, //图四 { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, }, //图五 { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, }, //图六 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, } }; //定义当前关卡 int WhatMap = 0;//初始化位第0张地图 void DrawMap(int n); void initscreen(); void ManUp(); int KbHit(); void ManUp(); void ManRight(); void ManLeft(); void ManDown(); int GameOver(); void drawGame();
CPP文件:
#include"SokoBan.h" int main() { initscreen(); //播放音乐 mciSendString(TEXT("open sun.mp3 alias mysong"), NULL, 0, NULL); mciSendString(TEXT("play mySong"), NULL, 0, NULL); while (1) { switch (KbHit()) { case 4:ManUp(); break; case 2:ManLeft(); break; case 1:ManRight(); break; case 3:ManDown(); break; //case 0:continue; } drawGame(); if (GameOver()) { WhatMap++; Sleep(1000); } if (WhatMap == 3)break; } loadimage(&png[7], _T("6.jpg"), 10*SPACE, 10*SPACE, true); putimage(0, 0, &png[7]); Sleep(10000); return 0; //system("pause"); } //设置窗口大小 void initscreen() { initgraph(10 * SPACE, 10 * SPACE ); //6.3.2 加载图片 //0表示空地“ ” 1表示墙“■” 2代表目的地“⊙” 3代表人站在空地上“♀” 4代表箱子“□” //5箱子与目的地重合“◆” 6,人站在目的地上“♀” loadimage(&png[0], _T("0.jpg"), SPACE, SPACE, true); loadimage(&png[1], _T("1.jpg"), SPACE, SPACE, true); loadimage(&png[2], _T("2.jpg"), SPACE, SPACE, true); loadimage(&png[3], _T("3.jpg"), SPACE, SPACE, true); loadimage(&png[4], _T("4.jpg"), SPACE, SPACE, true); loadimage(&png[5], _T("5.jpg"), SPACE, SPACE, true); loadimage(&png[6], _T("3.jpg"), SPACE, SPACE, true); //以下是windows窗口 //system("mode con cols=20 lines=10"); //cols 代表列 //lines 代表行 // //设置标题 //SetConsoleTitleA("推箱子"); //设置标题 } //贴图 void drawGame() { for (int i = 0; i < 10; i++) {//显示一行 for (int j = 0; j < 10; j++) {//显示一个格子 putimage(j*SPACE, i*SPACE, &png[i][j]]); } } } //画出地图 //0表示空地“ ” 1表示墙“■” 2代表目的地“⊙” 3代表人“♀” 4代表箱子“□” //5箱子与目的地重合“◆” 6,人站在目的地 void DrawMap(int n) { system("cls"); for (int j = 0; j < 10; j++) { int i; for (i = 0; i < 10; i++) { if (map[WhatMap][i][j] == 0)printf(" "); if (map[WhatMap][i][j] == 1)printf("■"); if (map[WhatMap][i][j] == 2)printf("⊙"); if (map[WhatMap][i][j] == 3)printf("♀"); if (map[WhatMap][i][j] == 4)printf("□"); if (map[WhatMap][i][j] == 5)printf("◆"); if (map[WhatMap][i][j] == 6)printf("♀"); } if(i<9)printf("\n"); } } //判断按键操作 int KbHit() { if (GetAsyncKeyState(VK_UP)&1)return up; else if (GetAsyncKeyState(VK_DOWN)&1)return down; else if (GetAsyncKeyState(VK_RIGHT)&1)return right; else if (GetAsyncKeyState(VK_LEFT)&1)return left; else return 0; } //人向上移动 void ManUp() { //先找到人的位置 int i, j; for (i = 0; i < 10; i++) { int flag = 0; for (j = 0; j < 10; j++) if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6) { flag = 1; break; } if (flag)break; } //人的位置是map[WhatMap][i][j]; //改变人的方向 //人的位置是空地 if (map[WhatMap][i][j] == 3) { //*人的上面是空地 if (map[WhatMap][i + 1][j] == 0) { map[WhatMap][i][j] = 0; map[WhatMap][i + 1][j] = 3; } //人的上面是目的地 else if (map[WhatMap][i + 1][j] == 2) { map[WhatMap][i][j] = 0; map[WhatMap][i + 1][j] = 6; } //*人的上面是箱子 else if (map[WhatMap][i + 1][j] == 4) { //1,*箱子上面是目的地 if (map[WhatMap][i + 2][j] == 2) { map[WhatMap][i][j] = 0; map[WhatMap][i + 1][j] = 3; map[WhatMap][i + 2][j] = 5; } //2,箱子上面是空地 else if (map[WhatMap][i + 2][j] == 0) { map[WhatMap][i][j] = 0; map[WhatMap][i + 1][j] = 3; map[WhatMap][i + 2][j] = 4; } //3,*箱子上面是。。。。。 } } //人的位置是目的地 else if (map[WhatMap][i][j] == 6) { //*人的上面是空地 if (map[WhatMap][i + 1][j] == 0) { map[WhatMap][i][j] = 2; map[WhatMap][i + 1][j] = 3; } //人的上面是目的地 else if (map[WhatMap][i + 1][j] == 2) { map[WhatMap][i][j] = 2; map[WhatMap][i + 1][j] = 6; } //*人的上面是箱子 else if (map[WhatMap][i + 1][j] == 4) { //1,*箱子上面是目的地 if (map[WhatMap][i + 2][j] == 2) { map[WhatMap][i][j] = 2; map[WhatMap][i + 1][j] = 3; map[WhatMap][i + 2][j] = 5; } //2,箱子上面是空地 else if (map[WhatMap][i + 2][j] == 0) { map[WhatMap][i][j] = 2; map[WhatMap][i + 1][j] = 3; map[WhatMap][i + 2][j] = 4; } //3,*箱子上面是。。。。。 } } } //人向右移动 void ManRight() { //先找到人的位置 int i, j; for (i = 0; i < 10; i++) { int flag = 0; for (j = 0; j < 10; j++) if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6) { flag = 1; break; } if (flag)break; } //人的位置是map[WhatMap][i][j]; //改变人的方向 //人的位置是空地 if (map[WhatMap][i][j] == 3) { //*人的右面是空地 if (map[WhatMap][i][j+1] == 0) { map[WhatMap][i][j] = 0; map[WhatMap][i][j+1] = 3; } //人的右面是目的地 else if (map[WhatMap][i][j+1] == 2) { map[WhatMap][i][j] = 0; map[WhatMap][i][j+1] = 6; } //*人的右面是箱子 else if (map[WhatMap][i][j+1] == 4) { //1,*箱子右面是目的地 if (map[WhatMap][i][j+2] == 2) { map[WhatMap][i][j] = 0; map[WhatMap][i][j+1] = 3; map[WhatMap][i][j+2] = 5; } //2,箱子右面是空地 else if (map[WhatMap][i][j+2] == 0) { map[WhatMap][i][j] = 0; map[WhatMap][i][j+1] = 3; map[WhatMap][i][j+2] = 4; } //3,*箱子右面是。。。。。 } } //人的位置是目的地 else if (map[WhatMap][i][j] == 6) { //*人的右面是空地 if (map[WhatMap][i][j+1] == 0) { map[WhatMap][i][j] = 2; map[WhatMap][i][j+1] = 3; } //人的右面是目的地 else if (map[WhatMap][i][j+1] == 2) { map[WhatMap][i][j] = 2; map[WhatMap][i][j+1] = 6; } //*人的右面是箱子 else if (map[WhatMap][i][j+1] == 4) { //1,*箱子右面是目的地 if (map[WhatMap][i][j+2] == 2) { map[WhatMap][i][j] = 2; map[WhatMap][i][j+1] = 3; map[WhatMap][i][j+2] = 5; } //2,箱子右面是空地 else if (map[WhatMap][i][j+2] == 0) { map[WhatMap][i][j] = 2; map[WhatMap][i][j+1] = 3; map[WhatMap][i][j+2] = 4; } //3,*箱子右面是。。。。。 } } } //人向左移动 void ManLeft() { //先找到人的位置 int i, j; for (i = 0; i < 10; i++) { int flag = 0; for (j = 0; j < 10; j++) if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6) { flag = 1; break; } if (flag)break; } //人的位置是map[WhatMap][i][j]; //改变人的方向 //人的位置是空地 if (map[WhatMap][i][j] == 3) { //*人的左面是空地 if (map[WhatMap][i][j-1] == 0) { map[WhatMap][i][j] = 0; map[WhatMap][i][j-1] = 3; } //人的左面是目的地 else if (map[WhatMap][i][j-1] == 2) { map[WhatMap][i][j] = 0; map[WhatMap][i][j-1] = 6; } //*人的左面是箱子 else if (map[WhatMap][i][j-1] == 4) { //1,*箱子左面是目的地 if (map[WhatMap][i][j-2] == 2) { map[WhatMap][i][j] = 0; map[WhatMap][i][j-1] = 3; map[WhatMap][i][j-2] = 5; } //2,箱子左面是空地 else if (map[WhatMap][i][j-2] == 0) { map[WhatMap][i][j] = 0; map[WhatMap][i][j-1] = 3; map[WhatMap][i][j-2] = 4; } //3,*箱子左面是。。。。。 } } //人的位置是目的地 else if (map[WhatMap][i][j] == 6) { //*人的上面是空地 if (map[WhatMap][i][j-1] == 0) { map[WhatMap][i][j] = 2; map[WhatMap][i][j-1] = 3; } //人的上面是目的地 else if (map[WhatMap][i][j-1] == 2) { map[WhatMap][i][j] = 2; map[WhatMap][i][j-1] = 6; } //*人的上面是箱子 else if (map[WhatMap][i][j-1] == 4) { //1,*箱子上面是目的地 if (map[WhatMap][i][j-2] == 2) { map[WhatMap][i][j] = 2; map[WhatMap][i][j-1] = 3; map[WhatMap][i][j-2] = 5; } //2,箱子上面是空地 else if (map[WhatMap][i][j-2] == 0) { map[WhatMap][i][j] = 2; map[WhatMap][i][j-1] = 3; map[WhatMap][i][j-2] = 4; } //3,*箱子上面是。。。。。 } } } //人向下移动 void ManDown() { //先找到人的位置 int i, j; for (i = 0; i < 10; i++) { int flag = 0; for (j = 0; j < 10; j++) if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6) { flag = 1; break; } if (flag)break; } //人的位置是map[WhatMap][i][j]; //改变人的方向 //人的位置是空地 if (map[WhatMap][i][j] == 3) { //*人的下面是空地 if (map[WhatMap][i - 1][j] == 0) { map[WhatMap][i][j] = 0; map[WhatMap][i - 1][j] = 3; } //人的上面是目的地 else if (map[WhatMap][i - 1][j] == 2) { map[WhatMap][i][j] = 0; map[WhatMap][i - 1][j] = 6; } //*人的上面是箱子 else if (map[WhatMap][i - 1][j] == 4) { //1,*箱子上面是目的地 if (map[WhatMap][i - 2][j] == 2) { map[WhatMap][i][j] = 0; map[WhatMap][i - 1][j] = 3; map[WhatMap][i - 2][j] = 5; } //2,箱子上面是空地 else if (map[WhatMap][i - 2][j] == 0) { map[WhatMap][i][j] = 0; map[WhatMap][i - 1][j] = 3; map[WhatMap][i - 2][j] = 4; } //3,*箱子上面是。。。。。 } } //人的位置是目的地 else if (map[WhatMap][i][j] == 6) { //*人的上面是空地 if (map[WhatMap][i - 1][j] == 0) { map[WhatMap][i][j] = 2; map[WhatMap][i - 1][j] = 3; } //人的上面是目的地 else if (map[WhatMap][i - 1][j] == 2) { map[WhatMap][i][j] = 2; map[WhatMap][i - 1][j] = 6; } //*人的上面是箱子 else if (map[WhatMap][i - 1][j] == 4) { //1,*箱子上面是目的地 if (map[WhatMap][i - 2][j] == 2) { map[WhatMap][i][j] = 2; map[WhatMap][i - 1][j] = 3; map[WhatMap][i - 2][j] = 5; } //2,箱子上面是空地 else if (map[WhatMap][i - 2][j] == 0) { map[WhatMap][i][j] = 2; map[WhatMap][i - 1][j] = 3; map[WhatMap][i - 2][j] = 4; } //3,*箱子上面是。。。。。 } } } //判断游戏是否结束 int GameOver() { //统计目的地的个数 int flag = 0; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (map[WhatMap][i][j] == 2)flag++; } } //箱子到达目的地的个数 int count = 0; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (map[WhatMap][i][j] == 4)count++; } } if (count == 0&&flag == 0 )return 1; else return 0; }
运行效果:
游戏资源:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/164456.html