C语言实现推箱子游戏的地图编辑器

  

<>强推箱子地图编辑器,供大家参考,具体内容如下

  

由于我在写推箱子的时候苦于没有地图可以试验程序运行效果,而且去搜了好长时间都没有找到一个储存16 * 16地图版本的推箱子关卡数据信息的文件。
  于是想到了写了一个地图编辑器用来自己设计地图的想法。

  

原本以为这个伟大的创意只有我才想的出来,结果搜索后才发现还有很多人有着与我相同的想法。
  但,其他人写的编辑器大部分都不是C语言版本的,而这一个是C语言版本的。

  

另外说明一下,该编辑器的想法完全是我个人想法写出来的,不敢保证编辑习惯符合别人的习惯。

  

但本着,能够实现需求,程序就是正确的原则,我自己对这个程序还是比较有信心的。

  

运行使用代码前,请查看代码最前面的详细使用说明注释,以免对您造成不便

  

如果您喜欢我的文章可以点赞支持一下。
  如果您对我的程序有什么意见和建议欢迎在评论区发表评论。

  

另外附上作者自写的推箱子游戏代码可以适配该编辑器:

  

推箱子游戏运行程序

  

下面进入技术环节:

  

<强>使用C语言实现16 * 16推箱子地图编辑器

  

编译环境:Windows VS2019

  

其他大部分编译环境,可通过查看下文的“注意事项”将代码更正为其他平台可正常编译运行版本

  

  

通过移动光标在对应位置输出方块实现编辑地图功能,编辑完成后按下z键将地图保存进txt中。

  

  

将屏幕上的光标坐标* 2与地图数组下标对应起来,在屏幕上进行输出操作就是对对应数组下标进行赋值操作,编辑完成后按下z键即可将地图信息保存进文本文件中。

  

  

首先输出16 * 16的空地,getch函数即时接收键盘输入信息,wasd控制光标移动,输入1 - 5可放置不同的地图元素,z键将地图信息保存进文本文件并退出程序。

  

具体详细做法请查看代码。

  

  

循环,二维数组,写入文件

  

  

无   

  

1■代表墙2★代表目标,3●代箱子,4♀代表人物,其他□代表空地
  地图大小为16 * 16。
  数字代表的事物必须和游戏中相匹配,也可以通过更改程序来代表其他事物,以适配游戏程序。
  使用编辑器之前应先将代码中的FLMOP宏所代表的文件路径更改正确。

  

  

由于编译器原因程序中_kbhit()和_getch()函数可能在其他编译器上编译会出现错误,解决办法是去掉函数前面的“_”。
  同时,要将文件打开函数fopen_s(和fp FLPA,“r”);更改为fp=fopen (FLPA,“r”);
  fcanf_s更改为fcanf  scanf_s()更改为scanf

  

<>强运行效果:

  

 C语言实现推箱子游戏的地图编辑器

  

