上一篇中我们介绍了编写推箱子游戏的思路。这篇我们就来详细介绍推箱子的编写。
人物、箱子、放箱子的位置、墙,以及没有提到的空白,共五种类型,那我我们该怎么区分它们呢?最简单的方法是通过数字来定义它们。
比如: 0 空白
1 墙
2 位置
3 箱子
4 人物
5 箱子+位置
6人加位置
箱子+位置用5表示,人加位置用6表示呢?这是因为位置是2,箱子是3,当箱子与位置重合时,将他们的数字累加即为2+3 = 5,故箱子+位置用5表示。人加位置同理
对象定义好了,接下来是初始化地图。
由上图,该地图有9*10个位置,那我们可以用二维数组表示。
在定义二位数组时,有两种方式:
第一种直接定义:
int x[9][10] = { { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 2, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 1, 1, 1, 1, 0 },
{ 0, 1, 1, 1, 3, 0, 3, 2, 1, 0 },
{ 0, 1, 2, 0, 3, 4, 6, 1, 1, 0 },
{ 0, 1, 1, 1, 1, 3, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 2, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
这种方法可按照图中每个位置的属性来直接定义
第二种方法:
首先初始化全部为0
int x[9][10] = {0};
然后再分别定义
x[0][3] = 1; x[0][4] = 1; x[0][5] = 1;
x[1][3] = 1; x[1][4] = 2; x[1][5] = 1;
x[2][3] = 1; x[2][5] = 1; x[2][6] = 1; x[2][7] = 1; x[2][8] = 1;
x[3][1] = 1; x[3][2] = 1; x[3][3] = 1; x[3][4] = 3; x[3][6] = 3; x[3][7] = 2; x[3][8] = 1;
x[4][1] = 1; x[4][2] = 2; x[4][4] = 3; x[4][5] = 4; x[4][6] = 1; x[4][7] = 1; x[4][8] = 1;
x[5][1] = 1; x[5][2] = 1; x[5][3] = 1; x[5][4] = 1; x[5][5] = 3; x[5][6] = 1;
x[6][4] = 1; x[6][5] = 2; x[6][6] = 1;
x[7][4] = 1; x[7][5] = 1; x[7][6] = 1;
要注意单独定义时,数组下标从0开始,且不能超过定义的个数!!
这样就定义好数据了
接下来开始初始化地图,这里我们使用easyx图形界面库(链接见文章最后)来进行初始化,
easyx图形界面库
#include<easyx.h>
定义每一个格子大小
#define SINE 40//大小
定义窗口大小
#define WINDOWS_LONG 500
#define WINDOWS_WIDTH 500
//背景 人物 箱子 墙 位置
IMAGE background, person, box, wall, position;
定义窗口
initgraph(WINDOWS_LONG, WINDOWS_WIDTH);
定义窗口颜色
setbkcolor(RGB(50,205,50));
接下来开始插入图片
这里事先准备了几张图
//加载图片
loadimage(&background, _T("背景.JPG"), WINDOWS_LONG, WINDOWS_WIDTH);
loadimage(&person, _T("人物.JPG"), SINE, SINE);
loadimage(&box, _T("箱子.JPG"), SINE, SINE);
loadimage(&wall, _T("墙.JPG"), SINE, SINE);
loadimage(&position, _T("位置.JPG"), SINE, SINE);
//生成图像界面对应位置
void Position()
{
putimage(0, 0, &background);
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 10; j++)
{
switch (x[i][j])
{
case 0:
break;
case 1:
putimage(10 + i*SINE, 10 + j*SINE, &wall);
break;
case 2:
putimage(10 + i*SINE, 10 + j*SINE, &position);
break;
case 3:
case 5:
putimage(10 + i*SINE, 10 + j*SINE, &box);
break;
case 4:
case 6:
putimage(10 + i*SINE, 10 + j*SINE, &person);
break;
} }
}}
以上即为初始化地图与加载图片的内容,下期我们将介绍如何编写控制人物移动以及玩游戏。
有任何问题,欢迎留言
------------------------------------------
easyx图形界面库百度网盘链接:
链接:https://pan.baidu.com/s/1nLt6d0vBcy58-q9gBtrp6g
提取码:aibc
点击下方原文链接也可哦