亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cbctrl.cpp

?? 赤壁之戰的游戲源代碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/////////////////
// CBCtrl.cpp	:	《赤壁》全局控制數據結構
// CBCtrl.cpp	:	<< chibi >> global contral data structure
//
// v0010		:	Oct.3.1996
// v0011		:	Oct.18.1996
// v0012		:	Jan.25.1997
// v0013		:	Feb.5.1997
// 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
// v0031		:	Sep.11.1997, changed a lot
//
// 編寫			:	劉剛
// written by	:	Liu Gang
//
// 編譯器		:	Visual C++ 4.2
// Compiler		:	Visual C++ 4.2
//
// 版權			:	北京前導軟件有限公司	1996-1997
// Copyright	:	WayAhead Co.Ltd.		1996-1997
/////////////////
// 此文件包含游戲的控制結構(命令,狀態,幀)的產生,以及對任務緩沖區隊列的操作

#include "stdafx.h"
#include "CBCtrl.h"

#ifndef	_CTRL_DEBUG
#include "Assert.h"

#include "CBMap.h"
#include "CBData.h"
#include "CBGame.h"		// 使用GAME.Me用來判斷是否是游戲者
#include "CBMouse.h"
#include "CbEyes.h"		// 檢測函數
#include "CBShadow.h"	// SHADOW_IfEnabled()

//#include "CBRun.h"	// RUN_CREATE_IfEnoughMoney()
#include "CBRDelay.h"

#include "DDCompo.h"

// LHJ
#include "marco.h"
#include "interfa1.h"
#include "interfac.h"
#include "cbprompt.h"
// LHJ

// TY
#include "TbnBase.h"
#include "Temperor.h"
// TY

#include "CBBuild.h"
#include "CBRDelay.h"	// defines
#include "CBOther.h"

#include "CBDraw.h"		// DRAW_JumpScreen()
#endif

// debug only
#include <stdio.h>

//////////////////////
// externals
// defined in CBDraw.cpp
extern RECT DRAW_rcScreen;			// defined in CBDraw.cpp
extern POINT DRAW_ptScreenOffset;	// defined in CBDraw.cpp
extern int MAP_nLocationNum[4];		// defined in CBMap.cpp
extern POINT MAP_ptLocation[2][MAP_LOCATION_MAX]; // defined in CBMap.cpp

// defined in CBDraw.cpp
// 被選中為目的地的單元,要閃爍顯示它的邊界
extern int DRAW_BLINK_nCounter;
extern int DRAW_BLINK_nDelay;
extern BOOL DRAW_BLINK_bDraw;
extern WORD DRAW_BLINK_nID;
extern int DRAW_BLINK_nSave;
//////////////////////

//////////////////////
// defines
#define CTRL_TIMEDELAY_COMMAND	200		// 兩個右鍵命令的間隔時間(毫秒)
#define CTRL_TIMEDELAY_MOUSE	2		// 目標右鍵點擊后所遺留下來的痕跡
//////////////////////

//////////////////////
// 命令處理流水線,關于命令流水線的所有函數都是本文件內部的
// 全局量

// 指示任務隊列的尾端位置
// points to the Task List's tail
int	CTRL_nTaskTail[GAME_PLAYER_MAX]={0,0,0,0,0};

// 指向下一個有效命令的位置
int CTRL_nTaskHead[GAME_PLAYER_MAX]={0,0,0,0,0};

// First demension: 0-4 are the Waiting List of player 0-4
// 第一個下標:0-4代表游戲者0-4的等待隊列
struct CTRL_TASK_STRUCT	CTRL_TaskList[GAME_PLAYER_MAX][CTRL_TASK_LIST_MAX+CTRL_TASK_LIST_MAX];

// 用來保存當前的命令組
struct CTRL_TASK_SAVE_CMDUNIT CTRL_TASK_saveCmdUnit;
//////////////////////
// local functions

// get contents from Task List
// nPlayer		:	player's ID, 0-4 are player  0-4
// pTask		:	the Task you got
// return vlaue	:	TRUE if get one 
extern BOOL CTRL_TASK_LIST_Peek( int nPlayer, struct CTRL_TASK_STRUCT *pTask );	// 取得任務返回真

// store contents to Task List
// 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
extern BOOL CTRL_TASK_LIST_Send( int nPlayer, CONST struct CTRL_TASK_STRUCT *pTask );	// 發送任務返回真