<强>代码实现:

     //C语言推箱子地图编辑器详细使用说明://1■代表墙2★代表目标,3●代箱子,4♀代表人物,其他□代表空地//推箱子exe文件程序使用本编辑器的前提条件是:使用二维数组写出整个游戏结构,地图大小为16 * 16日\   ,数字与之所代表的事物相匹配。//使用该编辑器之前必须先确定文件路径FLMOP宏所替代的字符串路径在自己的电脑上准确无误并可以访问。\   否则会造成地图编辑完成后无法保存! ! !//该编辑器在绝大多数情况下都可以正常使用并保存。但如在游戏程序中出现地图位置错乱的情况,在检查游戏程序\   问题无误后请检查编辑器所使用的地图文件内地图信息是否异常。//如过您使用的是作者所配套使用的游戏程序,且游戏程序和地图信息都无异常,请尝试调整游戏程序内\   时代宏(一关卡字数)所代表的字数信息。该异常可能是文件随机读写函数错误的二进制转换导致的。//以上错误情况频率仅代表极少数情况,可放心使用//白家名      # include & lt; stdio.h>   # include & lt; windows.h>   # include & lt; conio.h>//使用推箱子地图编辑器,轻松编辑出多种多样的复杂关卡//wasd键控制光标,z键将地图信息保存进文件并结束程序//1■代表墙2★代表目标,3●代箱子,4♀代表人物,其他□代表空地//注意:如使用作者的配套游戏运行程序使用地图,不可以地图边界作为限制人物活动的墙壁使用      #定义N 16//地图宽高      #定义FLMOP " C: \ \ \ \华硕\ \用户桌面\ \编辑器地图. txt”      空白gotoxy (int x, int y);//光标定位   空白fxscdt ();//翻译输出地图   空白ckydgbhs ();//控制移动和设置元素函数      int [N] [N]地图;//地图数组   char ck;//读方向键   int x, y;//光标坐标(x * 2)      int main()//主函数控制所有   {   系统(“标题推箱子地图编译器1.0”);   系统(”模式con关口=78行=31”);   fxscdt ();//输出地图和使用说明      而(1)   {   ckydgbhs ();//控制光标移动      gotoxy(42岁,2);//输出光标位置信息   printf (" ");   gotoxy(42岁,2);   printf (" % d % d”, x, y);//光标   gotoxy (x & lt; & lt;1,y);//我横轴j纵轴,横坐标乘2和数组的下标相对应      睡眠(60);   }      gotoxy (0, 40);   返回0;   }      空白dszcz()//编辑结束后输出数组   {   gotoxy (0, 21);   printf("是否确认保存并退出地图编辑器? ! z确认”);   char话务信道=_getch ();      如果(总胆固醇!=' z ')返回;//输入z确认继续      文件* fp=零;//将地图数组保存进所选文件路径中   FLMOP fopen_s(和fp,“+”);//追加方式打开文件         for (int i=0;我& lt;N;我+ +)//将地图信息写入文件   {   for (int j=0;j & lt;N;j + +)   流(fp,“% d”,地图[我][j]);   流(fp,“\ n”);   }   流(fp,“\ n”);   文件关闭(fp);      gotoxy (0, 24);   printf("恭喜!地图信息添加成功! % s”, FLMOP);   gotoxy (0, 26);   退出(0);   }      空白ckydgbhs()//方向和设置元素   {   ck=_getch ();//接收      开关(ck)   {   案例' w ': y -;//光标移动   如果(y & lt;0)//对光标的移动位置加以限制   {y=0;返回;}   打破;      例a: x,;   如果(x & lt;0)   {x=0;返回;}   打破;      例“s”: y + +;   如果(y比;15)   {y=15;返回;}   打破;      案例' d ': x + +;   如果x比;15)   {x=15;返回;}   打破;      案例1:   printf (“■”);打破;   “2”:   printf (“★”);打破;   “3”:   printf (“●”);打破;   例“4”:   printf (“♀”);打破;   默认值:printf ("□");   ck=' 0 ';//输入其他ch为0空格   打破;   例“z”:   dszcz ();//z结束编辑地图   }      如果(ck !=' w ',,ck !=' a ',,ck !=' s ',,ck !=' d ',,ck !=' z ')//不是移动和保存时,将ck值存储进数组中   地图[y] [x]=ck - ' 0 ';   }      空白fxscdt()//输出初始地图   {   int i, j。//循环用变量   gotoxy (0,0);   (我=0;我& lt;N;我+ +)   {   (j=0;j & lt;N;j + +)   {   开关(map[我][j])   {   案例1:   printf (“■”);   案例2:   printf (“★”);   案例3:   printf (“●”);   案例4:   printf (“♀”);   默认值:   printf ("□");   }   }   printf (" \ n ");   }      gotoxy(42岁,0);   printf("光标现在的x y坐标:”);   gotoxy(42岁,5);   printf(" 16 * 16推箱子地图编辑器”);   gotoxy(42岁,8);   printf (" wsad键控制光标上下左右移动”);   gotoxy(42岁,10);   printf("按下e键可放置方块,输入1 - 5的数字”);   gotoxy(42岁,12);   printf(" 1■墙壁\ t2★目标”);   gotoxy(42岁,14);   printf(" 3●箱子\ t4♀人”);   gotoxy(42岁,16);   printf("其他□空地”);   gotoxy (0, 19);   printf("确认路径后无误后按下z键享受一键无忧保存地图! (+)");   gotoxy (0,0);   }      空白gotoxy (int x, int y)   {   COORD pos={x, y};   SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE)、pos);   }

C语言实现推箱子游戏的地图编辑器