用C/C++实现推箱子小游戏
Posted 两片空白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C/C++实现推箱子小游戏相关的知识,希望对你有一定的参考价值。
效果演示
实现功能
如上图所示。按键控制小猪的运动,推箱子到达目的地。
如何实现
1.首先思考要保存箱子,小猪等信息,添加多个map可以用到三维数组。
2.定义小猪,箱子,墙,空地等信息在三维数组里的数值。
空地 0
墙 1
目的地 2
箱子 3
猪 4 2+4=6 猪到达目的地也显示猪
箱子到达目的地 2+3=5
3.按键实现推箱子运动。
考虑多种情况:
①.小猪的运动(空地,目的在)
②.小猪推箱子运动(空地,目的地)
用三维数组保存map信息:这里我只做了两种图,可自行添加
int backgrand[MAP][ROW][COL] =//map图
{
{
1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 0, 0, 2, 0, 0, 1,
1, 1, 0, 0, 3, 1, 1, 1,
1, 2, 3, 0, 4, 0, 0, 1,
1, 0, 1, 0, 3, 3, 2, 1,
1, 1, 0, 3, 2, 0, 0, 1,
1, 0, 0, 2, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1
},
{
0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 2, 0, 0, 0, 1,
1, 1, 0, 0, 3, 0, 1, 1,
1, 2, 3, 0, 4, 0, 0, 1,
1, 0, 1, 0, 0, 0, 1, 1,
1, 1, 0, 3, 2, 3, 0, 1,
1, 0, 0, 0, 0, 2, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1
},
};
绘图用到了easyx库,加载图片和绘制窗口只用到了三条语句:很简单
initgraph();//绘制窗口大小
loadimage();//加载图片
putinmage();//放出图片
具体可看代码!
代码块
#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<graphics.h>
#define ROW 8
#define COL 8
#define MAP 2//map个可以自己添加数
int count = 0;//哪个map图
/*
空地 0
墙 1
目的地 2
箱子 3
猪 4 2+4=6 猪到达目的地也显示猪
箱子到达目的地 2+3=5
*/
IMAGE image1, image2, image3, image4, image5, image6;
int backgrand[MAP][ROW][COL] =//map图
{
{
1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 0, 0, 2, 0, 0, 1,
1, 1, 0, 0, 3, 1, 1, 1,
1, 2, 3, 0, 4, 0, 0, 1,
1, 0, 1, 0, 3, 3, 2, 1,
1, 1, 0, 3, 2, 0, 0, 1,
1, 0, 0, 2, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1
},
{
0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 2, 0, 0, 0, 1,
1, 1, 0, 0, 3, 0, 1, 1,
1, 2, 3, 0, 4, 0, 0, 1,
1, 0, 1, 0, 0, 0, 1, 1,
1, 1, 0, 3, 2, 3, 0, 1,
1, 0, 0, 0, 0, 2, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1
},
};
int Judge(){//p判断是否结束一局
int i = 0;
for (i = 0; i < ROW; i++){
int j = 0;
for (j = 0; j < COL; j++){
if (backgrand[count][i][j] == 3 || backgrand[count][i][j] == 2){//判断是否还有箱子或者目的地
return 0;
}
}
}
return 1;
}
void Backgrand(){//绘制地图
int i = 0;
for (; i < ROW; i++){
int j = 0;
for (; j < COL; j++){
int x = 80 * j;//横轴是y(列),数轴是x(行)。
int y = 80 * i;
switch (backgrand[count][i][j]){
case 0:
putimage(x, y, &image3);
break;
case 1:
putimage(x, y, &image1);
break;
case 2:
putimage(x, y, &image6);
break;
case 3:
putimage(x, y, &image4);
break;
case 4:
case 6:
putimage(x, y, &image2);
break;
case 5:
putimage(x, y, &image5);
break;
default:
break;
}
}
}
}
void Keymove(){//按键控制猪的运动
int i = 0;
int j = 0;//j定义出来了,里面for循环要初始化
for (i = 0; i < ROW; i++){ //找到猪的坐标
for (j = 0; j < COL; j++){
if (backgrand[count][i][j] == 4 || backgrand[count][i][j] == 6){
break;
}
}
if (backgrand[count][i][j] == 4 || backgrand[count][i][j] == 6){
break;
}
}
char key = _getch();//获得按键
switch (key){
case 'w':
case 'W':
case 72:
if (backgrand[count][i - 1][j] == 0 ||\\
backgrand[count][i - 1][j] == 2)
{
backgrand[count][i][j] = backgrand[count][i][j] - 4;//猪运动,猪旁边是空地或者是目的地
backgrand[count][i - 1][j] = backgrand[count][i - 1][j] + 4;
}
if (backgrand[count][i - 1][j] == 3 && (backgrand[count][i - 2][j] == 0 || \\
backgrand[count][i - 2][j] == 2)) //猪推箱子运动条件,猪旁边是箱子与上箱子旁边是空地。
{ //后面或的条件要括号括起来
backgrand[count][i][j] = backgrand[count][i][j] - 4;
backgrand[count][i - 1][j] = backgrand[count][i - 1][j] + 4;
backgrand[count][i - 1][j] -= 3;
backgrand[count][i - 2][j] += 3;
}
if (backgrand[count][i - 1][j] == 5 &&\\
backgrand[count][i - 2][j] == 0) //箱子到达目的地,后面还有空的情况
{
backgrand[count][i][j] -= 4;
backgrand[count][i - 1][j] += 4;
backgrand[count][i - 1][j] -= 3;
backgrand[count][i - 2][j] += 3;
}
break;
case 's':
case 'S':
case 80:
if (backgrand[count][i + 1][j] == 0 || \\
backgrand[count][i + 1][j] == 2)
{ //猪运动
backgrand[count][i][j] = backgrand[count][i][j] - 4;
backgrand[count][i + 1][j] = backgrand[count][i + 1][j] + 4;
}
if (backgrand[count][i + 1][j] == 3 && (backgrand[count][i + 2][j] == 0 ||\\
backgrand[count][i + 2][j] == 2))
{
backgrand[count][i][j] = backgrand[count][i][j] - 4;
backgrand[count][i + 1][j] = backgrand[count][i + 1][j] + 4;
backgrand[count][i + 1][j] -= 3;
backgrand[count][i + 2][j] += 3;
}
if (backgrand[count][i + 1][j] == 5 && \\
backgrand[count][i + 2][j] == 0)
{
backgrand[count][i][j] -= 4;
backgrand[count][i + 1][j] += 4;
backgrand[count][i + 1][j] -= 3;
backgrand[count][i + 2][j] += 3;
}
break;
case 'a':
case 'A':
case 75:
if (backgrand[count][i][j - 1] == 0 || \\
backgrand[count][i][j - 1] == 2)
{ //猪运动
backgrand[count][i][j] = backgrand[count][i][j] - 4;
backgrand[count][i][j - 1] = backgrand[count][i][j - 1] + 4;
}
if (backgrand[count][i][j - 1] == 3 &&\\
(backgrand[count][i][j - 2] == 0 ||\\
backgrand[count][i][j - 2] == 2))
{
backgrand[count][i][j] = backgrand[count][i][j] - 4;
backgrand[count][i][j - 1] = backgrand[count][i][j - 1] + 4;
backgrand[count][i][j - 1] -= 3;
backgrand[count]项目: 推箱子游戏c/c++