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

📄 cbrunot.cpp

📁 经典游戏赤壁的源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			pUnit->Soldier.nResource = RUN_RESOURCE_GET;
			// 粮仓特殊,要从该粮仓所属的君主的粮食中扣除
			*pSource -= RUN_RESOURCE_GET;
		}
		// 如果资源枯竭,删除该资源
		if( *pSource <= 0 )
		{
			pUnit->Soldier.nResource += *pSource;	// 补回多采的资源
			pU->nLife = 0;
			struct CTRL_TASK_STRUCT task;
			CTRL_TASK_Clear( &task );
			task.nID = pU->nID;
			task.bIRQ = TRUE;
			task.nTaskID = SHANCHU;
			task.bDone = TRUE;
			CTRL_TASK_DeployByComputer( pUnit->Draw.nPlayer, &task );
		}

		// 修改了一个Bug。原来采集铁矿时铁矿的资源显示不会随时更新
		// 现在改正, July 18, 1997
		if( pU->Draw.nFile != 10 
			&& pU->Draw.nFile != 11
			&& EYE_IfFocusOnUnit( pU ) )	// 资源建筑处于焦点状态
		{
			// 更新资源(铁矿)储量
			FACE_UpdateGrade( pU->Build.nResource );
		}
		return 1;	// 成功采集
	}
	else
		return 2;	// 该资源已经枯竭了
}

//把采集的资源送回到家中
BOOL RUN_RETURN_Build( struct UNIT_STRUCT *pUnit, struct UNIT_STRUCT *pU )
{
	BOOL bSuccess = TRUE;

//added by tian yue
	int nJingYanGrade[10]={200,500,1000,1800,3000,5000,8000,12000,18000,27000};

	if( EYE_IfUnitIsWorker( pUnit ) )
	{
		switch( pUnit->Soldier.nResType )
		{
		case	SHULIN:		// 树林
			GAME.Players[pUnit->Draw.nPlayer].nWood += pUnit->Soldier.nResource;
			break;
//			GAME.Players[pUnit->Draw.nPlayer].nFood += pUnit->Soldier.nResource;
//			break;
		case	TIEKUANG:	// 铁矿
			GAME.Players[pUnit->Draw.nPlayer].nIron += pUnit->Soldier.nResource;
			break;
		case	MINJU:		// 民居
			GAME.Players[pUnit->Draw.nPlayer].nGold += pUnit->Soldier.nResource;
			break;
		case	MAITIAN:	// 麦田
		case	LIANGCANG:	// 粮仓
			GAME.Players[pUnit->Draw.nPlayer].nFood += pUnit->Soldier.nResource;
			if( EYE_IfFoodExceeded( pUnit->Draw.nPlayer ) )
			{
				GAME.Players[pUnit->Draw.nPlayer].nFood -= pUnit->Soldier.nResource;
				OutputDebugString( "Food Exceeded!\n" );
				if( EYE_IfSheIsMine( pUnit ) )
				{
					// 粮仓不够无法屯粮,请多修建粮仓。
					FACE_ShowPromptInfor( 10 );
				}
				bSuccess = FALSE;
			}
			break;
		}
		if( bSuccess )
		{
			pUnit->Soldier.nResType = QXZIYUAN;	// 清除资源类型
			pUnit->Soldier.nResource = 0;
			GFWI_bUpdate = TRUE;
		}
		else
			return FALSE;
	}
	else
	{
		Assert( EYE_IfUnitIsWorkerGen( pUnit ) );
		DATA_Lib.Gen[pUnit->Gen.nID].nJingYan++;	// 经验增加1
		//DATA_Lib.Gen[pUnit->Gen.nID].nJingYan+=50;	// 经验增加1
		
		//added by tian yue.
		// 升级
		if( DATA_Lib.Gen[pUnit->Gen.nID].nLevel < 9 )
		{
			if( DATA_Lib.Gen[pUnit->Gen.nID].nJingYan >= nJingYanGrade[DATA_Lib.Gen[pUnit->Gen.nID].nLevel] )
			{
				DATA_Lib.Gen[pUnit->Gen.nID].nJingYan -= nJingYanGrade[DATA_Lib.Gen[pUnit->Gen.nID].nLevel];
				DATA_Lib.Gen[pUnit->Gen.nID].nLevel++;

				//我将领战斗英勇,斩获甚多,晋升一级。
				if( EYE_IfFocusOnUnit( pUnit ) && EYE_IfSheIsMine( pUnit ) )
				{
					FACE_ShowPromptInfor( 12 );
					//---- 肯定音效
					// victory.wav
					DATA_WAVE_EffectPlay( 106 );
					//---- 肯定音效
				}
			}
		}
	}
	return TRUE;
}

// 修理建筑
BOOL RUN_REPAIR_Build( struct UNIT_STRUCT *pUnit )
{
	Assert( pUnit->Status.nParam1 != MAP_DATA_NONE );
	struct UNIT_STRUCT *pU = MAP_GetUnit( pUnit->Status.nParam1 );
	Assert( pU );	// 被修理的建筑的指针
	if( EYE_IfUnitIsDead( pU ) )
	{
		pUnit->Status.bDone = TRUE;
		return TRUE;
	}
	Assert( EYE_IfUnitIsBuild( pU ) && pU->Draw.nPlayer == pUnit->Draw.nPlayer );

	//---- 修理音效
	POINT pt;
	pt.x = pUnit->Draw.nX, pt.y = pUnit->Draw.nY;
	if( PtInRect( &DRAW_rcScreen, pt ) )
	{
		// repair.wav
		DATA_WAVE_EffectPlay( 101 );
	}
	//---- 修理音效
	
//	int nHit = DATA_Lib.Unit[pUnit->Draw.nFile].nNearAttack 
//				+ GAME.Players[pUnit->Draw.nPlayer].nAddNearAttack;
	int nHit = RUN_CREATE_VALUE<<3;

	if( GAME.Players[pUnit->Draw.nPlayer].nGold < RUN_CREATE_VALUE
		|| GAME.Players[pUnit->Draw.nPlayer].nFood < RUN_CREATE_VALUE
		|| GAME.Players[pUnit->Draw.nPlayer].nWood < RUN_CREATE_VALUE
		|| GAME.Players[pUnit->Draw.nPlayer].nIron < RUN_CREATE_VALUE )
	{	// 没钱了,结束
		pUnit->Status.bDone = TRUE;		
		return TRUE;
	}

	pU->nLife += nHit;
	GAME.Players[pUnit->Draw.nPlayer].nGold -= RUN_CREATE_VALUE;
	GAME.Players[pUnit->Draw.nPlayer].nFood -= RUN_CREATE_VALUE;
	GAME.Players[pUnit->Draw.nPlayer].nWood -= RUN_CREATE_VALUE;
	GAME.Players[pUnit->Draw.nPlayer].nIron -= RUN_CREATE_VALUE;
	GFWI_bUpdate = TRUE;

	// 生命满,结束
	if( pU->nLife >= EYE_GetFullLife( pU->Draw.nPlayer, pU->Draw.nFile) )
	{	
		pU->nLife = EYE_GetFullLife( pU->Draw.nPlayer, pU->Draw.nFile);
		pUnit->Status.bDone = TRUE;
		return TRUE;
	}

	// 修改火
	if( pU->Status.nTaskID != JIANZAOZHONG )
		RUN_FIGHT_SetFire( pU );

	if( EYE_IfFocusOnUnit( pU ) )
		//&& EYE_IfSheIsMine( pU ) )
	{
		// 更新血格条
		FACE_ShowProcessBar( PROCESSBAR_STONE, pU->nLife*100/EYE_GetFullLife( pU->Draw.nPlayer, pU->Draw.nFile) );
	}
	return FALSE;
}

