亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
最新热久久免费视频| 国产三级精品视频| 精品福利视频一区二区三区| 亚洲综合另类小说| 色呦呦一区二区三区| 一区二区中文视频| 99re视频精品| 亚洲黄色尤物视频| 欧美无人高清视频在线观看| 一区二区三区中文字幕电影| 欧美在线观看视频在线| 日韩精品一级二级 | 国产乱一区二区| av男人天堂一区| 亚洲成人午夜影院| 欧美va在线播放| 国产不卡免费视频| 亚洲欧美福利一区二区| 欧美日韩精品综合在线| 九九国产精品视频| 亚洲国产精品v| 欧美日免费三级在线| 激情欧美一区二区| 国产精品美女久久久久高潮| 欧美午夜精品一区二区三区| 欧美a级一区二区| 欧美激情在线免费观看| 欧美日韩视频一区二区| 久久99国产精品久久| 亚洲日本va午夜在线电影| 欧美精品第一页| 成人一道本在线| 午夜不卡在线视频| 国产日韩欧美电影| 欧美图区在线视频| 成人性生交大片免费看中文网站| 夜色激情一区二区| 久久影院午夜论| 欧美偷拍一区二区| 国产成人精品一区二区三区网站观看| 亚洲乱码中文字幕综合| 亚洲精品在线三区| 欧美在线免费观看亚洲| 成人综合在线观看| 奇米色777欧美一区二区| 中文字幕的久久| 日韩一区二区精品在线观看| 精品视频在线看| 久久成人综合网| 日韩精品在线一区| 免费欧美在线视频| 日韩欧美国产高清| 日韩中文字幕不卡| 精品日韩99亚洲| 国产精品2024| 亚洲天堂中文字幕| 欧美日韩视频在线第一区 | 91精品视频网| 国产一区 二区| 日韩极品在线观看| 亚洲制服欧美中文字幕中文字幕| 中文字幕精品在线不卡| 精品欧美久久久| 91精品国产aⅴ一区二区| 欧美在线高清视频| 波多野结衣精品在线| 国产精品亚洲专一区二区三区| 婷婷国产v国产偷v亚洲高清| 亚洲成人资源在线| 亚洲最色的网站| 亚洲色图视频免费播放| 中文字幕一区日韩精品欧美| 精品国产乱码久久久久久免费| 日韩欧美一区二区视频| 制服视频三区第一页精品| 欧美午夜精品电影| 欧美日韩美少妇| 欧美色综合影院| 欧美性欧美巨大黑白大战| 99久久精品国产导航| 日韩和欧美一区二区| 亚洲美女淫视频| 自拍偷拍亚洲欧美日韩| 国产精品久久久久婷婷二区次| 精品电影一区二区三区| 91麻豆精东视频| 欧美最新大片在线看| 色综合久久中文字幕| 99久久精品国产网站| 99久久精品情趣| 99re热这里只有精品视频| 成人黄色大片在线观看| 2020国产精品| 日韩欧美视频在线| 欧美系列日韩一区| 欧美日韩一区视频| 欧美欧美午夜aⅴ在线观看| 欧美日精品一区视频| 亚洲第一搞黄网站| 5858s免费视频成人| 在线综合视频播放| 日韩一卡二卡三卡国产欧美| 日韩欧美综合在线| 欧美一区二区三区在线电影 | 国产成a人亚洲| 国产剧情一区在线| 91在线国内视频| 欧美性欧美巨大黑白大战| 欧美日本视频在线| 日韩一区二区电影网| 精品精品欲导航| 日韩精品一区二区三区中文不卡 | 亚洲欧洲综合另类| 偷窥少妇高潮呻吟av久久免费| 三级不卡在线观看| 九九九久久久精品| 成人综合婷婷国产精品久久免费| 成人久久视频在线观看| 在线免费观看成人短视频| 欧美视频精品在线观看| 久久综合九色综合97_久久久| 国产欧美一区二区精品秋霞影院| 国产精品家庭影院| 日韩片之四级片| 自拍偷自拍亚洲精品播放| 久久久99精品久久| 成人开心网精品视频| 色婷婷国产精品| 日韩欧美国产一区二区在线播放| 久久综合久色欧美综合狠狠| 国产三级欧美三级| 一区二区三区四区视频精品免费 | 91片在线免费观看| 欧美精品v国产精品v日韩精品 | 中文字幕亚洲电影| 舔着乳尖日韩一区| 成人精品视频网站| 欧美日韩国产另类一区| 日韩视频免费观看高清完整版在线观看| 久久久一区二区| 一区二区三区资源| 国产在线乱码一区二区三区| 色94色欧美sute亚洲线路二| 日韩写真欧美这视频| 亚洲婷婷综合色高清在线| 麻豆精品在线看| 99久久国产综合精品色伊| 日韩一区二区三区在线视频| 亚洲天堂精品在线观看| 精品一区二区三区在线观看国产| 色偷偷一区二区三区| 国产亚洲午夜高清国产拍精品| 亚洲综合一区二区三区| 成人性色生活片| 精品国产亚洲一区二区三区在线观看| 亚洲精品伦理在线| 豆国产96在线|亚洲| 欧美久久一二区| 国产精品私房写真福利视频| 国产成人在线视频网站| 日韩一区二区三区在线视频| 亚洲在线视频免费观看| 99精品视频在线观看免费| 亚洲精品一区二区三区福利| 日韩高清不卡一区二区三区| 成人av电影免费在线播放| 国产亚洲精品超碰| 免费看黄色91| 91精品国产综合久久福利| 亚洲精品欧美专区| av在线不卡电影| 久久精品一区二区三区不卡牛牛 | 精品国产髙清在线看国产毛片| 国产精品久久三区| a4yy欧美一区二区三区| 国产精品看片你懂得| 国产99久久久国产精品潘金网站| 精品区一区二区| 久久99久久久欧美国产| 欧美精品久久天天躁| 日本视频一区二区| 欧美高清精品3d| 亚洲一区二区三区四区的| 色综合激情五月| 一区二区三区在线观看国产| 国产另类ts人妖一区二区| 国产亚洲精品精华液| 成人午夜在线免费| 国产精品高清亚洲| 91在线观看免费视频| 亚洲色欲色欲www| 91麻豆精品视频| 亚洲线精品一区二区三区八戒| 欧美自拍偷拍午夜视频| 性做久久久久久免费观看欧美| 欧美性大战久久久久久久蜜臀| 丝袜美腿成人在线| 欧美mv日韩mv| 成人午夜在线播放| 一区二区三区欧美亚洲|