extern	BOOL CTRL_TASK_LIST_SendEx( int nPlayer, CONST struct CTRL_TASK_STRUCT *pTask, int nIndex ,int nTail);


// copy list
// nFrom		:	ID for Task List to copy from
// nTo			:	ID for Task List to copy to
extern void CTRL_TASK_LIST_Copy( int bTo, int nFrom );

// clear list
// nList	: number of list to cleared
extern void CTRL_TASK_LIST_Clear( int nList );
//////////////////////

//////////////////////
// 鼠標痕跡
void CTRL_MOUSE_Clip( int nX, int nY );
//////////////////////

//////////////////////
// 音效
// 選中某個單元后
// nFile	:	單元的文件號
void CTRL_SOUND_select( int nFile );
// 對某個單元下達命令后
// nFile	:	單元的文件號
void CTRL_SOUND_doIt( int nFile );
//////////////////////

//////////////////////
// 調試命令用
BOOL CTRL_bDebugCommand	= FALSE;
BOOL CTRL_bDebugDie = FALSE;
//////////////////////

///////////////////////////////////Donghai//////////////////////////////////////
#include "network.h"
extern	BYTE    DP_SendMessageBuff[BUFFER_MAX_BYTE];
extern	int		DP_NetworkInterface(int	Action, HWND   MainWndHandle);
int		CB_SendTaskMessage(int nPlayer, CONST struct CTRL_TASK_STRUCT *pTask);
extern	int	CB_Counter;
///////////////////////////////////Donghai//////////////////////////////////////

//////////////////////
// 任務處理
//////////////////////
// get contents from Task List
// nPlayer		:	player's ID, 1-4 are player  1-4, 0 is my Waiting List
// pTask		:	the Task you got
// return value	:	TRUE if get one 
inline BOOL CTRL_TASK_LIST_Peek( int nPlayer, struct CTRL_TASK_STRUCT *pTask )
{
	// 判斷隊列是否是空的
	if( CTRL_nTaskTail[nPlayer] == CTRL_nTaskHead[nPlayer] )
		return FALSE;

	int nHead = CTRL_nTaskHead[nPlayer];
	struct CTRL_TASK_STRUCT *pTaskSrc = &CTRL_TaskList[nPlayer][nHead];
	//Assert( pTaskSrc->nTaskID != QUXIAO );
	// 從任務隊列中讀取
	CTRL_TASK_Copy( pTask, pTaskSrc );
	// 從隊列中刪除
	CTRL_TASK_Clear( pTaskSrc );

	// 頭指針移動
	nHead++;
	if( nHead == CTRL_TASK_LIST_MAX )
	{
		nHead = 0;
	}
	CTRL_nTaskHead[nPlayer] = nHead;
	return TRUE;
}

// store contents to Task List
// nPlayer		:	player's ID, 1-4 are player  1-4, 0 is my Waiting List
// pTask		:	the Task you want to send
// return vlaue	:	TRUE if there is room for the Task
inline BOOL CTRL_TASK_LIST_Send( int nPlayer, CONST struct CTRL_TASK_STRUCT *pTask )
{
	// 隊列尾指針移動
	int nTail = CTRL_nTaskTail[nPlayer];
	nTail++;
	if( nTail == CTRL_TASK_LIST_MAX )
		nTail = 0;

	// 判斷隊列是否已滿
	if( nTail == CTRL_nTaskHead[nPlayer] )
		return FALSE;

	// 存儲任務到隊列中
	struct CTRL_TASK_STRUCT *pTaskDest = &CTRL_TaskList[nPlayer][CTRL_nTaskTail[nPlayer]];
	CTRL_TASK_Copy( pTaskDest, pTask );
	CTRL_nTaskTail[nPlayer]=nTail;

	return TRUE;
}


// store contents to Task List
// nPlayer		:	player's ID, 1-4 are player  1-4, 0 is my Waiting List
// pTask		:	the Task you want to send
// return vlaue	:	TRUE if there is room for the Task
inline BOOL CTRL_TASK_LIST_SendEx( int nPlayer, CONST struct CTRL_TASK_STRUCT *pTask, int nIndex ,int	nTail)
{
	// 存儲任務到隊列中
	struct CTRL_TASK_STRUCT *pTaskDest = &CTRL_TaskList[nPlayer][nIndex];
	CTRL_TASK_Copy( pTaskDest, pTask );

	CTRL_nTaskTail[nPlayer]=nTail;
/////////////////////////////Donghai/////////////////////////////
//	char	test32[255];
//	wsprintf((char *)test32,"================================%d!!!================================\n",CB_Counter);
//	WriteLogFile("Test_Sendex.log",(char *)test32);
/////////////////////////////Donghai/////////////////////////////

	return TRUE;
}

