主要由以下几个功能:
1.初始化可以选择关卡,游戏中也可选择关卡
2.按h出现提示,
3.按t存档当前关卡进度,
3.按r读取存档的进度
5.回撤功能
1.头文件
#include <graphics.h>
#include <conio.h>
#include <string>
#include<iostream>
#include <fstream>
using namespace std;
#define B_SIZE 60 // 方块大小
#define B_NUM 8 // 方块个数,一共8*8个方块
#define LEVEL_TOTALNUM 5 // 一共多少关卡
2.结构体
struct Player // 结构体,用于记录玩家位置
{
int i;
int j;
};
Player player; // 玩家全局变量
3.关卡学校
// 用字符型三维数组,存储所有关的关卡信息
// e: empty w: wall t: target b: box a: achieved p:player
char s[100];//在存文件和读文件时,二维地图信息数组转化为一维数组,为文件函数的调用做准备。
char hc[B_NUM][B_NUM + 1] = {
"wwwwwwww","wwwtbeew","weeeeeew","weeeeeew","weeeeeew" ,"weepaeew","weeewwww","wwwwwwww" };
char levels[LEVEL_TOTALNUM][B_NUM][B_NUM+1] =
{
{
"wwwwwwww","wwwtbeew","weeeeeew","weeeeeew",
"weeeeeew","wepbteew","weeewwww","wwwwwwww"}, // 第1关
{
"wwwwwwww","wwweewww","wpetbwww","weeebeww",
"wewteeww","weeeeeww","weepwwww","wwwwwwww"}, // 第2关
{
"wwwwwwww","wwpeewww","weeweeww","webabeww",
"weeteeww","wwetewww","wwwwwwww","wwwwwwww"}, // 第3关
{
"wwwwwwww","wwwwwwww","weeeewww","weeettew",
"webbbpew","weewetww","wwwwwwww","wwwwwwww"}, // 第4关
{
"wwwwwwww","wwwwwwww","wwteewww","weewebpw",
"weewewew","weaeebtw","weeeewww","wwwwwwww"} // 第5关
};
int currentLevelNum = 0; // 当前玩到第几关
char level[B_NUM][B_NUM+1]; // 当前正在玩的关卡数据
int targetNum,achievedNum; // 目标位置个数、完成目标个数
int tips; //提示信息
bool flag;//提示信息
int pi = 0, pj = 0;
4.初始化函数
void startup() // 初始化函数
{
flag = false;//初始化为假
initgraph(B_NUM*B_SIZE,B_NUM*B_SIZE); // 新开一个画面
setbkcolor(RGB(150,150,150)); // 灰色背景
BeginBatchDraw(); // 开始批量绘图
int i,j;
// 首先获得当前关的地图数据
for (i=0;i<B_NUM;i++)
for (j=0;j<B_NUM;j++)
level[i][j] = levels[currentLevelNum][i][j];
targetNum = 0; // 目标个数初始为0
achievedNum = 0; // 完成目标个数初始为0
// 对二维数组遍历
for (i=0;i<B_NUM;i++)
for (j=0;j<B_NUM;j++)
{
if (level[i][j]=='p') // 找到地图中player位置
{
player.i = i; // 设定player位置
player.j = j; //
level[i][j]='e'; // 把地图元素变成空白empty
}
else if (level[i][j]=='t' || level[i][j]=='a' ) // 如果元素是target或achieved
targetNum++; // 目标个数+1
}
}
5.绘制函数
void show() // 绘制函数
{
int i,j;
cleardevice(); // 以背景颜色清空屏幕
// 遍历关卡二维数组数据
for (i=0;i<B_NUM;i++)
{
for (j=0;j<B_NUM;j++)
{
if (level[i][j]=='e') // empty 元素是空白区域
{
setfillcolor(RGB(150,150,150)); // 绘制灰色地面