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;

//printf("作者:小豆芽\n时间:2018/12/18\n版权:2862841130@qq.com");

//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[map[WhatMap][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;

}

运行效果:

游戏资源:

1.

2.

3.

4.

5.

6.

结束展示:

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 C++基于easyx图形库实现推箱子游戏 的全部内容, 来源链接: utcz.com/p/245315.html

回到顶部