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

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

?? cbctrl.cpp

?? 赤壁之戰的游戲源代碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
						}
					}
					else
					{
						if( nEPlayer == -1 )
						{
							nEPlayer = pUnit->Draw.nPlayer;
						}
						if( nEPlayer == pUnit->Draw.nPlayer )
						{
							sArrayE[nECounter] = codeUEx;
							nECounter ++;
						}
					}
				}// End of if( pUnit->nType == MAP_UNIT_TYPE_GEN )
			}// End of if( !EYE_IfUnitIsBuild( pUnit ) )
			else
			{	// 如果是建筑,則記下
				codeBuild = codeUEx;
			}// End of if( EYE_IfUnitIsSoldier( pUnit ) )
		}// End of if( MOUSE_HitTestU( pt, &hit ) )
	}// End of if( IsRectEmpty( prcHit ) )
	else	// do with rectangle
	{
		for( j=DRAW_rcScreen.top; j<DRAW_rcScreen.bottom; j++ )
		for( i=DRAW_rcScreen.left; i<DRAW_rcScreen.right; i++ )
		{
			// 數量超了
			if( nYCounter >= CTRL_TASK_LIST_MAX-1 ) break;
			if( nNCounter >= CTRL_TASK_LIST_MAX-1 ) break;

			codeUEx = MAP_GetUnitDataEx( i, j );
			if( codeUEx == MAP_DATA_NONE )	continue;
			struct CTRL_FRAME_STRUCT stctCF;
			if( !MAP_GetUnitFrameData( i, j, &stctCF, FALSE ) )
				continue;
			RECT rcUnit = MAP_GetUnitRect( DRAW_ptScreenOffset, &stctCF );
			if( IntersectRect( &rcUnit, &rcUnit, prcHit ) )
			{
				// set source objects
				Assert( codeUEx != MAP_DATA_NONE );
				struct UNIT_STRUCT *pUnit = MAP_GetUnit( codeUEx );
				Assert( pUnit );
				// 0: 如果被陰影擋住,則不算
				// 1:是否是自己的單元,只有自己人才能被選中
				// 2:單元還活著嗎?
				if( SHADOW_IfEnabled() )
				{
					WORD codeR = MAP_GetRegionData( i, j );
					struct MAP_REGION_CODE_STRUCT stctR;
					MAP_RegionDeCode( codeR, &stctR );
					if( stctR.nShadow == MAP_SHADOW_NONE || stctR.nShadowEx == 1 )
					{
						continue;
					}
				}
				if( !EYE_IfUnitIsDead( pUnit ) )
				{	
					if( !EYE_IfUnitIsBuild( pUnit ) )
					{	
						if( wParam == 4 && pUnit->Draw.bUpdate == TRUE )
						{
							// shift鍵按下,而且重了,do nothing
						}
						// 如果是士兵,則記下
						else if( EYE_IfUnitIsGen( pUnit ) )
						{	// 記下將領
							if( !pGen || 
								(pGen && !EYE_IfSheIsMine( pGen ) ) )
							{	// 原來沒有將,或不是自己的將
								pGen = pUnit;	
							}
							break;
						}
						else //if( EYE_IfUnitIsSoldier( pUnit ) )
						{	// 記下士兵
							if( EYE_IfSheIsMine( pUnit ) )
									bEnemy = FALSE;
							else	bEnemy = TRUE;
							if( bEnemy == FALSE )
							{
								if( pUnit->Soldier.nGenID != MAP_DATA_NONE )
								{
									sArrayY[nYCounter] = codeUEx;
									nYCounter++;
								}
								else if( EYE_IfUnitIsWorker( pUnit ) )
								{
									sArrayNW[nNWCounter] = codeUEx;
									nNWCounter++;
								}
								else if( EYE_IfUnitIsShip( pUnit ) )
								{
									sArrayNS[nNSCounter] = codeUEx;
									nNSCounter++;
								}
								else
								{
									sArrayN[nNCounter] = codeUEx;
									nNCounter++;
								}// End of if( pUnit->nType == MAP_UNIT_TYPE_GEN )
							}
							else
							{
								if( nEPlayer == -1 )
								{
									nEPlayer = pUnit->Draw.nPlayer;
								}
								if( nEPlayer == pUnit->Draw.nPlayer )
								{
									sArrayE[nECounter] = codeUEx;
									nECounter ++;
								}
							}
						}// End of if( pUnit->nType == MAP_UNIT_TYPE_GEN )
					}// End of if( !EYE_IfUnitIsBuild( pUnit ) )
					else
					{	// 如果是建筑,則記下
						codeBuild = codeUEx;
					}
				}// End of if( pUnit->Draw.nPlayer == GAME.nMe 
			}// End of if( IntersectRect( &rcUnit, &rcUnit, prcHit ) )
		}// End of for()
	}// End of if( IsRectEmpty( prcHit ) )

	// 熱鍵的特殊處理
	if( pGen != NULL 
		|| nNWCounter > 0
		|| nNSCounter > 0
		|| nNCounter > 0
		|| nYCounter > 0
		|| codeBuild != MAP_DATA_NONE
		|| nECounter > 0 )
	{
		BOOL bRefresh = TRUE;
		if( wParam == 8
			&& pGen == NULL 
			&& nNWCounter == 0 
			&& nNSCounter == 0
			&& nNCounter == 0
			&& nYCounter > 0 
			)	// Ctrl
		{	// 遇到Ctrl鍵,把該士兵所屬的整個部隊選中
			Assert( sArrayY[0] != MAP_DATA_NONE );
			struct UNIT_STRUCT *pU = MAP_GetUnit( sArrayY[0] );
			pGen = EYE_GetGeneral( pU );
			Assert( pGen );
			/*
			Assert( sArrayY[0] != MAP_DATA_NONE );
			struct UNIT_STRUCT *pU = MAP_GetUnit( sArrayY[0] );
			Assert( pU );
			Assert( EYE_IfUnitIsSoldier( pU ) );
			pU = MAP_GetUnit( pU->Soldier.nGenID );
			Assert( pU );
			Assert( EYE_IfUnitIsGen( pU ) );
			pGen = pU;
			*/
		}
		else if( wParam == 4
			&& pGen == NULL 
			&& CTRL_nHitCounter > 0
			)	// Shift,遇到Shift鍵,把選中的部隊添加到已有的部隊中
		{
			Assert( CTRL_hitSrc[0].nID != MAP_DATA_NONE );
			struct UNIT_STRUCT *pU = MAP_GetUnit( CTRL_hitSrc[0].nID );
			if( EYE_IfUnitIsSoldier( pU ) )
			{
				if( pU->Soldier.nGenID == MAP_DATA_NONE )
				{	// 散兵
					if( EYE_IfUnitIsWorker( pU ) 
						&& nNWCounter > 0 )
					{	// 散工人
						bRefresh = FALSE;
					}
					else if( nNCounter > 0 )
					{	// 散士兵
						nNWCounter = 0;
						bRefresh = FALSE;
					}
				}
				else if( nYCounter > 0 )
				{	// 有將領的士兵
					nNWCounter = 0;
					nNCounter = 0;
					bRefresh = FALSE;
				}
			}
		}

		// 必要時才清除命令組
		if( bRefresh == TRUE )
			// clear Task assembling parameters
			CTRL_TASK_ClearAssembleSrc( TRUE );
	}
	else
	{	// 沒有有效的單元被選中
		CTRL_TASK_ClearAssembleDest();
		return FALSE;
	}

	// initialize command units
	// 必須把清除命令組放在這里
	CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_NONE;
	CTRL_TASK_saveCmdUnit.Ex = 0xFFFFFFFF;
	CTRL_TASK_saveCmdUnit.Busy = 0;

	// 3:如果選中將領,則該將領的所有下屬士兵都被選中
	// 只有自己方的將領被選中,或沒有其他我方士兵被選中時有效
	if( pGen != NULL 
		&& ( EYE_IfSheIsMine( pGen )
			|| ( !EYE_IfSheIsMine(pGen) 
				&& nNWCounter == 0 
				&& nNCounter == 0 
				&& nYCounter == 0 ) ) )
	{
		Assert( EYE_IfUnitIsGen( pGen ) );
		//CTRL_hitSrc[CTRL_nHitCounter].nLevel = 0;
		CTRL_hitSrc[CTRL_nHitCounter].nID = pGen->nID;
		CTRL_nHitCounter++;
		for( i = 0; i< GENERAL_TROOP_MAX; i++ )
		{
			if( pGen->Gen.wTroop[i] != MAP_DATA_NONE )
			{
				//CTRL_hitSrc[CTRL_nHitCounter].nLevel = 0;
				CTRL_hitSrc[CTRL_nHitCounter].nID = pGen->Gen.wTroop[i];
				CTRL_nHitCounter++;
			}
		}

		// 設置將領信息
		struct	PROMPT_BLOCK	temp;
		temp.PromptBlockId = PROMPT_UNIT;
		DATA_GENERAL_STRUCT *pGenData = &DATA_Lib.Gen[pGen->Gen.nID];
		temp.PromptBlockUnion.Unit.GeneralBitmapId=pGen->Gen.nID;				// 圖片號
		temp.PromptBlockUnion.Unit.GeneralPower=EYE_GetWuLi( pGen->Gen.nID )*100/120;
		temp.PromptBlockUnion.Unit.GeneralBlood=
			pGen->nLife*100/EYE_GetFullLife( pGen->Draw.nPlayer, pGen->Draw.nFile );			// 生命,將領生命值是200
		strcpy( temp.PromptBlockUnion.Unit.GeneralName, pGenData->strName );	// 名字

		// 級別
		EYE_GetLevelName( pGen->Gen.nID, temp.PromptBlockUnion.Unit.Office ); // 級別

		temp.PromptBlockUnion.Unit.Experience = pGenData->nJingYan;		// 經驗
		temp.PromptBlockUnion.Unit.Ruse = pGenData->nMouLue;			// 謀略
		temp.PromptBlockUnion.Unit.UnitMorale = EYE_GetMorale( pGen );		// 士氣
		temp.PromptBlockUnion.Unit.UnitLineUp = pGen->Gen.nLineUp;		// 陣型
		// 得到士兵數
		temp.PromptBlockUnion.Unit.NumberOfSolider = CTRL_GetFocusSoldierNumber();

		FACE_ShowPromptBlock( temp );

		if( EYE_IfSheIsMine( pGen ) )
		{
			// sound effect,對自己人設置音效
			CTRL_SOUND_select( pGen->Draw.nFile );

			// 對自己的工人部隊設置命令組
			// 為取消命令組
			if( pGen->Status.bIRQ == TRUE )
			{
				CTRL_TASK_saveCmdUnit.Busy = 2;	// 臨時等于2
			}
			if( EYE_IfUnitIsWorkerGen( pGen ) )
			{	// 根據建筑類型設置建造城內或城外建筑
				if( GAME.Players[GAME.nMe].nBuildType == 0 )
					CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_CHAO_PEASANT;
				else
					CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_LIU_PEASANT;
				CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
			}
			// 對自己的戰斗部隊設置攻擊命令組
			else
			{
				CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_FIGHTUNIT;
				//CTRL_TASK_saveCmdUnit.Ex = 0x00E3;
				CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
			}
		}
	}
	// 判斷是否有士兵被選中
	else if( nNWCounter > 0 || nNCounter > 0 
		|| nYCounter > 0 || nECounter > 0 
		|| nNSCounter > 0 )
	{
		// 4:如果有未整編的部隊,則只有未整編的部隊被選中
		// 4.1:如果是工人,只有工人被選中
		if( nNWCounter > 0 )
		{
			for( i=0; i< nNWCounter; i++ )
			{
				//CTRL_hitSrc[CTRL_nHitCounter].nLevel = 0;
				CTRL_hitSrc[CTRL_nHitCounter].nID = sArrayNW[i];
//				CTRL_hitSrc[CTRL_nHitCounter].nTaskIDEx = MAP_UNIT_TYPE_WGEN;	// 工人將領
				CTRL_nHitCounter++;
			}
			// 對未整編的士兵設置命令組
			CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_SINGLESOLDIER;
			// 不能回送
			CTRL_TASK_saveCmdUnit.Ex = 0x000F;

			// 設置回送命令
			if( nNWCounter == 1 )
			{
				struct UNIT_STRUCT *pU = MAP_GetUnit( CTRL_hitSrc[0].nID );
				Assert( pU );
				if( EYE_IfUnitIsWorker( pU ) )
				{
					if( pU->Soldier.nResType != QXZIYUAN 
						&& pU->Soldier.nResource > 0 )
					{	// 有回送命令
						CTRL_TASK_saveCmdUnit.Ex |= 0x0010;
					}
				}
			}
		}
		//4.2:如果是船,則只有船被選中
		else if( nNSCounter > 0 )
		{
			for( i=0; i< nNSCounter; i++ )
			{
				CTRL_hitSrc[CTRL_nHitCounter].nID = sArrayNS[i];
				CTRL_nHitCounter++;
			}

			// 對未整編的船設置命令組
			CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_SINGLESOLDIER;
			//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;

			// 沒有運載命令,不能回送
			CTRL_TASK_saveCmdUnit.Ex = 0x000F;
		}
		// 4.3:如果是一般士兵,只有士兵被選中
		else if( nNCounter > 0 )
		{
			for( i=0; i< nNCounter; i++ )
			{
				//CTRL_hitSrc[CTRL_nHitCounter].nLevel = 0;
				CTRL_hitSrc[CTRL_nHitCounter].nID = sArrayN[i];
//				CTRL_hitSrc[CTRL_nHitCounter].nTaskIDEx = MAP_UNIT_TYPE_GEN;	// 戰斗部隊將領
				CTRL_nHitCounter++;
			}
			// 對未整編的士兵設置命令組
			CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_SINGLESOLDIER;
			//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
			// 不能回送
			CTRL_TASK_saveCmdUnit.Ex = 0x000F;
		}
		// 5:如果都是整編的部隊,則被選中
		else if( nYCounter > 0 )
		{
			for( i=0; i< nYCounter; i++ )
			{
				//CTRL_hitSrc[CTRL_nHitCounter].nLevel = 0;
				CTRL_hitSrc[CTRL_nHitCounter].nID = sArrayY[i];
//				CTRL_hitSrc[CTRL_nHitCounter].nTaskIDEx = MAP_UNIT_TYPE_GEN;	// 戰斗部隊將領
				CTRL_nHitCounter++;
			}

			// 對已整編的士兵設置命令組
			CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_REGIMENTSOLDIER;
			//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
			// 不能回送
			CTRL_TASK_saveCmdUnit.Ex = 0x0007;

			// 設置回送命令
			if( nYCounter == 1 )
			{
				struct UNIT_STRUCT *pU = MAP_GetUnit( CTRL_hitSrc[0].nID );
				Assert( pU );
				if( EYE_IfUnitIsWorker( pU ) )
				{
					if( pU->Soldier.nResType != QXZIYUAN 
						&& pU->Soldier.nResource > 0 )
					{	// 有回送命令
						CTRL_TASK_saveCmdUnit.Ex |= 0x000F;
					}
				}
			}
		}
		// 6:如果是敵人的部隊,則被選中
		else if( nECounter > 0 )
		{
			for( i=0; i< nECounter; i++ )
			{
				//CTRL_hitSrc[CTRL_nHitCounter].nLevel = 0;
				CTRL_hitSrc[CTRL_nHitCounter].nID = sArrayE[i];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品视频在线观看| 99久久精品一区二区| 国产成人精品免费网站| 欧美人成免费网站| 亚洲欧洲色图综合| 国产真实乱偷精品视频免| 色哟哟国产精品| 欧美国产丝袜视频| 国产在线精品一区二区| 欧美日韩亚洲综合一区二区三区| 国产精品视频你懂的| 奇米在线7777在线精品| 91国偷自产一区二区三区观看| 国产婷婷精品av在线| 免费观看一级欧美片| 欧美性大战久久久久久久| 中文字幕一区二区在线播放| 国产美女精品一区二区三区| 欧美一区二区三区免费视频| 亚洲一区在线观看视频| 91丨porny丨蝌蚪视频| 国产免费成人在线视频| 国产在线观看一区二区| 日韩免费观看高清完整版在线观看 | 91麻豆成人久久精品二区三区| 国产亚洲综合在线| 国模套图日韩精品一区二区| 日韩美女在线视频| 日本亚洲欧美天堂免费| 91麻豆精品国产自产在线| 亚洲午夜免费福利视频| 欧美日韩免费视频| 亚洲va欧美va人人爽| 欧美日韩国产色站一区二区三区| 亚洲一卡二卡三卡四卡五卡| 欧美亚洲综合另类| 亚洲成av人**亚洲成av**| 欧美亚洲精品一区| 亚洲第一综合色| 欧美日韩国产综合一区二区三区 | 中文字幕一区免费在线观看| av在线播放不卡| 国产精品毛片久久久久久久| 盗摄精品av一区二区三区| 国产精品久久99| 91蜜桃网址入口| 一区二区三区日韩精品视频| 欧美日本免费一区二区三区| 日本女优在线视频一区二区 | 精品亚洲成a人| 中文字幕第一页久久| 91香蕉视频在线| 婷婷国产在线综合| 日韩精品一区在线| 成人激情免费网站| 亚洲精品日日夜夜| 555夜色666亚洲国产免| 国产精品中文字幕一区二区三区| 中文字幕第一区第二区| 日本高清无吗v一区| 日本麻豆一区二区三区视频| 国产精品毛片久久久久久久| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲午夜久久久久中文字幕久| 欧美va天堂va视频va在线| 国产91在线|亚洲| 亚洲国产精品久久久男人的天堂| 精品少妇一区二区三区| a4yy欧美一区二区三区| 日韩中文字幕麻豆| 国产精品亲子乱子伦xxxx裸| 欧美性受xxxx| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久久久国产成人精品亚洲午夜 | 国产精品视频你懂的| 欧美巨大另类极品videosbest | 99久久久无码国产精品| 日韩精品欧美成人高清一区二区| 国产亚洲精品久| 欧美性受xxxx黑人xyx性爽| 国产黄色91视频| 偷拍亚洲欧洲综合| 国产精品麻豆网站| 日韩欧美色综合网站| 色94色欧美sute亚洲线路一ni | 国产午夜精品美女毛片视频| 在线亚洲高清视频| 成人精品小蝌蚪| 免费的国产精品| 亚洲一级二级三级| 国产精品水嫩水嫩| 久久久久9999亚洲精品| 在线不卡的av| 在线精品观看国产| 91免费精品国自产拍在线不卡 | 久久久99精品久久| 日韩一级片在线播放| 在线观看视频91| 99re热视频精品| 成人动漫精品一区二区| 国产一区二区美女| 久久精品国产精品亚洲综合| 婷婷综合久久一区二区三区| 一个色综合网站| 亚洲欧美电影一区二区| 中文字幕亚洲在| 亚洲视频 欧洲视频| 亚洲国产激情av| 久久精品在这里| 欧美精品一区二区三| 精品理论电影在线观看| 欧美一区二区私人影院日本| 欧美日韩国产123区| 欧美又粗又大又爽| 欧洲精品在线观看| 欧美调教femdomvk| 欧美日韩综合一区| 欧美日韩一区不卡| 日韩一区二区视频| 精品国产凹凸成av人导航| 欧美成人精品3d动漫h| 欧美刺激午夜性久久久久久久 | 久久奇米777| 日韩精品在线一区二区| 精品1区2区在线观看| 精品成人一区二区三区| 久久嫩草精品久久久精品| 欧美国产精品专区| 亚洲欧美日韩小说| 亚洲高清在线视频| 天天综合日日夜夜精品| 麻豆精品一区二区综合av| 久久99久久精品| 国产麻豆精品在线观看| 成人动漫一区二区在线| 欧美色中文字幕| 欧美一级淫片007| 国产亚洲一区二区在线观看| 国产精品久久久爽爽爽麻豆色哟哟 | 久久九九久久九九| 亚洲欧美在线高清| 亚洲va国产天堂va久久en| 青娱乐精品视频| 成人免费的视频| 色噜噜狠狠色综合中国| 欧美一级日韩一级| 欧美激情一区在线观看| 亚洲美女偷拍久久| 美女被吸乳得到大胸91| 成人av在线资源网| 欧美美女一区二区三区| 久久精品一区蜜桃臀影院| 亚洲欧美激情一区二区| 精品一区二区三区av| 91亚洲精品久久久蜜桃| 精品久久久久香蕉网| 一区二区三区在线观看视频| 毛片基地黄久久久久久天堂| 成人激情动漫在线观看| 欧美一区二区在线播放| 自拍偷拍亚洲综合| 韩国女主播成人在线| 欧美视频一区二区三区四区 | 亚洲成人av电影| 国产精品一区一区三区| 欧美日韩国产综合视频在线观看| 国产午夜精品久久久久久久| 偷拍自拍另类欧美| 色呦呦日韩精品| 日本一区二区三区四区在线视频 | 亚洲成人一区二区在线观看| 成人精品小蝌蚪| 精品国产一区二区三区av性色| 一区二区三区色| 成人污视频在线观看| 欧美电影精品一区二区| 偷拍与自拍一区| 日本精品一级二级| 国产精品入口麻豆九色| 国产乱国产乱300精品| 欧美高清你懂得| 亚洲主播在线播放| 91香蕉视频污在线| 国产精品第13页| 国产成人免费xxxxxxxx| 久久亚洲二区三区| 精品综合久久久久久8888| 欧美丰满少妇xxxbbb| 午夜不卡av在线| 欧美体内she精高潮| 亚洲人成网站在线| 97久久精品人人澡人人爽| 国产精品嫩草99a| 国产精品99久久不卡二区| 精品福利一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 欧美精品 日韩| 日本女人一区二区三区| 欧美一区日韩一区| 麻豆国产91在线播放|