C++实现推箱子游戏

主要由以下几个功能:
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)); // 绘制灰色地面
	
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤独的根号三号程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值