📄 mirmap.cpp
字号:
#include "StdAfx.h"
#include "mirmap.h"
#include ".\mirmap.h"
#include "wilfile.h"
CMirMap::CMirMap(LPCTSTR lpFileName)
{
m_lpMapData=NULL;
ZeroMemory(&m_MapHeader,sizeof(m_MapHeader));
if(LoadMap(lpFileName)==FALSE)
{
//MessageBox(0,"打开地图错误",0,0);
throw "Open Map file eoor";
}
}
CMirMap::~CMirMap(void)
{
}
BOOL CMirMap::LoadMap(LPCTSTR lpFileName)
{
char szModuleFileName[0x1000];
GetModuleFileName(0,szModuleFileName,0x1000);
long nPos=strlen(szModuleFileName);
while(nPos>0)
{
if(szModuleFileName[nPos]=='\\')
{
szModuleFileName[nPos]=(char)0;
strcat(szModuleFileName,"\\map\\");
break;
}
nPos--;
}
strcat(szModuleFileName,lpFileName);
strcat(szModuleFileName,".map");
FILE*fp;
fp=fopen(szModuleFileName,"rb");
if(fp==NULL)
{//打开文件错误
MessageBox(0,"打开地图错误",0,0);
return FALSE;
}
ZeroMemory(&m_MapHeader,sizeof(m_MapHeader));
fread(&m_MapHeader,sizeof(m_MapHeader),1,fp);
if(m_lpMapData)
{
delete[]m_lpMapData;
}
m_lpMapData=NULL;
m_lpMapData=new MapPoint[m_MapHeader.Width*m_MapHeader.Height];
fread(m_lpMapData,m_MapHeader.Width*m_MapHeader.Height,sizeof(MapPoint),fp);
fclose(fp);
return TRUE;
}
MapPoint* CMirMap::GetMapPoint(int x, int y)
{
if(x>0 && x<m_MapHeader.Width && y>0 && y<m_MapHeader.Height)
return &m_lpMapData[y+x*m_MapHeader.Height];
else
return m_lpMapData;
}
CWilFile tiles("Tiles");
CWilFile smtiles("SmTiles");
CWilFile object[]=
{
CWilFile("Objects"),
CWilFile("Objects2"),
CWilFile("Objects3"),
CWilFile("Objects4"),
CWilFile("Objects5"),
CWilFile("Objects6"),
CWilFile("Objects7"),
CWilFile("Objects8"),
CWilFile("Objects9"),
CWilFile("Objects10"),
};
extern HFONT g_hFont;
extern int MouseX;
extern int MouseY;
#define DRAW_W (SCREEN_W/48+5)
#define DRAW_H (SCREEN_H/30+20)
void CMirMap::DrawMap(LP_DISPLAY lpDisplay,int sx,int sy,int x,int y)
{
//int mx=MouseX/48;
//int my=MouseY/32;
WORD index;
//画大背景
for(int i=-5;i<DRAW_W;i++)
{
for(int j=-3;j<DRAW_H;j++)
{
if( (((i+x)%2)==0 )&& (((j+y)% 2)==0))
{
index=GetMapPoint(i+x,j+y)->BackImg;
index=index&0x7fff;
if(index>0)
{
LP_BITMAPX bmp=tiles.LoadBitmap(lpDisplay,index-1);
if(bmp)
{
lpDisplay->DrawBitmap(sx+i*48,sy+j*32,bmp,SCREENBUFFER,true);
}
}
}
}
}
//画小背景
for(int i=-5;i<DRAW_W;i++)
{
for(int j=-3;j<DRAW_H;j++)
{
index=GetMapPoint(i+x,j+y)->MiddImg;
if(index>0)
{
LP_BITMAPX bmp=smtiles.LoadBitmap(lpDisplay,index-1);
if(bmp)
{
lpDisplay->DrawBitmap(sx+i*48,sy+j*32,bmp,SCREENBUFFER,true);
}
}
}
}
//画前景
for(int i=-5;i<DRAW_W;i++)
{
for(int j=-3;j<DRAW_H;j++)
{
index=GetMapPoint(i+x,j+y)->ForeImg&0x7FFF;
WORD area=GetMapPoint(i+x,j+y)->Area;
WORD aniframe=GetMapPoint(i+x,j+y)->AniFrame;
if((aniframe&0x80) >0)
{
aniframe&=0x7f;
}
if(aniframe>0)
{
index = index + (1000 % (aniframe * (GetMapPoint(i+x,j+y)->AniTick +1)))/(GetMapPoint(i+x,j+y)->AniTick +1);
}
if((GetMapPoint(i+x,j+y)->DoorOffset&0x80) >0 && (GetMapPoint(i+x,j+y)->DoorIndex&0x7f)>0)
{
index+=GetMapPoint(i+x,j+y)->DoorIndex&0x7f;
}
if(index>=0 && area<sizeof(object))
{
LP_BITMAPX bmp=object[area].LoadBitmap(lpDisplay,index-1);
if(bmp)
{
//if(bmp->GetHeight()==32 && bmp->GetWidth()==48)
{
// lpDisplay->DrawBitmap(sx+i*48,sy+j*32,bmp,SCREENBUFFER,true);
}
//else
{
//if(!IsBlend)
{
RECT rect;
rect.left=sx+i*48-bmp->GetWidth()+48;
rect.top=sy+j*32-bmp->GetHeight()+32;
lpDisplay->DrawBitmap(rect.left,rect.top,bmp,SCREENBUFFER,true);
//lpDisplay->DrawFillRect(SCREENBUFFER,rect.left,rect.top,rect.left+bmp->GetWidth(),rect.top+bmp->GetHeight(),RGB2Hi(255,255,255),24);
//lpDisplay->DrawRect(SCREENBUFFER,rect.left,rect.top,rect.left+bmp->GetWidth(),rect.top+bmp->GetHeight(),RGB2Hi(0,0,255));
}
}
}
}
}
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -