?? cbctrl.h
字號(hào):
/////////////////
// CBCtrl.h : 《赤壁》全局控制數(shù)據(jù)結(jié)構(gòu)
// CBCtrl.h : << chibi >> global contral data structure
//
// v0010 : Oct.3.1996
// v0011 : Oct.18.1996
// v0012 : Jan.25.1997
// v0013 : Feb.5.1997
// v0014 : Feb.15.1997, add CTRL_UNIT_Create(), CTRL_UNIT_Destroy(),
// changed some TASK_List functions
// v0020 : Mar.29.1997, add most controls
// v0021 : Apr.2.1997, add deploy asserts
// v0030 : May.16.1997, add Block(), OpenDoor(), etc. changed a lot
//
// 編寫 : 劉剛
// 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
/////////////////
// 此文件包含游戲的控制結(jié)構(gòu)(命令,狀態(tài),步,幀)和對(duì)控制的處理。
#ifndef __CBCTRL_H__
#define __CBCTRL_H__
#define CTRL_ERROR_ID 600
//- Tian Yue
#define NDBUG
/////////////////
// 任務(wù)和狀態(tài)
// 結(jié)束,堵塞,取消
// 攻擊,移動(dòng),防御,休息,計(jì)謀,
// 解散,運(yùn)送,建造,修理,陣型,
// 單挑,運(yùn)載,卸載,組建,加入,
// 生產(chǎn),提升,刪除,
// 建造中,生產(chǎn)中,提升中,
// 取消建造,取消生產(chǎn),取消提升
// 回送,開門,混亂,埋伏
enum CTRL_TASK {
JIESHU=200,DUSE=255,QUXIAO=0,
GONGJI,YIDONG,FANGYU,XIUXI,JIMOU,
JIESAN,YUNSONG,JIANZAO,XIULI,ZHENXING,
DANTIAO,YUNZAI,XIEZAI,ZUJIAN,JIARU,
SHENGCHAN,TISHENG,SHANCHU,
JIANZAOZHONG, SHENGCHANZHONG, TISHENGZHONG,
QXJIANZAO, QXSHENGCHAN,QXTISHENG,
HUISONG,KAIMEN,HLUAN,MFU
};
/////////////////
/////////////////
// 計(jì)謀
#define CTRL_JIMOU_MAX 12
// 計(jì)謀取消,
// 激勵(lì),加速,減速,遠(yuǎn)視,混亂,
// 滾木,埋伏,恢復(fù),火攻,
// 沼澤
enum CTRL_JIMOU {
JIMOUQUXIAO=0,
JILI,JIASU,JIANSU,YUANSHI,HUNLUAN,
GUNMU,MAIFU,HUIFU,HUOGONG,
ZHAOZE,
};
/////////////////
/////////////////
// 提升種類
// 主帥帳——升級(jí)1,升級(jí)2,升級(jí)3
// 木材場(chǎng)——改造弓箭1,改造弓箭2,改造弓箭3
// 武器場(chǎng)——改造兵器1,改造兵器2,改造兵器3
// 改造護(hù)甲1,改造護(hù)甲2,改造護(hù)甲3
// 錢 莊——賣木材1,賣糧食1,賣鐵礦1
// 賣木材2,賣糧食2,賣鐵礦2
// 車兵所——改造投石車1,改造投石車2
// 船 塢——改造小戰(zhàn)船,改造大戰(zhàn)船,改造船體
enum CTRL_TISHENG {
TISHENGQUXIAO=255,
SHENGJI1=0,SHENGJI2,SHENGJI3,
GONGJIAN1,GONGJIAN2,GONGJIAN3,
BINGQI1,BINGQI2,BINGQI3,
HUJIA1,HUJIA2,HUJIA3,
MUCAI1,LIANGSHI1,TIEKUANG1,
MUCAI2,LIANGSHI2,TIEKUANG2,
TOUSHICHE1,TOUSHICHE2,
XIAOCHUAN,DACHUAN,CHUANTI
};
/////////////////
/////////////////
// 陣型
#define CTRL_ZHENXING_MAX 10
// 陣型取消
// 一字長蛇陣,二龍出水陣,三才天地陣,四象奇門陣,五行梅花陣,
// 六合連環(huán)陣,七星北斗陣,八門金鎖陣,九宮八卦陣,十面埋伏陣
enum CTRL_ZHENXING {
ZHENXINGQUXIAO=0,
YIZI, ERLONG, SANCAI, SIXIANG, WUXING,
LIUHE, QIXING, BAMEN, JIUGONG, SHIMIAN
};
/////////////////
/////////////////
// 命令目的地類型
// 將領(lǐng),士兵,建筑,地形,
// 將領(lǐng)種類,士兵種類,建筑種類,
// 計(jì)謀種類,陣型種類,提升種類
enum CTRL_TASKEX {
JIANGLING, SHBING, JIANZHU, DIXING,
JIANGLINGZL, SHIBINGZL, JIANZHUZL,
JIMOUZL, ZHENXINGZL, TISHENGZL
};
/////////////////
/////////////////
// 運(yùn)送的資源類型
// 資源取消,
// 樹林,麥田,鐵礦,民居,糧倉,
// 所有資源
enum CTRL_RESOURCE {
QXZIYUAN=65535,
SHULIN=0, MAITIAN, TIEKUANG, MINJU, LIANGCANG,
SUOYOUZY
};
/////////////////
/////////////////
// 幀F(xiàn)rame
//#define CTRL_FRAME_MAX 16
#define CTRL_FRAME_NONE 65535
// 無效時(shí),nPlayer的值為CTRL_FRAME_NONE
struct CTRL_FRAME_STRUCT
{
// flag
WORD bUpdate; // TRUE時(shí)為可以顯示本單元
// nearly same as MAP_UNIT_CODE_STRUCT
WORD nPlayer; // 游戲者
WORD nFile; // 文件號(hào)
WORD nLayer; // 所在圖層
WORD nFrame; // 當(dāng)前幀
WORD nState; // 當(dāng)前狀態(tài)
WORD nDir; // 當(dāng)前方向
WORD nX; // 在原始地圖中的位置(行、列)
WORD nY;
WORD nDrawX; // 在原始地圖中的顯示位置(行、列)
WORD nDrawY;
// for animation
WORD nCol; // 在圖素庫中的位置(行、列)
WORD nRow;
// WORD nMaxFrame; // 最大幀
int nLocationSize; // 單元圖素的大小,與CTRL_ptLocations配合使用
POINT ptOff; // 相對(duì)于格子的位置(點(diǎn))
//由于行軍算法需要的變量
int nOff_Z; // 用于當(dāng)上山時(shí),Y軸的偏移量
int Status;
/////////////////////////
// saved values
WORD nXLast; // 在原始地圖中的上一個(gè)位置(行、列)
WORD nYLast;
POINT ptOffLast; // 相對(duì)于格子的上一個(gè)位置(點(diǎn))
//計(jì)謀
WORD wSTGCounter[CTRL_JIMOU_MAX]; // 計(jì)謀的記時(shí)器
BYTE nSTG[CTRL_JIMOU_MAX]; // 計(jì)謀變量,某位為1時(shí)為中某計(jì)
// 在沼澤地移動(dòng)速度要減慢
};
/////////////////
/////////////////
// 任務(wù)Task
// 任務(wù)隊(duì)列的大小,實(shí)際只能存儲(chǔ) n-1個(gè)內(nèi)容
// size of Task List
#define CTRL_TASK_LIST_MAX 65
struct CTRL_TASK_STRUCT
{
BOOL bDone; // 在產(chǎn)生任務(wù)時(shí),當(dāng)該結(jié)構(gòu)所有內(nèi)容都合法時(shí),為真
// 在執(zhí)行任務(wù)時(shí),完成任務(wù)為真
WORD nID; // 發(fā)出命令的單元ID
WORD nLevel; // 該命令的級(jí)別,0 is the highest, 5 is the lowest
BOOL bIRQ; // 是否可以被中斷
CTRL_TASK nTaskID; // 任務(wù)
DWORD nTaskIDEx; // 任務(wù)的類型,多為存放目的單元或事物的ID
DWORD nTaskIDEx2; // 任務(wù)的類型的附加型,YUNSONG和HUISONG時(shí)使用
WORD nParam1; // 因?yàn)槿蝿?wù)的不同有不同的意義
WORD nParam2;
WORD nParam3;
WORD nParam4; // 只有YUNSONG和HUISONG任務(wù)時(shí)有效
};
struct CTRL_TASK_SAVE_CMDUNIT
{
DWORD Cmd;
DWORD Ex;
DWORD Busy;
};
/////////////////
#ifndef TNEBUG
/////////////////
// 構(gòu)造命令,命令的產(chǎn)生
// clear assembling parameters
// 清除CTRL_hitSrc的內(nèi)容
// bForce : 強(qiáng)迫清除所有內(nèi)容
void CTRL_TASK_ClearAssembleSrc( BOOL bForce = FALSE );
// 清除CTRL_hitDest的內(nèi)容,并且重新設(shè)置命令組
void CTRL_TASK_ClearAssembleDest();
// 檢測(cè)鼠標(biāo)拖出的框內(nèi)是否包含單元(命令主體)
// 只設(shè)置CTRL_hitSrc的內(nèi)容nID, nLevel
// 檢測(cè)步驟:
// 1:是否是自己的部隊(duì)
// 2:該部隊(duì)是否還活著
// 3:如果選中將領(lǐng),則該將領(lǐng)的所有下屬士兵都被選中
// 4:如果有未整編的部隊(duì),則只有未整編的部隊(duì)被選中
// 5:如果都是整編的部隊(duì),則被選中
// 6:如果是建筑,則最后一個(gè)建筑被選中
// detect if mouse dragging rectangle contains units
// prcHit : rectangle mouse dragging
// wParam : 當(dāng)響應(yīng)時(shí),用來查看是否Ctrl或Shift鍵被按下了
// return value : TRUE if hit something
BOOL CTRL_TASK_AssembleSrc( CONST RECT *prcHit, WORD wParam );
// 檢測(cè)鼠標(biāo)發(fā)出的命令
// 只設(shè)置CTRL_hitDest的內(nèi)容nTaskID, nTaskIDEx, (nParam1)
// detect command message
// dwMessage : message ID
// return value : TRUE if detect it, and it is valid
BOOL CTRL_TASK_AssembleCmd( DWORD dwMessage, UINT lParam );
// 檢測(cè)鼠標(biāo)點(diǎn)擊的目的單元(命令客體)
// detect single unit to be target
// nPosX, nPosY : mouse hit position in pixel
// return value : TRUE if detected, FALSE if cancel the command, -1 if need try again
int CTRL_TASK_AssembleDest( int nPosX, int nPosY );
// 當(dāng)鼠標(biāo)右鍵按下時(shí),根據(jù)當(dāng)前選中的單元組,制定相應(yīng)的命令,選中目標(biāo)
// nPosX, nPosY : mouse hit position in pixel
// return value : TRUE if detected, FALSE if cancel the command, -1 if need try again
// 具體步驟:
// 1,如果已經(jīng)有了命令,取消該命令
// 2.1,如果主體是建筑則退出
// 2.2,如果主體不是自己人則退出
// 3,檢測(cè)鼠標(biāo)點(diǎn)擊位置
// 4,如果目標(biāo)是地形,
// 4.1,主體是工人部隊(duì),而且目標(biāo)是地形型資源,為運(yùn)送,目標(biāo)為地形類型
// 4.2,為移動(dòng),目標(biāo)為地形類型
// 6,如果目標(biāo)是建筑單元,主體是工人部隊(duì),
// 6.1,目標(biāo)為資源建筑,為運(yùn)送,目標(biāo)為單元類型
// 6.2,為修理
// 5,如果目標(biāo)是敵人的單元,
// 5.1,主體是攻擊部隊(duì),為攻擊
// 5.2,退出
// 7,為移動(dòng),目標(biāo)為單元類型
BOOL CTRL_TASK_AssembleCmdDest( int nPosX, int nPosY );
// 如果鼠標(biāo)點(diǎn)擊屏幕左方的部隊(duì)按鈕
BOOL CTRL_TASK_NumberButton( WORD wParam, UINT lParam );
// send the whole command set to TASK Current List
// also send this command to all the players over the network
// 下達(dá)命令,重新設(shè)置命令組
// must be send by human player, computer uses another function
void CTRL_TASK_DeployByHuman();
// send the whole command set to TASK List
// do not spread this command to other computers
// only used by computer
// nPlayer : player's ID, 0-4 are player 0-4
// pTask : the Task you want to send
// return vlaue : TRUE if there is room for the Task
void CTRL_TASK_DeployByComputer( int nPlayer, CONST struct CTRL_TASK_STRUCT *pTask );
/////////////////
/////////////////
//命令的執(zhí)行
/////////////////
// 初始化
// initialize
void CTRL_InitCtrl();
// copy from source task to destination task
// pTo : Task to be copied to
// pFrom : Task to copying from
extern void CTRL_TASK_Copy( struct CTRL_TASK_STRUCT *pTo, CONST struct CTRL_TASK_STRUCT *pFrom );
// clear Task
// pTask : Task to be cleared
extern void CTRL_TASK_Clear( struct CTRL_TASK_STRUCT *pTask );
// read Task from Task List, and set it to unit
// 從任務(wù)隊(duì)列中讀取命令,并下達(dá)給相應(yīng)單元
extern void CTRL_TASK_Main();
/////////////////
/////////////////
// 以下函數(shù)定義在CBCTRLS.cpp中
// defined in CBCTRLS.cpp
/////////////////
// 狀態(tài)處理
// check each unit if should change Status
void CTRL_STATUS_Main();
// change the Status of the unit
// pUnit : the unit to be changed to
extern void CTRL_STATUS_Change( struct UNIT_STRUCT *pUnit );
/////////////////
/////////////////
// basic functions
// 基本函數(shù)
// 產(chǎn)生單元,對(duì)陰影有特殊處理
// codeU : unit code to identifies the type of the unit
// nZ, nX, nY : position to locate,產(chǎn)生的位置
// return : unit ID extended code if successful,
// MAP_DATA_NONE if failed
WORD CTRL_UNIT_Create( int nZ, int nX, int nY, DWORD codeU, BOOL bFind = TRUE );
// 刪除單元,對(duì)陰影有特殊處理
// pUnit : unit pointer to be destroyed
// return : TRUE if successful
BOOL CTRL_UNIT_Destroy( struct UNIT_STRUCT *pUnit );
// 移動(dòng)單元
// pDraw : unit to be moved
// nType : type of unit
// 返回 0,被堵住;1,可以走;2,沼澤;>2,遇到城門,返回城門的ID
int CTRL_UNIT_Move( struct CTRL_FRAME_STRUCT *pDraw, int nType );
// only used by CTRL_UNIT_Move()
void CTRL_UNIT_MoveShadow( struct CTRL_FRAME_STRUCT *pDraw );
// 判斷是否該將領(lǐng)應(yīng)該撤離戰(zhàn)場(chǎng),在解散部隊(duì)后發(fā)生
//BOOL CTRL_UNIT_ToDisapear( struct UNIT_STRUCT *pUnitG );
/////////////////
/////////////////
// 部隊(duì)函數(shù)
// 根據(jù)將領(lǐng)的編號(hào)產(chǎn)生部隊(duì)
// nZ, nX, nY : position to locate,產(chǎn)生的位置
// nGenNum : general index number in DATA_Lib
// nPlayer : player to be added to
// nType : troop type
// return : general ID extended code if successful,
// MAP_DATA_NONE if failed
WORD CTRL_GROUP_Create( int nZ, int nX, int nY, DWORD nGenNum, int nPlayer, int nType );
// 刪除部隊(duì):解散部隊(duì),并刪除將領(lǐng)單元
// pUnit : unit pointer to be destroyed
// return : TRUE if successful
BOOL CTRL_GROUP_Destroy( struct UNIT_STRUCT *pUnit );
// 通過將領(lǐng)的編號(hào)尋找將領(lǐng)的ID
// nPlayer : player to search in
// nGenNum : Index number of general in DATA_Lib,將領(lǐng)的編號(hào)
// return : general ID extended code if successful,
// MAP_DATA_NONE if failed
WORD CTRL_GROUP_Find( int nPlayer, WORD nGenNum );
// 把單元直接加入到部隊(duì)中
// pUnitG : pointer of the general to be added to
// pUnit : unit pointer to be added
// return : TRUE if successful
BOOL CTRL_GROUP_Add( struct UNIT_STRUCT *pUnitG, struct UNIT_STRUCT *pUnit );
// 從部隊(duì)中刪除單元
// 從部隊(duì)中直接解散單元
// pUnit : unit pointer to be subed
// return : TRUE if successful
BOOL CTRL_GROUP_Sub( struct UNIT_STRUCT *pUnit );
// 從部隊(duì)中解散手下的所有士兵
// pUnit : general pointer to sub soldiers from
// return : TRUE if successful
void CTRL_GROUP_ToSubAll( struct UNIT_STRUCT *pUnit );
/////////////////
// 其它
/////////////////
// 一個(gè)單元走進(jìn)建筑或上船
// bCheck : 為真時(shí),要檢測(cè)地面上是否有自己,否則,直接把地面清干凈
void CTRL_UNIT_InUnit( struct UNIT_STRUCT *pUnit, BOOL bCheck = FALSE );
// 一個(gè)單元從建筑或船中走出來
// return : TRUE if successful
BOOL CTRL_UNIT_OutUnit( struct UNIT_STRUCT *pUnit );
// get soldier number that focus on
// 得到處于焦點(diǎn)狀態(tài)的士兵的數(shù)量
// return : soldier number, in person
int CTRL_GetFocusSoldierNumber();
//////////////////////
//////////////////////
// 計(jì)謀用
// 對(duì)某個(gè)單元設(shè)置計(jì)謀值,使該單元中計(jì)
// pDraw : 單元的控制結(jié)構(gòu)
// JiMou : 計(jì)謀ID
// bSet : TRUE為設(shè)置,F(xiàn)ALSE為清除
extern void CTRL_SetSTG( CTRL_FRAME_STRUCT *pDraw, CTRL_JIMOU JiMou, BOOL bSet=TRUE );
// 取得某個(gè)單元是否中某個(gè)計(jì)謀
// pDraw : 單元的控制結(jié)構(gòu)
// JiMou : 計(jì)謀ID
extern BOOL CTRL_GetSTG( CTRL_FRAME_STRUCT *pDraw, CTRL_JIMOU JiMou );
/////////////////
#endif // TNEBUG
#endif // __CBCTRL_H__
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -