?? map.h
字號:
//********************************************
// 地圖 相關函數
// 創建于2000年3月14日
//********************************************
#ifndef _MAP_H_
#define _MAP_H_
#include <vector>
#include <list>
using namespace std;
//動畫CELL
struct stAniCell
{
int page; //頁面
int cell; //圖塊
int time; //延時
};
class CNpc;
class CGpFont;
typedef vector<stAniCell> vectorAniCell;
typedef vector<stAniCell>::iterator itAniCell;
typedef vector<CNpc*> vectorNpc;
typedef vector<CNpc*>::iterator itNpc;
#define MAP_HEAD "Gold Point Sword II MapFile V1.0"
#define BLOCK_CELL 4095 //空格子
#define BLOCK_CP 127 //空陷阱
#define MAX_HOOK 32 //最大陷阱數量
#define CP_CHANGE 1 //切換點
//=============
//地圖類
class CMap
{
public:
//物體層次
enum ObjLevel
{
OL_UP=1, //人物上面
OL_NORMAL=0, //人物同級
};
//格子結構
struct stCell
{
unsigned GroundPic:6; //地面頁面編號(普通0-59 動態60-63)
unsigned Ground:12; //地面編號
unsigned ObjPic:6; //物體頁面編號(普通0-59 動態60-63)
unsigned Obj:12; //物體編號
unsigned Obj2Pic:6; //物體2頁面編號(普通0-59 動態60-63)
unsigned Obj2:12; //物體2編號
unsigned Block:1; //是否阻擋
unsigned Level:4; //物體所在層次(0-15)
unsigned CP:7; //陷阱
unsigned Level2:4; //物體2所在層次(0-15)
unsigned MouseType:3; //鼠標類型
unsigned CPType:1; //陷阱類型
unsigned res:13; //保留
};
static vectorAniCell m_vAniCell[4096]; // 動畫CELL
static int m_nAniCount[4096]; // 動畫的進度
static int m_nAniFrame[4096]; // 動畫當前楨
public:
static int AniCellNum; //動畫CELL數量
static stAniCell *AniCell; //動畫CELL
long GetAniCellPage(const long ground, RECT& rect); // 獲取動態圖素的當前頁和RECT
long GetAniCellPageObj(const long ground, RECT& rect); // 獲取動態圖素的當前頁和RECT
long GetAniCellPageObj2(const long ground, RECT& rect); // 獲取動態圖素的當前頁和RECT
long GetAniPage(const long num, RECT& rect); // 獲取動態圖素的當前頁和RECT
long AniLoop(); // 動畫過一楨
int Id; //編號
char Name[32]; //名字
int Width, Height; //大小 單位:格子
stCell *Cell; //格子
int SX,SY; //所處場景的左上坐標(格子)
int DX,DY; //生成場景時的左上坐標偏移(像素 -32<xxx<=0 )
int sx,sy; //所處場景的左上絕對坐標(像素 sx=SX*32-DX)
int startx, starty; //繪圖時的起始格子
int endx, endy; //繪圖時的結束格子
int Hook_Num; //陷阱數量
char Hook[MAX_HOOK][64]; //陷阱列表
vectorNpc m_vNpc; //NPC
vectorNpc m_vSortNpc;
int ScrollX, ScrollY; //卷動地圖的目標點
int ScrollStep; //卷動的幅度
CGpFont ShowNameFont; //地圖名字顯示字體對象
int ShowNameCount; //地圖名字顯示記數器(每一楨減一)
int ShowNameAlpha; //地圖名字顯示alpha度
char CurrentMapFileName[MAX_PATH]; //當前地圖文件名
char CurrentMapFilePath[MAX_PATH]; //當前地圖路徑
char m_strBackBmpFilename[128]; // 背景圖片名稱
LPDIRECTDRAWSURFACE m_pBackBmp; // 背景圖片
public:
CMap(); //構造(填寫顯示坐標列表)
~CMap(); //析構
void LoadAniCell(char *file, char *index); //讀入動態元素
bool InitMap(int,int); //初始化一張地圖
bool LoadMap(char *); //裝入地圖
bool SaveMap(char *); //保存地圖
void Load(char *); //讀入進度
void Save(char *); //保存進度
void ShowMap(bool active=true,LPDIRECTDRAWSURFACE suft = lpDDSBack);//顯示地圖
void ShowEditMap(); //顯示編輯時的地圖
bool ChangeScene(int cp, bool bCenter=true); //場景切換(cp=切換點編號)
void FadeIn(int Style=2, int time=50, WORD color=0); //淡入
void FadeOut(int Style=2, int time=50); //淡出
void CenterMap(int, int); //設置地圖中心點
void ScrollTo(int, int, int); //卷動地圖到某點
void ScrollLoop(); //卷動循環
void CountDisplayGrid(); //計算顯示格子
void AddHook(int x, int y, char *string); //添加地圖陷阱
void SetHook(int x, int y, int num); //設置地圖陷阱
void SetCell(int level, int x, int y, int num, int page); //設置地圖某格地面
void SetBlock(int x, int y, int block); //設置地圖阻擋
void SetLevel(int x, int y, int level1, int level2); //設置地圖層次
bool LoadIniNpcList(char *); //從Ini文件讀取NPC列表
int GetNpcId(char *); //從名字獲取NPC的編號
int AddNpc(char *, char *); //加入一個NPC(返回編號)
int DelNpc(int); //刪除一個NPC
void ClearNpc(); //清空NPC
void SortNpc(); //排序NPC
int _GetCell(int,int,int); //獲取一個點所在的絕對格子
int _GetCellX(int,int); //獲取一個點所在的格子X
int _GetCellY(int,int); //獲取一個點所在的格子Y
int GetCell(int,int); //獲取一個點所在的格子
int GetCellX(int,int); //獲取一個點所在的格子X
int GetCellY(int,int); //獲取一個點所在的格子Y
RECT GetRectangle(int); //獲取一個格子的坐標
RECT _GetRectangle(int,int); //獲取一個格子的絕對坐標
void FillCell(int, int, WORD); //填充一個格子
void CreateFullMap(LPDIRECTDRAWSURFACE lpSurf, int lSurfWidth, int lSurfHeight); //把整張地圖復制到lpSurf
void ShowFullMap(); //顯示整張地圖
void SaveFullMap(char* filename, float fPer=1.f); // 保存整張地圖
void RestoreLevel(int n=0); //恢復所有層次關系
void RestoreBlock(int n=0); //恢復所有阻擋關系
void RestoreMouseType(int n=0); //恢復所有鼠標狀態關系
////////////////////////////////////////////////////////////////
// 敵人列表
////////////////////////////////////////////////////////////////
private:
BOOL m_bScrollRight; // 向右卷地圖
BOOL m_bScrollDown; // 向下卷地圖
int m_pEnemyList[16]; // 敵人編號列表
int m_nEnemyNum; // 敵人數量
int m_nEnemyFrequency; // 敵人出現頻率 (0-100)
public:
bool* Block; //移動時候的阻擋數組
void SetCPType(int x,int y,int type);//設置陷阱類型
int GetEnemyNum() { return m_nEnemyNum; }
void SetEnemyNum(int n) { m_nEnemyNum = n; }
int GetEnemyList(int n) { return m_pEnemyList[n]; }
void SetEnemyList(int n, int m) { m_pEnemyList[n] = m; }
void ClearEnemyList() { memset(m_pEnemyList, 16*4, 0); }
int GetEnemyFrequency() { return m_nEnemyFrequency; }
void SetEnemyFrequency(int n) { m_nEnemyFrequency = n; }
};
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -