Devc++ 开发的 Easyx 瓦片地图编辑器之自定义贴图导入模块

本文介绍了如何在基于Easyx的RPG地图编辑器tilemapeditor中添加自定义贴图的导入导出功能,包括读取和保存自定义图片到本地文件夹和特定DLC目录的实现过程。
摘要由CSDN通过智能技术生成

 接上次开发

 Editing While Playing 使用 Easyx 开发的 RPG 地图编辑器 tilemap eaitor-CSDN博客

 由于还不能导入自己绘制的贴图,所以还要增加自定义贴图的导入导出模块

这里就单独搓了一个自定义导入导出部分,之后再缝合进瓦片地图编辑器里

#include <stdio.h>
#include <io.h>
#include <direct.h>
#include <graphics.h>
// 按类型保存到当前目录指定文件夹下
void loadfile_scanf(char *dirname,char* next,char* kind,IMAGE** penbrick)
{
	//文件存储信息结构体
	struct _finddata_t fileinfo;
	//保存文件句柄
	long fHandle;
	//文件数记录器
	char dirpath[100];
	strcpy(dirpath,dirname);
	if(access(dirpath,0)==-1)														// 检查文件夹是否存在,不存在为 -1
	{
		mkdir(dirpath);
		return;
	}
	else
	{
		int i = 0;																	// 记录文件数量
		char kindpath[100];
		strcpy(kindpath,dirpath);
		strcat(kindpath,next);
		strcat(kindpath,kind);
		if( (fHandle=_findfirst( kindpath, &fileinfo )) == -1L ) 					// *是通配符,默认在当前文件夹内查找文件,这里查找 .png 文件
		{
			printf( "当前目录: %s 下没有所需文件\n",dirname);
			return ;
		}
		else
		{
			char path[100];
			do
			{
				i ++;
				printf("在%s下找到文件:%s,文件大小:%d bit\n", dirname,fileinfo.name,fileinfo.size);
				strcpy(path,dirname);
				strcat(path,next);
				strcat(path,fileinfo.name);
				loadimage(penbrick[i],path,30,30);													// 根据名称读取文件
			}
			while( _findnext(fHandle,&fileinfo)==0);
		}
		//关闭文件
		_findclose( fHandle );

		printf("文件数量:%d\n",i);
	}
}
// 从默认文件夹中读取自定义图片
void loadfile(IMAGE** penbrick)
{
	char brick[100]="birck_6_family";
//	char ground[100]="ground_7_family";
//	char change[100]="change_8_family";
//	char trick[100]="trick_9_family";
	char next[100]="./";
	char png[100]="*.png";
	loadfile_scanf(brick,next,png,penbrick);												// 加载用于当砖头类型的图片
//	loadfile_scanf(ground,next,png,msg);
//	loadfile_scanf(change,next,png,msg);
//	loadfile_scanf(trick,next,png,msg);

}
// 保存自定义文件
void savelocal(char* DLC,char *dirpath,char* next,char* kind,char** filename);
// 保存自定义瓦片贴图
void savepersonalfile(char*DLC,IMAGE** penbrick);
int main()
{
	initgraph(700,700);
	IMAGE **penbrick;															// penbrick 变成 penbrick
	penbrick=new IMAGE*[10];
	for(int i=0; i<10; i++)
		penbrick[i]=new IMAGE(30,30);
	setbkcolor(GREEN);
	cleardevice();
	for(int i=0; i<10; i++)
		putimage(0,i*30,penbrick[i]);

	char DLC[100]= {};
	strcpy(DLC,"DLC0");

	loadfile(penbrick);
	for(int i=0; i<10; i++)
		putimage(0,i*30,penbrick[i]);


	savepersonalfile(DLC,penbrick);
	getchar();
	return 0;
}
// 保存自定义文件
void savelocal(char* DLC,char *dirname,char* next,char* kind,char* sign,IMAGE** files)
{
	char dirpath[100]="";
	strcpy(dirpath,DLC);															// 字符串拼接出相对路径
	strcat(dirpath,next);
	strcat(dirpath,dirname);
	if(access(dirpath,0)==-1)														// 检查 DLC 内文件夹是否存在,不存在为 -1
	{
		mkdir(dirpath);
	}
	else
	{
		char filepath[100];
		char filepa[100]; 
		char num[10];
		strcpy(filepath,dirpath);												// 字符串拼接出文件名
		strcat(filepath,next);
		strcat(filepath,sign);
		for(int i=0; i<10; i++)
		{
			sprintf(num,"%d",i);
			strcpy(filepa,filepath);												// 从头粘贴,可以覆盖之前的信息,不受上一次保存的影响 
			strcat(filepa,num);
			strcat(filepa,kind);
			saveimage(filepa,files[i]);
			printf("file save %s\n",filepa);
		}
	}
}
// 在目标 DLC 里创建四个文件夹并保存
void savepersonalfile(char *DLC,IMAGE** penbrick)
{
	char brick[100]="birck_6_family";

//	char ground[100]="ground_7_family";
//	char change[100]="change_8_family";
//	char trick[100]="trick_9_family";
	char next[100]="./";
	char png[100]=".png";
	if(access(DLC,0)==-1)														// 检查文件夹是否存在,不存在为 -1
	{
		mkdir(DLC);
	}
	char sign[10]= {};
	strcpy(sign,"6");
	savelocal(DLC,brick,next,png,sign,penbrick);
//	savelocal(DLC,ground,next,png,msg);
//	savelocal(DLC,change,next,png,msg);
//	savelocal(DLC,trick,next,png,msg);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值