// copy
// nFrom		:	ID for Task List to copy from
// nTo			:	ID for Task List to copy to
inline void CTRL_TASK_LIST_Copy( int nTo, int nFrom )
{
	memcpy( CTRL_TaskList[nTo], CTRL_TaskList[nFrom], sizeof(struct CTRL_TASK_STRUCT)*CTRL_TASK_LIST_MAX );
}

// clear list
// nList	: number of list to cleared
inline void CTRL_TASK_LIST_Clear( int nList )
{
	memset( CTRL_TaskList[nList], 0, sizeof(struct CTRL_TASK_STRUCT)*CTRL_TASK_LIST_MAX );
}
//////////////////////


//////////////////////
// 命令的產生

#ifdef	_DEBUG
	// 當調用CTRL_TASK_LIST_Send()時,即對任務隊列進行讀操作時,
	// 一定不要進行寫操作。保證在處理命令時的同步性。
	// 當調用CTRL_TASK_Main()時,該Flag標志為真,
	// 當調用CTRL_TASK_LIST_Send()時,判斷該標志量。
	BOOL CTRL_TASK_Reading = FALSE;
#endif	// _DEBUG

// mouse hit result
// 命令的主體的計數器
int	CTRL_nHitCounter=0;
// contains the units player want to send command to
// 命令的主體
// 只有nID有用
struct CTRL_TASK_STRUCT CTRL_hitSrc[CTRL_TASK_LIST_MAX-1];

// the target unit
// 命令的客體,命令的內容也存放在此
struct CTRL_TASK_STRUCT CTRL_hitDest;

// Set Task from Task List to unit
// task	:	Task to be set
void CTRL_TASK_SetToUnit( struct CTRL_TASK_STRUCT task );
//////////////////////

//////////////////////
// get soldier number that focus on 
// 得到處于焦點狀態的士兵的數量
// return	:	soldier number, in person
int CTRL_GetFocusSoldierNumber()
{
	// 得到士兵數
	int nCount=0;
	for( int i=0; i< CTRL_nHitCounter; i++ )
	{
		Assert( CTRL_hitSrc[i].nID != MAP_DATA_NONE );
		struct UNIT_STRUCT *pUnit = MAP_GetUnit( CTRL_hitSrc[i].nID );
		// 極少出現的現象,士兵已經準備死亡,可是還沒有從選中數組中清空
		if( EYE_IfUnitIsDead( pUnit ) )	
			break;
//		if( pUnit == NULL )
//			WriteLogFile( "Test.log", "CTRL_GetFocusSoldierNumber()\n" );
		Assert( pUnit );
		Assert( pUnit->nType != 0 );
		if( EYE_IfUnitIsSoldier( pUnit ) )
			nCount += pUnit->nLife;
		Assert( nCount >= 0 && nCount <= 99999 );
	}
	return nCount;
}

// clear assembling parameters
// 清除CTRL_hitSrc的內容
// bForce	:	強迫清除所有內容
// bForce	:	為真時,強迫清空任務隊列中的所有結點;
//              否則,只有該任務不完整時才會被清空。
void CTRL_TASK_ClearAssembleSrc( BOOL bForce /*=FALSE*/ )
{
	// clear Focus to units, clear hittest source objects
	int nCounter = CTRL_nHitCounter;
	for( int i=0; i< nCounter; i++ )
	{
		if( CTRL_hitSrc[i].bDone && !bForce )	continue;
		Assert( CTRL_hitSrc[i].nID != MAP_DATA_NONE );
		struct UNIT_STRUCT *pUnit = MAP_GetUnit( CTRL_hitSrc[i].nID );
		Assert(pUnit);
		pUnit->Draw.bUpdate = FALSE;	// 去掉選中框
		// clear source objects
		CTRL_TASK_Clear( &CTRL_hitSrc[i] );
		CTRL_nHitCounter --;
	}

	// clear build drawings
	if( BUILD_IfEnable() )
		BUILD_Enable( FALSE );

//	CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_NONE;
//	CTRL_TASK_saveCmdUnit.Ex = 0xFFFFFFFF;
//	CTRL_TASK_saveCmdUnit.Busy = 0;

#ifdef	_DEBUG
	if( bForce )	Assert( CTRL_nHitCounter == 0 );
#endif
}