// 判断是否有钱升级
BOOL RUN_UPGRADE_IfEnoughMoney( int nPlayer, int nTaskIDEx )
{
	BOOL bRet = TRUE;
	// 付款
	switch( nTaskIDEx )
	{
	case	SHENGJI1:
	case	SHENGJI2:
	case	SHENGJI3:
	case	GONGJIAN1:
	case	GONGJIAN2:
	case	GONGJIAN3:
	case	BINGQI1:
	case	BINGQI2:
	case	BINGQI3:
	case	HUJIA1:
	case	HUJIA2:
	case	HUJIA3:
	case	TOUSHICHE1:
	case	TOUSHICHE2:
	case	XIAOCHUAN:
	case	DACHUAN:
	case	CHUANTI:
		if( GAME.Players[nPlayer].nGold < DATA_Lib.Upgrade[nTaskIDEx].nGold
			|| GAME.Players[nPlayer].nWood < DATA_Lib.Upgrade[nTaskIDEx].nWood
			|| GAME.Players[nPlayer].nIron < DATA_Lib.Upgrade[nTaskIDEx].nIron )
			bRet = FALSE;
		break;
	case	MUCAI1:	// 把1000木材换成钱
		if( GAME.Players[nPlayer].nWood < DATA_Lib.Upgrade[MUCAI1].nWood )
			bRet = FALSE;
		break;
	case	MUCAI2:	// 把5000木材换成钱
		if( GAME.Players[nPlayer].nWood < DATA_Lib.Upgrade[MUCAI2].nWood )
			bRet = FALSE;
		break;
	case	LIANGSHI1:	// 把1000粮食换成钱
		if( GAME.Players[nPlayer].nFood < DATA_Lib.Upgrade[LIANGSHI1].nFood )
			bRet = FALSE;
		break;
	case	LIANGSHI2:	// 把5000粮食换成钱
		if( GAME.Players[nPlayer].nFood < DATA_Lib.Upgrade[LIANGSHI2].nFood )
			bRet = FALSE;
		break;
	case	TIEKUANG1:	// 把1000铁矿石换成钱
		if( GAME.Players[nPlayer].nIron < DATA_Lib.Upgrade[TIEKUANG1].nIron )
			bRet = FALSE;
		break;
	case	TIEKUANG2:	// 把5000铁矿石换成钱
		if( GAME.Players[nPlayer].nIron < DATA_Lib.Upgrade[TIEKUANG2].nIron )
			bRet = FALSE;
		break;
	}
	if( bRet == FALSE && GAME.nMe == nPlayer )
	{
		//------------提示
		//军费不够,无法建造
		FACE_ShowPromptInfor( 7 );
		//------------提示

		//---- 否定音效
		// noselect.wav
		DATA_WAVE_EffectPlay( 99 );
		//---- 否定音效
	}
	return bRet;
}

// 升级预付款
BOOL RUN_UPGRADE_Pay( int nPlayer, int nTaskIDEx )
{
	if( !RUN_UPGRADE_IfEnoughMoney( nPlayer, nTaskIDEx ) )
		return FALSE;

	// 付款
	switch( nTaskIDEx )
	{
	case	SHENGJI1:
	case	SHENGJI2:
	case	SHENGJI3:
	case	GONGJIAN1:
	case	GONGJIAN2:
	case	GONGJIAN3:
	case	BINGQI1:
	case	BINGQI2:
	case	BINGQI3:
	case	HUJIA1:
	case	HUJIA2:
	case	HUJIA3:
	case	TOUSHICHE1:
	case	TOUSHICHE2:
	case	XIAOCHUAN:
	case	DACHUAN:
	case	CHUANTI:
		GAME.Players[nPlayer].nGold -= DATA_Lib.Upgrade[nTaskIDEx].nGold;
		GAME.Players[nPlayer].nWood -= DATA_Lib.Upgrade[nTaskIDEx].nWood;
		GAME.Players[nPlayer].nIron -= DATA_Lib.Upgrade[nTaskIDEx].nIron;
		break;
	case	MUCAI1:	// 把1000木材换成钱
		GAME.Players[nPlayer].nWood -= DATA_Lib.Upgrade[MUCAI1].nWood;
		break;
	case	MUCAI2:	// 把5000木材换成钱
		GAME.Players[nPlayer].nWood -= DATA_Lib.Upgrade[MUCAI2].nWood;
		break;
	case	LIANGSHI1:	// 把1000粮食换成钱
		GAME.Players[nPlayer].nFood -= DATA_Lib.Upgrade[LIANGSHI1].nFood;
		break;
	case	LIANGSHI2:	// 把5000粮食换成钱
		GAME.Players[nPlayer].nFood -= DATA_Lib.Upgrade[LIANGSHI2].nFood;
		break;
	case	TIEKUANG1:	// 把1000铁矿石换成钱
		GAME.Players[nPlayer].nIron -= DATA_Lib.Upgrade[TIEKUANG1].nIron;
		break;
	case	TIEKUANG2:	// 把5000铁矿石换成钱
		GAME.Players[nPlayer].nIron -= DATA_Lib.Upgrade[TIEKUANG2].nIron;
		break;
	}
	GFWI_bUpdate = TRUE;
	return TRUE;
}

