将编写推箱子游戏,玩家键盘控制游戏角色将所有黄色箱子推到白色方块处,效果如图所示。 先学习字符串与字符数组的概念,并应用字符数组初始化关卡数据;然后利用键盘控制游戏角色移动,实现地图元素更新和游戏胜利的判断;接着利用三维字符数组,实现多关卡的游戏;最后学习基于文件的关卡数据读取,利用枚举类型改进游戏代码。 源码:#include
#include
#include
#define B_SIZE 60 // 方块大小
#define B_NUM 8 // 方块个数,一共8*8个方块
struct Player // 结构体,用于记录玩家位置
{
int i;
int j;
};
Player player; // 玩家全局变量
enum Element // 定义枚举类型,小方块所有的可能的种类
{
wall,target,box,empty,achieved,role
};
// 用于存储地图数据,用枚举类型实现
Element level[B_NUM][B_NUM] =
{{wall,wall,wall,wall,wall,wall,wall,wall},
{wall,wall,wall,target,box,empty,empty,wall},
{wall,empty,empty,empty,empty,empty,empty,wall},
{wall,empty,empty,empty,empty,empty,empty,wall},
{wall,empty,empty,empty,empty,empty,empty,wall},
{wall,role,empty,box,target,wall,wall,wall},
{wall,empty,empty,empty,empty,wall,wall,wall},
{wall,wall,wall,wall,wall,wall,wall,wall}};
int targetNum,achievedNum; // 目标位置个数、完成目标个数
void startup() // 初始化函数
{
initgraph(B_NUM*B_SIZE,B_NUM*B_SIZE); // 新开一个画面
setbkcolor(RGB(150,150,150)); // 灰色背景
BeginBatchDraw(); // 开始批量绘图
int i,j;
targetNum = 0; // 目标个数,初始为0
// 对二维数组遍历
for (i=0;i |