⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 map.c

📁 Cat Tom 兄弟的力作.代码是纯C写的
💻 C
字号:
/******************************************/
/*                 map.c                  */
/*                                        */
/*         水晶之约中的地图函数库         */
/*                                        */
/*             编译环境DJGPP              */
/*                                        */
/*        编译需allegro V4.1.13支持       */
/*                                        */
/*           Cat Tom 12.5.2003            */
/******************************************/


/*地图的加载和调用,显示在screen.c中*/

#define WALK_NO  -2
#define WALK_YES -1

#define HOOK_NO     0
#define HOOK_1      1
#define HOOK_2      2

/******************************************************************/

typedef struct
{
 int max_x;                    /* x方向的格数 */
 int max_y;
 char data[100][100];           /* 地图数据 */
 char name[16];                /* 地图名称 */

  /*下面这个数据为了兼容地图逻辑文件的格式,策划时有"天空层",
    后来发现速度不行,于是取消,但在地图编辑器中仍然保留*/
 int sky_num;                  /*供显示的天空图元数*/

 BITMAP *floor;                 /* 地图地面层的图片 */
 BITMAP *sky;                   /* 地图天空层的图片*/

}MAPDATA;                      /* 地图数据文件类型 */


MAPDATA RPG_Map;   /*游戏的地图文件*/


struct
{
 char script[30][40];
 int max_num;

 char hook_data[100][100];
 char hook_kind[100][100];

}Hook_Lib={0};               /*陷阱库*/

/******************************************************************/
/*加载陷阱脚本查询库*/
void HookScriptLib(char *script)
{
 strcpy(Hook_Lib.script[Hook_Lib.max_num],script);

 Hook_Lib.max_num++;
}

/*设置陷阱*/
void AddHook(int xx,int yy,char data,char kind)
{
 Hook_Lib.hook_data[xx][yy]=data;
 Hook_Lib.hook_kind[xx][yy]=kind;
}


/*删除陷阱*/
void DelHook(int xx,int yy)
{
 Hook_Lib.hook_data[xx][yy]=0;
 Hook_Lib.hook_kind[xx][yy]=0;
}


/*清除所有陷阱信息*/
void KillAllHook()
{
 int i,j;

 Hook_Lib.max_num=0;

 for(i=0;i<100;i++)
   for(j=0;j<100;j++)
   {
    Hook_Lib.hook_data[i][j]=0;
    Hook_Lib.hook_kind[i][j]=0;
   }
}


/*读入新地图*/
void ReadMap(MAPDATA *mp,char *filename,char *floor,char *sky)
{
 FILE *fp;
 int i,j;
 fp=fopen(filename,"rb");
 fread(&mp->max_x,2,1,fp);
 fread(&mp->max_y,2,1,fp);
 for(i=0;i<mp->max_y;i++)
   for(j=0;j<mp->max_x;j++)
     fread(&mp->data[j][i],1,1,fp);
 fread(&mp->sky_num,2,1,fp);
 fgets(mp->name,16,fp);
 fclose(fp);

 destroy_bitmap(mp->floor);
 destroy_bitmap(mp->sky);
 mp->floor=LoadBMP(floor);
 mp->sky=LoadBMP(sky);

 KillAllHook();
}



/******************************************************************/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -