接上次开发
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 变成 penbrickpenbrick=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);}