帮我把下面代码编辑下上传给我谢了
http://bbs.
程序代码:
#include "ReadGameMap.h" using namespace NetEase; // 使用NetEase命名空间 ReadGameMap::ReadGameMap(void) { //m_MapWidth=0; // 初始化地图的宽度 //m_MapHeight=0; // 初始化地图的高度 m_SubMapWidth=320; // 初始化子地图宽度 m_SubMapHeight=240; // 初始化子地图高度 m_MaskTemp=1; // 初始化MASK临时变量 //m_SubMapRowNum=0; // 子地图的行数量 //m_SubMapColNum=0; // 子地图的列数量 //m_SubMapTotal=0; // 子地图的总数 } ReadGameMap::~ReadGameMap(void) {}// 加载地图文件 bool ReadGameMap::LoadMap(char *filename){ FILE *fp; //m_FileName=filename; // 全局变量地图文件名 strcpy(m_FileName,filename); // 打开流 if( (fp = fopen(m_FileName, "rb" )) == NULL) { printf("打开文件错误。\n"); return false; } // 读取地图文件头 MapHeader header; fread(&header, sizeof(MapHeader), 1, fp); // 读取地图文件头 m_MapWidth=header.Width; // 地图的宽度 m_MapHeight=header.Height; // 地图的高度 m_SubMapRowNum=ceil((float)(m_MapWidth/m_SubMapWidth)); // 计算行中子地图的数量 m_SubMapColNum=ceil((float)(m_MapHeight/m_SubMapHeight)); // 计算列中子地图的数量 m_SubMapTotal=m_SubMapRowNum*m_SubMapColNum; // 计算地图中总的子地图数量 //printf("Flag=0x%X\n",header.Flag); //printf("Width=%d\n",header.Width); //printf("Height=%d\n",header.Height); //printf("m_SubMapTotal=%d\n",m_SubMapTotal); // 判断文件头是否正确(MAPX) && (M1.0) if((header.Flag!=0x4D415058) && (header.Flag!=0x4D312E30)) { printf("未支持的地图文件格式。\n"); return false; } // 读取子地图偏移值列表 m_SubMapOffsetList=new uint32[m_SubMapTotal]; // 自动分配列表空间 fread(m_SubMapOffsetList, sizeof(uint32), m_SubMapTotal, fp); // 读取列表 fread(&m_MapSize, sizeof(uint32), 1, fp); // 读取文件大小或文件头的大小 //printf("m_SubMapOffsetList=0x%X\n",m_SubMapOffsetList[60]); // MAPX if (header.Flag == 0x4D415058) { ReadJPGH(fp); // 读取JPGH的数据 m_FileType=1; // 设置地图文件类型 } // M1.0 if (header.Flag == 0x4D312E30) { ReadHEAD(fp); // 读取新地图的数据 m_FileType=2; // 设置地图文件类型 } fclose(fp); // 关闭流 return true; } // 读取地图JPGH的数据bool ReadGameMap::ReadJPGH(FILE *fp) { UnitHeader JpegHead; fread(&JpegHead,sizeof(JpegHead),1,fp); // 读取单元头的数据 // 判断标志是否正确(HGPJ) if (JpegHead.Flag!=0x4A504748) { printf("JPEG HEADER 标志错误。\n"); return false; } m_jpgh.Data = new uint8[JpegHead.Size]; // 分配单元数据的内存空间 m_jpgh.Size=JpegHead.Size; fread(m_jpgh.Data,JpegHead.Size,1,fp); // 读取单元数据 //PrintHex(m_JpegHeadDate,JpegHead.Size); return true; } // 读取地图HEAD的数据 bool ReadGameMap::ReadHEAD(FILE *fp) { uint32 HeaderSize; HeaderSize=m_SubMapOffsetList[0]-m_MapSize; // 计算地图头数据的大小 m_head.Size=HeaderSize; m_head.Data = new uint8[HeaderSize]; fread(m_head.Data,sizeof(uint8),HeaderSize,fp); // 读取地图头数据 //PrintHex(MapHeadData.Data,MapHeadData.Size); return true; } // 读取地图的单元数据 bool ReadGameMap::ReadUnit(uint32 UnitNum) { FILE *fp; int64 seek; bool Result; bool loop=true; char * filename; m_MaskTemp=1; // 打开流 //printf("m_FileName=%s\n",m_FileName); if( (fp = fopen(m_FileName, "rb" )) == NULL) { printf("打开文件错误。\n"); return false; } seek=m_SubMapOffsetList[UnitNum]; //printf("Seek=0x%X\n",seek); fseek(fp,seek,SEEK_SET); fread(&m_MaskNum,sizeof(uint32),1,fp); // 读取MASK的数量 //printf("m_MaskNum=%d\n",m_MaskNum); // 新地图使用 if ((m_FileType==2) && (m_MaskNum>0)) { //printf("New Map!\n"); m_MaskList = new uint32[m_MaskNum]; fread(m_MaskList,sizeof(uint32),m_MaskNum,fp); } UnitHeader unit; while(loop) { fread(&unit,sizeof(UnitHeader),1,fp); // 读取单元的头数据 //printf("单元标志=%X\n", unit.Flag); //printf("单元大小=%d\n", unit.Size); switch(unit.Flag) { // GAMI "47 41 4D 49" case 0x494D4147: Result=ReadIMAG(fp,unit.Flag,unit.Size); break; // GEPJ "47 45 50 4A" case 0x4A504547: Result=ReadJPEG(fp,unit.Flag,unit.Size); break; // KSAM "4B 53 41 4D" case 0x4D41534B: Result=ReadMASK(fp,unit.Flag,unit.Size); break; // KOLB "4B 4F 4C 42" case 0x424C4F4B: Result=ReadBLOK(fp,unit.Flag,unit.Size); break; // LLEC "4C 4C 45 43" case 0x43454C4C: Result=ReadCELL(fp,unit.Flag,unit.Size); break; // GIRB "47 49 52 42" case 0x42524947: Result=ReadBRIG(fp,unit.Flag,unit.Size); loop=false; break; // 默认处理 default: m_EndUnit.Flag=unit.Flag; m_EndUnit.Size=unit.Size; loop=false; //printf("Flag错误!\n"); //printf("Flag=0x%X\n\n",unit.Flag); break; //return false; } } fclose(fp); } // 读取地图宽度 uint32 ReadGameMap::ReadMapWidth() { return m_MapWidth; } // 读取地图高度 uint32 ReadGameMap::ReadMapHeight() { return m_MapHeight; } // 读取子地图的宽度 uint32 ReadGameMap::ReadSubMapWidth() { return m_SubMapWidth; } // 读取子地图的高度 uint32 ReadGameMap::ReadSubMapHeight() { return m_SubMapHeight; } // 读取子地图的总数量 uint32 ReadGameMap::ReadSubMapTotal() { return m_SubMapTotal; } // 读取子地图中Mask的总数 uint32 ReadGameMap::ReadMaskTotal() { return m_MaskNum; } // 读取地图文件大小 uint32 ReadGameMap::ReadMapSize() { return m_MapSize; } // 读取地图IMAG的数据 bool ReadGameMap::ReadIMAG(FILE *fp, uint32 Flag, uint32 Size) { if (Flag==0x494D4147) { m_imag.Data = new uint8[Size]; // 分配单元数据的内存空间 fread(m_imag.Data,Size,1,fp); // 读取单元IMAG的数据 m_imag.Size=Size; //printf("IMAG的数据:\n"); //PrintHex(m_ImagData,Size); } else { printf("IMAG标志错误!\n"); return false; } return true; } // 读取地图JPEG的数据 bool ReadGameMap::ReadJPEG(FILE *fp, uint32 Flag, uint32 Size) { if (Flag==0x4A504547) { fread(&m_SubMapWidth,sizeof(uint16),1,fp); // 子地图的宽度 fread(&m_SubMapHeight,sizeof(uint16),1,fp); // 子地图的高度 m_jpeg.Data = new uint8[Size-4]; // 分配单元数据的内存空间 fread(m_jpeg.Data,Size-4,1,fp); // 读取单元JPEG的数据 m_jpeg.Size=Size; //printf("JPEG的数据:\n"); //PrintHex(m_JpegData,Size-4); } else { printf("JPEG标志错误!\n"); return false; } return true; } // 读取地图MASK的数据 bool ReadGameMap::ReadMASK(FILE *fp, uint32 Flag, uint32 Size) { if (Flag==0x4D41534B) { //printf("m_MaskTemp=%d\n",m_MaskTemp); m_mask[m_MaskTemp].Data = new uint8[Size]; // 分配单元数据的内存空间 m_mask[m_MaskTemp].Size=Size; fread(m_mask[m_MaskTemp].Data,Size,1,fp); // 读取单元MASK的数据 //printf("MASK的数据:\n"); //PrintHex(mask[m_MaskTemp].m_MaskData,Size); m_MaskTemp++; } else { printf("MASK标志错误!\n"); return false; } return true; }// 读取地图BLOK的数据 bool ReadGameMap::ReadBLOK(FILE *fp, uint32 Flag, uint32 Size) { if (Flag==0x424C4F4B) { m_blok.Data = new uint8[Size]; // 分配单元数据的内存空间 fread(m_blok.Data,Size,1,fp); // 读取单元BLOK的数据 m_blok.Size=Size; //printf("BLOK的数据:\n"); //PrintHex(m_BlokData,Size); } else { printf("BLOK标志错误!\n"); return false; } return true; } // 读取地图CELL的数据 bool ReadGameMap::ReadCELL(FILE *fp, uint32 Flag, uint32 Size) { if (Flag==0x43454C4C) { m_cell.Data = new uint8[Size]; // 分配单元数据的内存空间 fread(m_cell.Data,Size,1,fp); // 读取单元CELL的数据 m_cell.Size=Size; //printf("CELL的数据:\n"); //PrintHex(m_CellData,Size); } else { printf("CELL标志错误!\n"); return false; } return true; } // 读取地图BRIG的数据 bool ReadGameMap::ReadBRIG(FILE *fp, uint32 Flag, uint32 Size) { if (Flag==0x42524947) { m_brig.Data = new uint8[Size]; // 分配单元数据的内存空间 fread(m_brig.Data,Size,1,fp); // 读取单元BRIG的数据 m_brig.Size=Size; //printf("BRIG的数据:\n"); //PrintHex(m_BirgData,Size); } else { printf("BRIG标志错误!\n"); return false; } return true; }// 读取JPGH的数据 MapData ReadGameMap::ReadJpghData() { return m_jpgh; } // 读取HEAD的数据 MapData ReadGameMap::ReadHeadData() { return m_head; } // 读取IMAG的数据 MapData ReadGameMap::ReadImagData() { return m_imag; } // 读取JPEG的数据 MapData ReadGameMap::ReadJpegData() { return m_jpeg; } // 读取MASK的数据 MapData ReadGameMap::ReadMaskData(uint8 ID) { return m_mask[ID]; } // 读取BLOK的数据 MapData ReadGameMap::ReadBlokData() { return m_blok; } // 读取CELL的数据 MapData ReadGameMap::ReadCellData() { return m_cell; } // 读取BRIG的数据 MapData ReadGameMap::ReadBrigData() { return m_brig; }缺少"ReadGameMap.h"文件