<>强推箱子地图编辑器,供大家参考,具体内容如下强>
由于我在写推箱子的时候苦于没有地图可以试验程序运行效果,而且去搜了好长时间都没有找到一个储存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语言推箱子地图编辑器详细使用说明://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语言实现推箱子游戏的地图编辑器