接上次开发
Editing While Playing 使用 Easyx 开发的 RPG 地图编辑器 tilemap eaitor-CSDN博客
由于还不能导入自己绘制的贴图,所以还要增加自定义贴图的导入导出模块
这里就单独搓了一个自定义导入导出部分,之后再缝合进瓦片地图编辑器里
cpp
#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);
}