?? cbgame.h
字號(hào):
/////////////////
// CBGame.h : 《赤壁》全局?jǐn)?shù)據(jù)結(jié)構(gòu)
// CBGame.h : << chibi >> global data structure
//
// v0011 : Oct.18.1996
// v0012 : Nov.28.1996
// v0013 : Feb.5.1997, changed setunitdata() part in GAME_ReadMedFile()
// add function GAME_ReadMedHeader()
// v0020 : Feb.28.1997, add function named DATA_ReadDATAFile()
//
// v0030 : May.2.1997, add save&load file, read&write option file functions
// v0031 : May.14.1997, add some values in main structure: nBuildType, nMusicID
//
// 編寫 : 劉剛
// written by : Liu Gang
//
// 編譯器 : Visual C++ 4.2
// Compiler : Visual C++ 4.2
//
// 版權(quán) : 北京前導(dǎo)軟件有限公司 1996-1997
// Copyright : WayAhead Co.Ltd. 1996-1997
/////////////////
// 此文件用來(lái)讀取游戲設(shè)置,地圖數(shù)據(jù),包含所有對(duì)單元(將領(lǐng)、士兵、建筑)
// 的操作。
#ifndef __CBGAME_H__
#define __CBGAME_H__
#include "CBCtrl.h"
//#include "CBData.h"
#define GAME_ERROR_ID 800
// 游戲者的最大數(shù)
#define GAME_PLAYER_MAX 5
/////////
// 將領(lǐng)General
// 并且?guī)в胁筷?duì)的屬性
#define GENERAL_TROOP_MAX 15
#define GENERAL_SHIQI_MAX 200
struct GENERAL_STRUCT
{
// 基本屬性
WORD nID; // 將領(lǐng)的編號(hào)
BYTE nType; // 部隊(duì)的類型(MAP_UNIT_TYPE_GEN or MAP_UNIT_TYPE_WGEN)
// 個(gè)人屬性
// BYTE nHealth; // 將領(lǐng)的體力
// BYTE nTactic; // 謀略
// BYTE nLevel; // 將領(lǐng)的級(jí)別
// WORD nExperience; // 將領(lǐng)的經(jīng)驗(yàn)
// 部隊(duì)屬性
//WORD wTroopNum; // 所帶士兵的個(gè)數(shù)
WORD wTroop[GENERAL_TROOP_MAX]; // 所帶士兵的ID數(shù)組
BYTE nLineUp; // 陣型
BYTE nMorale; // 部隊(duì)的士氣
// struct CTRL_TASK_STRUCT Task; // 部隊(duì)的任務(wù)
// struct CTRL_TASK_STRUCT Status; // 部隊(duì)的狀態(tài)
};
/////////
/////////
// 建筑Building
struct BUILDING_STRUCT
{
// 基本屬性
DWORD dwUpgrade[3]; // 升級(jí)
int nResource; // 資源儲(chǔ)量
int nFireLvl; // 火的級(jí)別
int nFireID[3]; // 所擁有的火的ID
};
/////////
/////////
// 士兵Soldier
#define SOLDIER_ONBOARD_MAX 16
struct SOLDIER_STRUCT
{
// 基本屬性
WORD nGenID; // 將領(lǐng)ID
BYTE nHealth; // 士兵的體力
BYTE nMorale; // 士兵的士氣
BYTE nThinkModal; // 士兵的思考模型
DWORD dwBuild; // 建造
// 只有工人有效
int nResType; // 資源類型,0樹(shù)木,1麥田,2,鐵礦,3錢
int nResource; // 已采集的資源的數(shù)量
// 只有運(yùn)輸船有效
BOOL bOnBoard; // 為真時(shí),有部隊(duì)在船上
int nOnBoard; // 在船上的部隊(duì)數(shù)
int nOnBoardSoldier;// 在船上的部隊(duì)人數(shù)
};
/////////
/////////
// 運(yùn)輸船Ship
/////////
struct SHIP_STRUCT
{
int nNum; // 在運(yùn)輸船上的士兵的個(gè)數(shù)
int nSoldier; // 在運(yùn)輸船上的士兵的人數(shù)
};
/////////
/////////
// 單元結(jié)構(gòu)
#define GAME_MARCH_MAX 128
struct UNIT_STRUCT
{
// basic attributes 基本屬性
BYTE nType; // 單元的類型,見(jiàn)宏定義MAP_UNIT_TYPE_
WORD nID; // 本單元的ID
WORD nIDAttackMe; // 被我攻擊的單元ID
int nLife; // 生命值
// 幀,每幀在圖素庫(kù)中的位置(行,列)
struct CTRL_FRAME_STRUCT Draw;
int nCounter; // 用來(lái)進(jìn)行建造或死亡后的記數(shù)
// 狀態(tài)
struct CTRL_TASK_STRUCT Status;
// 任務(wù)
struct CTRL_TASK_STRUCT Task;
// 行軍路線
BYTE MarchTrack[GAME_MARCH_MAX];
int StepNum;
// 陣型
POINT ptZhenFa; // 在陣型中的相對(duì)位置
int nZhenFa; // 陣型編號(hào),見(jiàn)CBCtrl.h中的enum CTRL_ZHENXING
int bPause; // 暫停,只暫停一輪
// 攻擊力和防御力
BYTE nFarAttack;
BYTE nNearAttack;
BYTE nFarDefend;
BYTE nNearDefend;
// test only
int nHasShadow;
// 只有投石車和弓箭手有效, not used now
// BOOL bHasStone; // 為真時(shí),投出一塊石頭
//ADDED BY TIAN YUE.
WORD nPos; //記錄物體在逃避過(guò)程中的標(biāo)志。
WORD nBloodPos; //記錄物體在受到火燒時(shí)減血的標(biāo)志。
union
{
struct GENERAL_STRUCT Gen;
struct BUILDING_STRUCT Build;
struct SOLDIER_STRUCT Soldier;
struct SHIP_STRUCT Ship;
};
};
/////////
/////////
// 君主(游戲者)Player
#define PLAYER_UNIT_MAX 200
#define PLAYER_NONE 0
#define PLAYER_1 1
#define PLAYER_2 2
#define PLAYER_3 3
#define PLAYER_4 4
#define PLAYER_TYPE_NONE 0
#define PLAYER_TYPE_HUMAN 1
#define PLAYER_TYPE_COMPUTER 2
#define PLAYER_TYPE_REMOTE 3
#define PLAYER_RELATION_ME 0
#define PLAYER_RELATION_ALLY 1
#define PLAYER_RELATION_ENEMY 2
#define PLAYER_GROUP_MAX 20
#define PLAYER_GRADE_MAIN 0
#define PLAYER_GRADE_GONGJIAN 1
#define PLAYER_GRADE_BINGQI 2
#define PLAYER_GRADE_HUJIA 3
#define PLAYER_GRADE_TOUSHICHE 4
#define PLAYER_GRADE_CHUAN1 5
#define PLAYER_GRADE_CHUAN2 6
#define PLAYER_GRADE_CHUAN3 7
struct PLAYER_STRUCT
{
// 基本屬性
BYTE nID; // 游戲者ID
int nType; // 游戲者類型
int nBuildType; // 建筑的類型,0為城內(nèi)建筑,1為城外建筑
int nThink; // 本關(guān)計(jì)算機(jī)君主的思考模型,0為陸戰(zhàn),1為水戰(zhàn),2為無(wú)基地
int nTechLvl; // 本游戲者可以達(dá)到的技術(shù)級(jí)別,1-4
//int nRelation; // 游戲者和我自己的關(guān)系
char strName[34]; // 游戲者名稱
// 同盟控制
int nAllies[GAME_PLAYER_MAX];// 存放同盟游戲者的編號(hào),沒(méi)有自己的
// 資源
//DWORD dwSoldier; // 預(yù)備隊(duì)
int nFood; // 已采集的糧食
int nWood; // 已采集的木材
int nIron; // 已采集的鐵
int nGold; // 現(xiàn)金
// 內(nèi)部計(jì)算用數(shù)據(jù)
DWORD dwLifeUp; // 生命值增加的數(shù)量
char nAddNearAttack[4]; // 近程攻擊力變化,可為負(fù),分別對(duì)應(yīng)于100,200,500,1000人部隊(duì)
char nAddFarAttack[4]; // 遠(yuǎn)程攻擊力變化,可為負(fù)
char nAddNearDefend[4]; // 近程防御力變化,可為負(fù)
char nAddFarDefend[4]; // 遠(yuǎn)程防御力變化,可為負(fù)
char nAddSFarAttack; // 車兵攻擊力變化
char nAddWaterAttack[2]; // 水兵的攻擊力變化
char nAddWaterDefend[2]; // 水兵的防御力變化
char nAddViewRange; // 視野變化,可為負(fù)
char nAddFightRange; // 射程變化,可為負(fù)
char nAddMoveSpeed; // 移動(dòng)速度變化,可為負(fù)
char nAddFightSpeed; // 攻擊速度變化,可為負(fù)
BYTE nGrade[8]; // 主建筑級(jí)別,
// 木材場(chǎng)弓箭級(jí)別,
// 武器場(chǎng)兵器級(jí)別,
// 武器場(chǎng)護(hù)甲級(jí)別,
// 車兵級(jí)別
// 船塢級(jí)別
int nFoodStore; // 糧倉(cāng)和主帥帳的數(shù)量
// 士兵和建筑的控制
WORD wUnitCounter; // 添加單元時(shí)記數(shù)
WORD wLastUnit; // 最后一個(gè)單元的序號(hào)
struct UNIT_STRUCT Unit[PLAYER_UNIT_MAX];
// 部隊(duì)的控制
WORD wGroupCounter;
WORD wGroup[PLAYER_GROUP_MAX];
};
/////////
/////////
// 全局Game
struct GAME_STRUCT
{
// 基本程序?qū)傩? long lVersion; // 存放程序的版本號(hào)
long lVerMED; // 存放MED文件的版本號(hào)
char strPath[_MAX_PATH]; // 存放程序的路徑
char strPathMED[_MAX_PATH]; // 存放MED文件的路徑,加載于程序路徑之上
char strPathDAT[_MAX_PATH]; // 存放DAT文件的路徑,加載于程序路徑之上
char strPathBMP[_MAX_PATH]; // 存放BMP文件的路徑,加載于程序路徑之上
char strPathAVI[_MAX_PATH]; // 存放AVI文件的路徑,加載于程序路徑之上
char strPathWAV[_MAX_PATH]; // 存放WAV文件的路徑,加載于程序路徑之上
char strNameMED[_MAX_FNAME]; // MED的名稱
char strNameBTL[_MAX_FNAME]; // 戰(zhàn)場(chǎng)初始數(shù)據(jù)文件的名稱
char strNameAVI[_MAX_FNAME]; // 本關(guān)結(jié)束應(yīng)該播放的AVI文件的名稱
char strNameOPT[_MAX_FNAME]; // 游戲設(shè)置文件名
char strStartAVI[_MAX_FNAME];// 游戲開(kāi)始片頭動(dòng)畫(huà)名稱
char strStartWAV[_MAX_FNAME];// 游戲開(kāi)始主界面背景音樂(lè)
// game control
BOOL bNetwork; // 為真時(shí),程序?yàn)榫W(wǎng)絡(luò)模式, 現(xiàn)在無(wú)效,Nov.4.1997
int nProgramState; // 程序運(yùn)行狀態(tài),見(jiàn)宏定義PROGRAM_STATUS_
int nProgramStateLast; // 上一個(gè)程序運(yùn)行狀態(tài),見(jiàn)宏定義PROGRAM_STATUS_
int nCommandState; // 程序命令狀態(tài),見(jiàn)宏定義COMMAND_STATUS_
int nCommandStateLast; // 上一個(gè)程序命令狀態(tài),見(jiàn)宏定義COMMAND_STATUS_
// game options
UINT nSpeed; // 運(yùn)行速度
UINT nSpeedScroll; // 滾屏速度
int nVolume; // 音效的音量大小,range from 0 to -5000,1時(shí)關(guān)閉
int nVolumeCD; // 音樂(lè)的音量大小,range from 0 to -5000,1時(shí)關(guān)閉
BOOL bFightEnabled; // AVI的開(kāi)關(guān)
BOOL bFogOfWar; // 開(kāi)關(guān)陰影
// 本關(guān)屬性
int nID; // 本關(guān)的ID
char strName[_MAX_PATH]; // 本關(guān)的名稱
POINT ptStart[GAME_PLAYER_MAX]; // 游戲者開(kāi)始的位置
int nMusicID; // 本關(guān)背景音樂(lè)的ID
WORD wWeather; // 天氣:晴,陰,雨,雪
WORD wTime; // 時(shí)間,高8位為日期,低8位為小時(shí)
WORD wWind; // 風(fēng),高8位為風(fēng)向,低8位為風(fēng)力
// 內(nèi)部計(jì)算用數(shù)據(jù)
BYTE nRatioSoldier; // 士兵攻擊系數(shù)
BYTE nRatioBuilding; // 建筑攻擊系數(shù)
BYTE nRatioGeneral; // 將領(lǐng)攻擊系數(shù)
// 所轄君主Player
int nMe; // 我是第幾號(hào)游戲者
struct PLAYER_STRUCT Players[GAME_PLAYER_MAX];
};
/////////
struct GAME_TIME_STRUCT
{
SYSTEMTIME Start;
SYSTEMTIME Now;
SYSTEMTIME Sub;
};
////////////
// 全局量
extern struct GAME_STRUCT GAME;
// 游戲安裝路徑
extern char GAME_strSetupDirectory[_MAX_PATH];
extern int GAME_nSlot;
// 游戲是豪華版時(shí)用來(lái)區(qū)分A盤和B盤
// 是0則不區(qū)分,是1為A盤,是2為B盤
extern int GAME_nDisk;
// 網(wǎng)絡(luò),Nov.4.1997, LG & LHJ
extern BOOL GAME_bNetwork;
extern BOOL GAME_bNetPlayerOK[GAME_PLAYER_MAX];// 確認(rèn)連接完成
// 戰(zhàn)斗記分
extern struct RUN_COUNTDOWN RUN_CountDown[GAME_PLAYER_MAX];
////////////
// 函數(shù)
// 初始化
void GAME_InitGame();
void GAME_InitGamePlayers();
//- Tian Yue
#ifndef TNEBUG
// 讀取各種設(shè)置數(shù)據(jù)文件
// hwnd : window to receive error message
// return : TRUE if successful
BOOL GAME_ReadCBSetFile( HWND hwnd );
// 讀取戰(zhàn)場(chǎng)數(shù)據(jù)文件
// hwnd : window to receive error message
// filename : battle field data file name
// path : battle field data file path
// return : TRUE if successful
BOOL GAME_ReadMEDFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );
// Nov.6.1997, Liu Gang
// 讀取網(wǎng)絡(luò)戰(zhàn)場(chǎng)數(shù)據(jù)文件
// hwnd : window to receive error message
// filename : battle field data file name
// path : battle field data file path
// return : TRUE if successful
BOOL GAME_ReadMEDFileNet( HWND hwnd, LPCTSTR filename, LPCTSTR path );
// 讀取戰(zhàn)場(chǎng)數(shù)據(jù)文件頭,僅供MINI_Load()縮略圖使用
// hwnd : window to receive error message
// filename : battle field data file name
// path : battle field data file path
// return : TRUE if successful
BOOL GAME_ReadMEDHeader( HWND hwnd, LPCTSTR filename, LPCTSTR path );
// 讀取戰(zhàn)場(chǎng)初始化數(shù)據(jù)文件
// hwnd : window to receive error message
// nBattle : battle number
// filename : battle field data file name
// path : battle field data file path
// return : TRUE if successful
BOOL GAME_ReadBTLFile( HWND hwnd, int nBattle, LPCTSTR filename, LPCTSTR path );
// 釋放所有游戲中產(chǎn)生出來(lái)的單元和其它個(gè)體
void GAME_ReleaseAllUnits();
////////////
////////////
// 游戲開(kāi)始
BOOL GAME_Begin( int nGameID );
// 游戲結(jié)束
void GAME_End( int nGameID );
// 存盤
// nSlot : 存盤文件號(hào)
BOOL GAME_Save( int nSlot );
// 取盤
// nSlot : 存盤文件號(hào)
BOOL GAME_Load( int nSlot );
// 得到存盤信息
// nSlot : 存盤文件號(hào)
// strInfo : 從存盤文件里得到的存盤信息
BOOL GAME_GetSaveInfo( int nSlot, LPSTR strInfo );
// 設(shè)置存盤信息
// strInfo : 計(jì)算出來(lái)的存盤信息,此信息用將被存儲(chǔ)到存盤文件上
BOOL GAME_CalcSaveInfo( LPSTR strInfo );
// 從文件里得到將領(lǐng)信息,經(jīng)驗(yàn),升級(jí),并設(shè)置到全局結(jié)構(gòu)DATA_Lib.Gen中
// nSlot : 存盤文件號(hào)
BOOL GAME_GetGenInfo( int nSlot );
// 把將領(lǐng)信息,經(jīng)驗(yàn),升級(jí),從全局結(jié)構(gòu)DATA_Lib.Gen中寫到文件里
// nSlot : 存盤文件號(hào)
void GAME_SetGenInfo( int nSlot );
////////////
////////////
// 讀游戲設(shè)置文件
BOOL GAME_ReadOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );
// 寫游戲設(shè)置文件
BOOL GAME_WriteOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );
////////////
////////////
// 得到安裝路徑
// filename : 存放安裝路徑的文件名
// strSrcPath : 返回的安裝路徑
// nSize : 路徑字符串的大小
BOOL GAME_GetSrcPath( LPCTSTR filename, LPSTR strSrcPath, int nSize );
////////////
////////////
// 游戲結(jié)束播放結(jié)尾動(dòng)畫(huà)和制作群
// nType : 結(jié)束類型
void GAME_Ending( int nType );
// nType : -1, continue the end procedure
// 0-3, begin some kind of ending, must used in the frist call
// -2, jump to the last procedure
BOOL GAME_EndingEx( int nType=-1 );
////////////
////////////
// 設(shè)置同盟,用于網(wǎng)絡(luò)版
// Aug. 20. 1997
// nPlayer1, nPlayer2 : 兩個(gè)游戲者
// bSet : TRUE時(shí)為設(shè)置同盟,否則為解除同盟
void GAME_SetAlly( int nPlayer1, int nPlayer2, BOOL bSet=TRUE );
////////////
// Nov.7.1997
// 得到豪華版的AB盤信息
// nSlot : 存盤文件號(hào)
// 返回0為無(wú)磁盤是AB盤的信息,1為A盤,2為B盤
int GAME_GetSaveInfoAB( int nSlot );
//- Tian Yue
#endif // TNEBUG
#endif // __CBGAME_H__
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -