⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbgame.h

📁 网页游戏赤壁
💻 H
字号:
/////////////////
// CBGame.h		:	《赤壁》全局数据结构
// 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
//
// 版权			:	北京前导软件有限公司	1996-1997
// Copyright	:	WayAhead Co.Ltd.		1996-1997
/////////////////
// 此文件用来读取游戏设置,地图数据,包含所有对单元(将领、士兵、建筑)
// 的操作。

#ifndef	__CBGAME_H__
#define	__CBGAME_H__

#include "CBCtrl.h"
//#include "CBData.h"

#define	GAME_ERROR_ID	800

// 游戏者的最大数
#define	GAME_PLAYER_MAX			5

/////////
// 将领General
// 并且带有部队的属性
#define	GENERAL_TROOP_MAX	15
#define	GENERAL_SHIQI_MAX	200
struct	GENERAL_STRUCT
{
	// 基本属性
	WORD	nID;		// 将领的编号
	BYTE	nType;		// 部队的类型(MAP_UNIT_TYPE_GEN or MAP_UNIT_TYPE_WGEN)
	
	// 个人属性
//	BYTE	nHealth;	// 将领的体力
//	BYTE	nTactic;	// 谋略
//	BYTE	nLevel;		// 将领的级别
//	WORD	nExperience;	// 将领的经验

	// 部队属性
	//WORD	wTroopNum;					// 所带士兵的个数
	WORD	wTroop[GENERAL_TROOP_MAX];	// 所带士兵的ID数组
	BYTE	nLineUp;	// 阵型
	BYTE	nMorale;	// 部队的士气
	
//	struct CTRL_TASK_STRUCT	Task;		// 部队的任务
//	struct CTRL_TASK_STRUCT	Status;		// 部队的状态
};
/////////

/////////
// 建筑Building
struct	BUILDING_STRUCT
{
	// 基本属性
	DWORD 	dwUpgrade[3];	// 升级

	int		nResource;	// 资源储量

	int		nFireLvl;			// 火的级别
	int		nFireID[3];			// 所拥有的火的ID
};
/////////

/////////
// 士兵Soldier
#define	SOLDIER_ONBOARD_MAX		16
struct	SOLDIER_STRUCT
{
	// 基本属性
	WORD	nGenID;		// 将领ID	
	BYTE	nHealth;		// 士兵的体力
	BYTE	nMorale;		// 士兵的士气
	BYTE	nThinkModal;	// 士兵的思考模型
	DWORD	dwBuild;		// 建造

	// 只有工人有效
	int		nResType;		// 资源类型,0树木,1麦田,2,铁矿,3钱
	int		nResource;		// 已采集的资源的数量

	// 只有运输船有效
	BOOL	bOnBoard;		// 为真时,有部队在船上
	int		nOnBoard;		// 在船上的部队数
	int		nOnBoardSoldier;// 在船上的部队人数
};
/////////
/////////
// 运输船Ship
/////////
struct SHIP_STRUCT
{
	int		nNum;			// 在运输船上的士兵的个数
	int		nSoldier;		// 在运输船上的士兵的人数
};
/////////


/////////
// 单元结构
#define	GAME_MARCH_MAX	128
struct	UNIT_STRUCT
{
	// basic attributes 基本属性
	BYTE	nType;		// 单元的类型,见宏定义MAP_UNIT_TYPE_
	WORD	nID;		// 本单元的ID

	WORD	nIDAttackMe;	// 被我攻击的单元ID
	int		nLife;		// 生命值

	// 帧,每帧在图素库中的位置(行,列)
	struct CTRL_FRAME_STRUCT Draw;
	int nCounter;	// 用来进行建造或死亡后的记数

	// 状态
	struct CTRL_TASK_STRUCT	Status;

	// 任务
	struct CTRL_TASK_STRUCT Task;

	// 行军路线
	BYTE MarchTrack[GAME_MARCH_MAX];
	int	StepNum;

	// 阵型
	POINT ptZhenFa;	// 在阵型中的相对位置
	int	  nZhenFa;	// 阵型编号,见CBCtrl.h中的enum CTRL_ZHENXING

	int bPause;		// 暂停,只暂停一轮

	// 攻击力和防御力
	BYTE nFarAttack;
	BYTE nNearAttack;
	BYTE nFarDefend;
	BYTE nNearDefend;

	// test only
	int nHasShadow;
	
	// 只有投石车和弓箭手有效, not used now
//	BOOL	bHasStone;		// 为真时,投出一块石头

	//ADDED BY TIAN YUE.
	WORD   nPos;          //记录物体在逃避过程中的标志。
	WORD   nBloodPos;     //记录物体在受到火烧时减血的标志。  

	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为城内建筑,1为城外建筑
	int		nThink;			// 本关计算机君主的思考模型,0为陆战,1为水战,2为无基地
	int		nTechLvl;		// 本游戏者可以达到的技术级别,1-4
	//int		nRelation;	// 游戏者和我自己的关系
	char	strName[34];	// 游戏者名称

	// 同盟控制
	int nAllies[GAME_PLAYER_MAX];// 存放同盟游戏者的编号,没有自己的

	// 资源
	//DWORD	dwSoldier;		// 预备队
	int		nFood;			// 已采集的粮食
	int		nWood;			// 已采集的木材
	int		nIron;			// 已采集的铁
	int		nGold;			// 现金

	// 内部计算用数据
	DWORD	dwLifeUp;			// 生命值增加的数量
	char	nAddNearAttack[4];	// 近程攻击力变化,可为负,分别对应于100,200,500,1000人部队
	char	nAddFarAttack[4];	// 远程攻击力变化,可为负
	char	nAddNearDefend[4];	// 近程防御力变化,可为负
	char	nAddFarDefend[4];	// 远程防御力变化,可为负
	char	nAddSFarAttack;		// 车兵攻击力变化
	char	nAddWaterAttack[2];	// 水兵的攻击力变化
	char	nAddWaterDefend[2];	// 水兵的防御力变化
	char	nAddViewRange;	// 视野变化,可为负
	char	nAddFightRange;	// 射程变化,可为负
	char	nAddMoveSpeed;	// 移动速度变化,可为负
	char	nAddFightSpeed;	// 攻击速度变化,可为负
	BYTE	nGrade[8];			// 主建筑级别,
								// 木材场弓箭级别,
								// 武器场兵器级别,
								// 武器场护甲级别,
								// 车兵级别
								// 船坞级别

	int		nFoodStore;			// 粮仓和主帅帐的数量

	// 士兵和建筑的控制
	WORD	wUnitCounter;	// 添加单元时记数
	WORD	wLastUnit;		// 最后一个单元的序号
	struct	UNIT_STRUCT	Unit[PLAYER_UNIT_MAX];

	// 部队的控制
	WORD	wGroupCounter;
	WORD	wGroup[PLAYER_GROUP_MAX];
};
/////////

/////////
// 全局Game
struct GAME_STRUCT
{
	// 基本程序属性
	long	lVersion;		// 存放程序的版本号
	long	lVerMED;		// 存放MED文件的版本号

	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];	// 战场初始数据文件的名称
	char	strNameAVI[_MAX_FNAME];	// 本关结束应该播放的AVI文件的名称
	char	strNameOPT[_MAX_FNAME];	// 游戏设置文件名

	char	strStartAVI[_MAX_FNAME];// 游戏开始片头动画名称
	char	strStartWAV[_MAX_FNAME];// 游戏开始主界面背景音乐

	// game control
	BOOL	bNetwork;				// 为真时,程序为网络模式, 现在无效,Nov.4.1997
	int		nProgramState;			// 程序运行状态,见宏定义PROGRAM_STATUS_
	int		nProgramStateLast;		// 上一个程序运行状态,见宏定义PROGRAM_STATUS_
	int		nCommandState;			// 程序命令状态,见宏定义COMMAND_STATUS_
	int		nCommandStateLast;		// 上一个程序命令状态,见宏定义COMMAND_STATUS_

	// game options
	UINT	nSpeed;			// 运行速度
	UINT	nSpeedScroll;	// 滚屏速度
	int		nVolume;		// 音效的音量大小,range from 0 to -5000,1时关闭
	int		nVolumeCD;		// 音乐的音量大小,range from 0 to -5000,1时关闭
	BOOL	bFightEnabled;	// AVI的开关
	BOOL	bFogOfWar;		// 开关阴影

	// 本关属性
	int		nID;			// 本关的ID
	char	strName[_MAX_PATH];	// 本关的名称
	POINT	ptStart[GAME_PLAYER_MAX];	// 游戏者开始的位置
	int		nMusicID;		// 本关背景音乐的ID

	WORD	wWeather;		// 天气:晴,阴,雨,雪
	WORD	wTime;			// 时间,高8位为日期,低8位为小时
	WORD	wWind;			// 风,高8位为风向,低8位为风力

	// 内部计算用数据
	BYTE	nRatioSoldier;	// 士兵攻击系数
	BYTE	nRatioBuilding;	// 建筑攻击系数
	BYTE	nRatioGeneral;	// 将领攻击系数

	// 所辖君主Player
	int		nMe;			// 我是第几号游戏者
	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;

// 游戏是豪华版时用来区分A盘和B盘
// 是0则不区分,是1为A盘,是2为B盘
extern int GAME_nDisk;

// 网络,Nov.4.1997, LG & LHJ
extern BOOL	GAME_bNetwork;
extern BOOL	GAME_bNetPlayerOK[GAME_PLAYER_MAX];// 确认连接完成

// 战斗记分
extern struct RUN_COUNTDOWN RUN_CountDown[GAME_PLAYER_MAX];
////////////
// 函数
// 初始化
void GAME_InitGame();
void GAME_InitGamePlayers();

//- Tian Yue
#ifndef	TNEBUG

// 读取各种设置数据文件
// hwnd		:	window to receive error message
// return	:	TRUE if successful
BOOL GAME_ReadCBSetFile( HWND hwnd );

// 读取战场数据文件
// 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
// 读取网络战场数据文件
// 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 );

// 读取战场数据文件头,仅供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 );

// 读取战场初始化数据文件
// 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 );

// 释放所有游戏中产生出来的单元和其它个体
void GAME_ReleaseAllUnits();
////////////

////////////
// 游戏开始
BOOL GAME_Begin( int nGameID );
// 游戏结束
void GAME_End( int nGameID );

// 存盘
// nSlot	:	存盘文件号
BOOL GAME_Save( int nSlot );

// 取盘
// nSlot	:	存盘文件号
BOOL GAME_Load( int nSlot );

// 得到存盘信息
// nSlot	:	存盘文件号
// strInfo	:	从存盘文件里得到的存盘信息
BOOL GAME_GetSaveInfo( int nSlot, LPSTR strInfo );

// 设置存盘信息
// strInfo	:	计算出来的存盘信息,此信息用将被存储到存盘文件上
BOOL GAME_CalcSaveInfo( LPSTR strInfo );

// 从文件里得到将领信息,经验,升级,并设置到全局结构DATA_Lib.Gen中
// nSlot	:	存盘文件号
BOOL GAME_GetGenInfo( int nSlot );

// 把将领信息,经验,升级,从全局结构DATA_Lib.Gen中写到文件里
// nSlot	:	存盘文件号
void GAME_SetGenInfo( int nSlot );
////////////

////////////
// 读游戏设置文件
BOOL GAME_ReadOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );

// 写游戏设置文件
BOOL GAME_WriteOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );
////////////

////////////
// 得到安装路径
// filename		:	存放安装路径的文件名
// strSrcPath	:	返回的安装路径
// nSize		:	路径字符串的大小
BOOL GAME_GetSrcPath( LPCTSTR filename, LPSTR strSrcPath, int nSize );
////////////

////////////
// 游戏结束播放结尾动画和制作群
// nType	:	结束类型
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 );
////////////


////////////
// 设置同盟,用于网络版
// Aug. 20. 1997
// nPlayer1, nPlayer2	:	两个游戏者
// bSet					:	TRUE时为设置同盟,否则为解除同盟	
void GAME_SetAlly( int nPlayer1, int nPlayer2, BOOL bSet=TRUE );
////////////

// Nov.7.1997
// 得到豪华版的AB盘信息
// nSlot	:	存盘文件号
// 返回0为无磁盘是AB盘的信息,1为A盘,2为B盘
int GAME_GetSaveInfoAB( int nSlot );

//- Tian Yue
#endif // TNEBUG

#endif // __CBGAME_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -