#include <stdio.h>
#include <windows.h>
#include <conio.h>
//0代表空地,1代表墙,2代表未达成的目标,3代表箱子,4代表玩家,5代表已放箱子的目标,
//6代表人暂时所在的未达成的目标,7代表人暂时所在的已达成的目标,8代表箱子暂时所在的已达成的目标
//11111
#define WH 16 //地图的宽高
#define BYT 529 //一关需要跳过的字数 因为文件指针定位函数的原因,有时定位可能会不准确,可以通过修改BYT进行适配
#define FLPA "C:\\Users\\ASUS\\Desktop\\推箱子地图.txt" //需要读取地图文件的路径 游戏之前需进行设置!!
//找不到路径将只能进行第一关游戏
//注意:游戏地图边界 不可以 当做墙壁使用!
#define INITMAP \
int mapch_init[WH][WH] = { \
{0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, \
{0, 1, 0, 3, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0}, \
{0, 1, 2, 1, 1, 1, 1, 0, 1, 1, 3, 0, 0, 1, 0, 0}, \
{0, 1, 1, 1, 0, 1, 1, 2, 0, 0, 0, 1, 1, 1, 0, 0}, \
{0, 0, 0, 0, 0, 1, 2, 0, 1, 1, 1, 1, 0, 0, 0, 0}, \
{0, 0, 0, 0, 1, 1, 0, 3, 0, 3, 2, 1, 0, 0, 0, 0}, \
{0, 0, 0, 0, 1, 0, 3, 0, 4, 1, 1, 1, 0, 0, 0, 0}, \
{0, 0, 0, 0, 1, 1, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 1, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
};
int mapch[WH][WH];
//所有函数之间不是独立和顺序的,会互相调用
void HideCursor(); //隐藏光标
void gotoxy(int x, int y);//光标定位
void scmbxyhs(); //输出地图下方文字信息函数
void wjzdwjzjjrqk(); //未找到文件直接进入第一关情况
int gkxzhs(); //关卡选择函数
void cwjzjrwkdhs(); //从文件中进入关卡的函数
void gnxzjm(); //主菜单选择
void cshhs(); //初始化函数
void tranmap(); //翻译并画出地图
void detection(); //寻找所有该地图中未完成的目标
void gktgszxhs(); //判断关卡是否通过,是进行下一关卡
void operation(); //操作人物主要函数***
void gbszszhs(char ch); //改变数组数值函数
int updatetime(); //获取一次电脑现在的时间
void process(); //主要流程
int main()
{
cshhs(); //初始化函数
process(); //主要流程
return 0;
}
//游戏开始初始化部分
void scmbxyhs() //输出地图提示信息函数
{
gotoxy(34, 17);
printf("本关剩余目标数:");
gotoxy(34, 19);
printf("本关已走步数:");
gotoxy(32, 21);
printf("您使用 秒完成了本关!");
gotoxy(49, 19);
printf("0"); //输出初始的步数0
}
void wjzdwjzjjrqk() //未找到文件直接进入第一关情况
{
system("cls");
printf("地图文件不存在,\n直接进入第一关");
INITMAP //初始地图数组
for (int i = 0; i < WH; i++) //如果地图文件不存在则将初始地图数组的值赋给需要使用的地图
for (int j = 0; j < WH; j++) //将初始地图数组的值复制给当前地图数组
mapch[i][j] = mapch_init[i][j];
Sleep(2000); //等待两秒进入第一关
system("cls"); //清屏
tranmap(); //画出初始地图
detection();