// 升级后提货
//void RUN_UPGRADE_Get( int nPlayer, int nTaskIDEx )
void RUN_UPGRADE_Get( struct UNIT_STRUCT *pUnit )
{
//	int nFile = -1;
	Assert( EYE_IfUnitIsBuild( pUnit ) );
	int nPlayer = pUnit->Draw.nPlayer;
	int nTaskIDEx = pUnit->Status.nTaskIDEx;
	// 提货
	switch( nTaskIDEx )
	{
	case	SHENGJI1:
		GAME.Players[nPlayer].dwLifeUp = DATA_Lib.Upgrade[SHENGJI1].dwParam1;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_MAIN] = 1;
		{
			for( int i=0; i<PLAYER_UNIT_MAX; i++ )
			{	// 是建筑但不是箭楼
				struct UNIT_STRUCT *pU = &GAME.Players[nPlayer].Unit[i];
				if( EYE_IfUnitIsBuild( pU ) 
					&& !EYE_IfUnitIsTower( pU ) )
				{
					pU->nLife += DATA_Lib.Upgrade[SHENGJI1].dwParam1;
				}
			}
		}
		pUnit->Build.dwUpgrade[0]=1;
		break;
	case	SHENGJI2:
		GAME.Players[nPlayer].dwLifeUp = DATA_Lib.Upgrade[SHENGJI2].dwParam1;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_MAIN] = 2;
		{
			for( int i=0; i<PLAYER_UNIT_MAX; i++ )
			{	// 是建筑但不是箭楼
				struct UNIT_STRUCT *pU = &GAME.Players[nPlayer].Unit[i];
				if( EYE_IfUnitIsBuild( pU ) 
					&& !EYE_IfUnitIsTower( pU ) )
				{
					pU->nLife += DATA_Lib.Upgrade[SHENGJI1].dwParam1;
				}
			}
		}
		pUnit->Build.dwUpgrade[0]=2;
		break;
	case	SHENGJI3:
		GAME.Players[nPlayer].dwLifeUp = DATA_Lib.Upgrade[SHENGJI3].dwParam1;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_MAIN] = 3;
		{
			for( int i=0; i<PLAYER_UNIT_MAX; i++ )
			{	// 是建筑但不是箭楼
				struct UNIT_STRUCT *pU = &GAME.Players[nPlayer].Unit[i];
				if( EYE_IfUnitIsBuild( pU ) 
					&& !EYE_IfUnitIsTower( pU ) )
				{
					pU->nLife += DATA_Lib.Upgrade[SHENGJI1].dwParam1;
				}
			}
		}
		pUnit->Build.dwUpgrade[0]=3;
		break;
	case	GONGJIAN1:
	case	GONGJIAN2:
	case	GONGJIAN3:
		// 远程攻击力增加
		GAME.Players[nPlayer].nAddFarAttack[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
		GAME.Players[nPlayer].nAddFarAttack[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
		GAME.Players[nPlayer].nAddFarAttack[2] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam3;
		GAME.Players[nPlayer].nAddFarAttack[3] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam4;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_GONGJIAN] = nTaskIDEx - GONGJIAN1 + 1;
		pUnit->Build.dwUpgrade[0] = nTaskIDEx - GONGJIAN1+1;
//		nFile = 4;	// 木材场
		break;
	case	BINGQI1:
	case	BINGQI2:
	case	BINGQI3:
		// 近程攻击力增加
		GAME.Players[nPlayer].nAddNearAttack[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
		GAME.Players[nPlayer].nAddNearAttack[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
		GAME.Players[nPlayer].nAddNearAttack[2] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam3;
		GAME.Players[nPlayer].nAddNearAttack[3] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam4;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_BINGQI] = nTaskIDEx - BINGQI1 + 1;
//		nFile = 2;	// 武器场
		pUnit->Build.dwUpgrade[0] = nTaskIDEx - BINGQI1+1;
		break;
	case	HUJIA1:
	case	HUJIA2:
	case	HUJIA3:
		// 近、远程防御力增加
		GAME.Players[nPlayer].nAddNearDefend[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
		GAME.Players[nPlayer].nAddNearDefend[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
		GAME.Players[nPlayer].nAddNearDefend[2] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam3;
		GAME.Players[nPlayer].nAddNearDefend[3] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam4;
		GAME.Players[nPlayer].nAddFarDefend[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
		GAME.Players[nPlayer].nAddFarDefend[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
		GAME.Players[nPlayer].nAddFarDefend[2] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam3;
		GAME.Players[nPlayer].nAddFarDefend[3] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam4;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_HUJIA] = nTaskIDEx - HUJIA1 + 1;
//		nFile = 2;	// 武器场
		pUnit->Build.dwUpgrade[1] = nTaskIDEx - HUJIA1+1;
		break;
	case	TOUSHICHE1:
	case	TOUSHICHE2:	// 投石车攻击力变化
		GAME.Players[nPlayer].nAddSFarAttack = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_TOUSHICHE] = nTaskIDEx - TOUSHICHE1 + 1;
//		nFile = 8;	// 车兵所
		pUnit->Build.dwUpgrade[0] = nTaskIDEx - TOUSHICHE1+1;
		break;
	case	XIAOCHUAN:	// 小战船攻击力变化
		GAME.Players[nPlayer].nAddWaterAttack[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_CHUAN1] = 1;
//		nFile = 20;	// 船坞
		pUnit->Build.dwUpgrade[0] = 1;
		break;
	case	DACHUAN:	// 大战船攻击力变化
		GAME.Players[nPlayer].nAddWaterAttack[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_CHUAN2] = 1;
//		nFile = 20;	// 船坞
		pUnit->Build.dwUpgrade[1] = 1;
		break;
	case	CHUANTI:	// 战船防御力变化
		GAME.Players[nPlayer].nAddWaterDefend[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
		GAME.Players[nPlayer].nAddWaterDefend[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
		GAME.Players[nPlayer].nGrade[PLAYER_GRADE_CHUAN3] = 1;
//		nFile = 20;	// 船坞
		pUnit->Build.dwUpgrade[2] = 1;
		break;
	case	MUCAI1:	// 把1000木材换成钱
		GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[MUCAI1].nGold;
//		nFile = 23;	// 钱庄
		break;
	case	MUCAI2:	// 把5000木材换成钱
		GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[MUCAI2].nGold;
//		nFile = 23;	// 钱庄
		break;
	case	LIANGSHI1:	// 把1000粮食换成钱
		GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[LIANGSHI1].nGold;
//		nFile = 23;	// 钱庄
		break;
	case	LIANGSHI2:	// 把5000粮食换成钱
		GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[LIANGSHI2].nGold;
//		nFile = 23;	// 钱庄
		break;
	case	TIEKUANG1:	// 把1000铁矿石换成钱
		GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[TIEKUANG1].nGold;
//		nFile = 23;	// 钱庄
		break;
	case	TIEKUANG2:	// 把5000铁矿石换成钱
		GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[TIEKUANG2].nGold;
//		nFile = 23;	// 钱庄
		break;
	}
	GFWI_bUpdate = TRUE;
}

// 升级取消后找钱
// nTaskIDEx	:	升级的类型
void RUN_UPGRADE_PayBack( int nPlayer, int nTaskIDEx )
{
	switch( nTaskIDEx )
	{
	case	SHENGJI1:
	case	SHENGJI2:
	case	SHENGJI3:
	case	GONGJIAN1:
	case	GONGJIAN2:
	case	GONGJIAN3:
	case	BINGQI1:
	case	BINGQI2:
	case	BINGQI3:
	case	HUJIA1:
	case	HUJIA2:
	case	HUJIA3:
	case	TOUSHICHE1:
	case	TOUSHICHE2:
	case	XIAOCHUAN:
	case	DACHUAN:
	case	CHUANTI:
		GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[nTaskIDEx].nGold*RUN_CREATE_PAYBACK/100;
		GAME.Players[nPlayer].nWood += DATA_Lib.Upgrade[nTaskIDEx].nWood*RUN_CREATE_PAYBACK/100;
		GAME.Players[nPlayer].nIron += DATA_Lib.Upgrade[nTaskIDEx].nIron*RUN_CREATE_PAYBACK/100;

⌨️ 快捷键说明

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