void CTRL_TASK_ClearAssembleDest()
{
	// clear command
	// clear hittest destination object and command
	CTRL_TASK_Clear( &CTRL_hitDest );
	// reset command unit array
/*	if( CTRL_TASK_saveCmdUnit.Busy == 1 )
	{
		FACE_ShowCommandUnit( COMMANDUNIT_CANCEL, 0xFFFF ); // clear command sets
	}
	else
	{
		FACE_ShowCommandUnit( CTRL_TASK_saveCmdUnit.Cmd, CTRL_TASK_saveCmdUnit.Ex ); // clear command sets
	}
*/
	// 重新設置鼠標光標形狀
	MOUSE_SetState( MOUSE_STATE_NONE );
}

// 設置建筑的命令組
//void CTRL_TASK_BuildCommand( int nFile )
void CTRL_TASK_BuildCommand( struct UNIT_STRUCT *pUnit )
{
	Assert( EYE_IfUnitIsBuild( pUnit ) );
	switch( pUnit->Draw.nFile )
	{
		case	0:	// 帥帳1
			CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_CHAO_MAINBUILDING;
			// 基本配置
			CTRL_TASK_saveCmdUnit.Ex = 0x0001;
			//if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 0
			if( pUnit->Build.dwUpgrade[0] == 0
				&& GAME.Players[GAME.nMe].nTechLvl >= 2 
				&& BuildPoint[GAME.nMe][MUCAICHANG].hPos == CBTRUE 
				&& BuildPoint[GAME.nMe][WUQICHANG].hPos == CBTRUE )
			{	// 當前等級是0,最高等級大于1,有木材場,有武器場
				CTRL_TASK_saveCmdUnit.Ex = 0x0003;	//0011
			}
			//else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 1
			else if( pUnit->Build.dwUpgrade[0] == 1
				&& GAME.Players[GAME.nMe].nTechLvl >= 3 
				&& BuildPoint[GAME.nMe][QIBINGSUO].hPos == CBTRUE 
				&& BuildPoint[GAME.nMe][CHEBINGSUO].hPos == CBTRUE )
			{	// 當前等級是1,最高等級大于2,有騎兵所,有車兵所

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产酒店精品激情| 国产成人av资源| 中文字幕精品三区| 欧美一区二区三区成人| 日本精品视频一区二区| 国产69精品久久99不卡| 精品系列免费在线观看| 日本亚洲免费观看| 亚洲成人免费视| 一区av在线播放| 亚洲视频一二区| 国产精品免费久久久久| 综合久久久久久| 国产在线精品免费| 国产乱码精品1区2区3区| 欧美三级中文字幕在线观看| 欧美日韩综合在线| 国产精品女同互慰在线看| 久久91精品久久久久久秒播| 欧美日韩精品欧美日韩精品| 91精品久久久久久久久99蜜臂| 91精品国产91热久久久做人人 | 成人欧美一区二区三区小说 | 欧美日韩国产一级| 亚洲色图欧洲色图婷婷| 精品欧美乱码久久久久久1区2区| 在线精品视频免费观看| 亚洲成av人片在www色猫咪| 成人av网址在线| 国产毛片精品一区| 7777精品伊人久久久大香线蕉超级流畅| 国产精品不卡一区| 日韩精品一区二区三区视频| 国产精品久久久久久久久动漫| 色婷婷亚洲婷婷| 亚洲色图欧洲色图| 欧美三级蜜桃2在线观看| 美女在线观看视频一区二区| 欧美视频你懂的| 日韩精品欧美精品| 欧美午夜精品理论片a级按摩| 久久99精品久久久久久| 亚洲免费在线视频| 色狠狠桃花综合| 久久99精品久久久久| 亚洲码国产岛国毛片在线| 日韩精品一区二区三区在线观看| 欧美日韩视频在线观看一区二区三区| 国产美女视频91| 天天免费综合色| 欧美日韩高清一区二区三区| 成人短视频下载| 久久电影网电视剧免费观看| 久久精品夜夜夜夜久久| 国产毛片一区二区| 日韩成人一区二区| 伊人婷婷欧美激情| 欧美日韩国产小视频| a亚洲天堂av| 亚洲美女一区二区三区| 久久久久久97三级| 成人午夜视频免费看| 亚洲日穴在线视频| 日本一区二区三区四区| 欧美在线一区二区三区| av在线免费不卡| 国产成人精品亚洲777人妖| 老色鬼精品视频在线观看播放| 一区二区三国产精华液| 亚洲欧洲日韩女同| 国产欧美日韩精品a在线观看| 欧美成人午夜电影| 精品美女一区二区| 欧美一二三区在线观看| 国产精品456露脸| 精品影视av免费| 老司机免费视频一区二区| 亚洲123区在线观看| 亚洲一区二区在线视频| 精品国精品自拍自在线| 99久久免费视频.com| 日本免费在线视频不卡一不卡二 | 粉嫩13p一区二区三区| 国产一区二区三区黄视频| 久久精工是国产品牌吗| 麻豆久久久久久久| 激情五月播播久久久精品| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产精品沙发午睡系列990531| 日韩欧美国产高清| 欧美成人一级视频| 精品捆绑美女sm三区| 自拍偷自拍亚洲精品播放| 久久久久久久性| 日本一区二区三区免费乱视频| 中文字幕一区二区三中文字幕| 国产精品不卡一区二区三区| 亚洲精品久久久蜜桃| 亚洲一区在线播放| 日韩高清一区二区| 精品一区二区日韩| 国产99精品在线观看| 色欧美片视频在线观看在线视频| 欧美在线你懂得| 91精品国产综合久久久久久| 欧美不卡在线视频| 中文字幕五月欧美| 亚洲一区二区三区在线看| 麻豆91小视频| 成人中文字幕在线| 色综合久久88色综合天天| 欧美美女直播网站| 91美女精品福利| 成人一区二区在线观看| 色婷婷综合视频在线观看| 91麻豆精品国产91久久久久久| 精品久久久久久无| 国产精品超碰97尤物18| 偷拍一区二区三区四区| 粉嫩欧美一区二区三区高清影视| 在线亚洲欧美专区二区| 欧美mv日韩mv国产网站app| 中文字幕中文字幕一区| 日韩国产一区二| 成人毛片在线观看| 91麻豆精品国产91久久久久久| 国产精品成人一区二区艾草| 日本亚洲最大的色成网站www| 成人听书哪个软件好| 欧美精品乱码久久久久久按摩| 久久九九久久九九| 午夜精品国产更新| 大胆欧美人体老妇| 欧美一区二区三区思思人| 亚洲日本青草视频在线怡红院| 久久丁香综合五月国产三级网站| 欧美最新大片在线看| 国产肉丝袜一区二区| 日韩电影免费在线看| 成人网在线播放| 精品日韩一区二区| 亚洲大片精品永久免费| 99热精品国产| 亚洲激情第一区| 国产乱码精品1区2区3区| 欧美精品免费视频| 一区二区视频在线| 粉嫩高潮美女一区二区三区| 欧美一区二区美女| 午夜精品免费在线观看| 91免费观看国产| 国产精品日韩精品欧美在线| 久久精品99国产精品| 在线观看91av| 亚洲一区二区三区三| voyeur盗摄精品| 欧美经典一区二区三区| 九九视频精品免费| 欧美日韩dvd在线观看| 一区二区三区精品视频| 91丝袜美女网| 中文字幕久久午夜不卡| 国产69精品久久久久777| 久久蜜桃av一区精品变态类天堂| 日韩av中文字幕一区二区| 欧美综合久久久| 一区二区三区四区不卡视频 | 日韩和欧美一区二区三区| 在线观看视频91| 一级女性全黄久久生活片免费| 91麻豆swag| 亚洲精品免费电影| 91福利视频网站| 伊人开心综合网| 日本韩国视频一区二区| 亚洲宅男天堂在线观看无病毒| 91一区二区在线观看| 国产精品久久久久久久久搜平片 | 在线观看亚洲精品| 亚洲欧美日韩国产手机在线| 色婷婷久久一区二区三区麻豆| 亚洲欧美偷拍三级| 色婷婷综合激情| 狂野欧美性猛交blacked| 精品sm捆绑视频| 成人国产精品免费观看动漫| 亚洲欧美日韩系列| 欧美无砖砖区免费| 免费在线视频一区| 91网上在线视频| 亚洲理论在线观看| 欧美精品久久一区| 久久99国产精品久久| 国产精品网站在线观看| 99久久婷婷国产综合精品电影| 亚洲成年人网站在线观看| 日韩欧美在线影院| 国产成人免费视频网站高清观看视频| 中文字幕一区二区三区不卡 | 美腿丝袜亚洲色图|