本文整理汇总了C++中CvPlot::getImprovementType方法的典型用法代码示例。如果您正苦于以下问题:C++ CvPlot::getImprovementType方法的具体用法?C++ CvPlot::getImprovementType怎么用?C++ CvPlot::getImprovementType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CvPlot
的用法示例。
在下文中一共展示了CvPlot::getImprovementType方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: BeginTurn
// ---------------------------------------------------------------------------
/// Called every turn
void CvBarbarians::BeginTurn()
{
CvGame &kGame = GC.getGame();
const ImprovementTypes eCamp = kGame.GetBarbarianCampImprovementType();
CvMap& kMap = GC.getMap();
int iWorldNumPlots = kMap.numPlots();
for (int iPlotLoop = 0; iPlotLoop < iWorldNumPlots; iPlotLoop++)
{
if (m_aiPlotBarbCampSpawnCounter[iPlotLoop] > 0)
{
// No Camp here any more
CvPlot* pPlot = kMap.plotByIndex(iPlotLoop);
if (pPlot->getImprovementType() != eCamp)
{
m_aiPlotBarbCampSpawnCounter[iPlotLoop] = -1;
m_aiPlotBarbCampNumUnitsSpawned[iPlotLoop] = -1;
}
else
{
m_aiPlotBarbCampSpawnCounter[iPlotLoop]--;
}
}
// Counter is negative, meaning a camp was cleared here recently and isn't allowed to respawn in the area for a while
else if (m_aiPlotBarbCampSpawnCounter[iPlotLoop] < -1)
{
m_aiPlotBarbCampSpawnCounter[iPlotLoop]++;
}
}
}
示例2: BeginTurn
// ---------------------------------------------------------------------------
/// Called every turn
void CvBarbarians::BeginTurn()
{
CvGame &kGame = GC.getGame();
const ImprovementTypes eCamp = kGame.GetBarbarianCampImprovementType();
CvMap& kMap = GC.getMap();
int iWorldNumPlots = kMap.numPlots();
for (int iPlotLoop = 0; iPlotLoop < iWorldNumPlots; iPlotLoop++)
{
if (m_aiPlotBarbCampSpawnCounter[iPlotLoop] > 0)
{
// No Camp here any more
CvPlot* pPlot = kMap.plotByIndex(iPlotLoop);
if (pPlot->getImprovementType() != eCamp)
{
m_aiPlotBarbCampSpawnCounter[iPlotLoop] = -1;
m_aiPlotBarbCampNumUnitsSpawned[iPlotLoop] = -1;
}
else
{
m_aiPlotBarbCampSpawnCounter[iPlotLoop]--;
}
}
// Counter is negative, meaning a camp was cleared here recently and isn't allowed to respawn in the area for a while
else if (m_aiPlotBarbCampSpawnCounter[iPlotLoop] < -1)
{
m_aiPlotBarbCampSpawnCounter[iPlotLoop]++;
}
#if defined(MOD_DIPLOMACY_CITYSTATES_QUESTS)
if (m_aiPlotBarbCitySpawnCounter[iPlotLoop] > 0)
{
// No City here any more
CvPlot* pPlot = kMap.plotByIndex(iPlotLoop);
if (pPlot->isCity() && pPlot->getOwner() != BARBARIAN_PLAYER)
{
m_aiPlotBarbCitySpawnCounter[iPlotLoop] = -1;
m_aiPlotBarbCityNumUnitsSpawned[iPlotLoop] = -1;
}
else
{
m_aiPlotBarbCitySpawnCounter[iPlotLoop]--;
}
}
// Counter is negative, meaning a camp was cleared here recently and isn't allowed to respawn in the area for a while
else if (m_aiPlotBarbCitySpawnCounter[iPlotLoop] < -1)
{
m_aiPlotBarbCitySpawnCounter[iPlotLoop]++;
}
#endif
}
}
示例3: PlotFoundValue
//.........这里部分代码省略.........
iPlotValue -= iRingModifier * GC.getSETTLER_FOOD_MULTIPLIER() * 2;
}
iPlotValue += iStrategicValue;
// if this tile is a NW boost the value just so that we force the AI to claim them (if we can work it)
#if defined(MOD_GLOBAL_CITY_WORKING)
if (pLoopPlot->IsNaturalWonder() && iDistance > 0 && iDistance <= pPlayer->getWorkPlotDistance())
#else
if (pLoopPlot->IsNaturalWonder() && iDistance > 0 && iDistance <= NUM_CITY_RINGS)
#endif
{
//iPlotValue += iPlotValue * 2 + 10;
iPlotValue += iPlotValue * 2 + 500;
}
// lower value a lot if we already own this tile
if (iPlotValue > 0 && pLoopPlot->getOwner() == pPlayer->GetID())
{
#if defined(MOD_BALANCE_CORE_SETTLER)
if (MOD_BALANCE_CORE_SETTLER)
{
iPlotValue *= 2;
iPlotValue /= 3;
}
#else
iPlotValue /= 4;
#endif
}
// add this plot into the total
rtnValue += iPlotValue;
FeatureTypes ePlotFeature = pLoopPlot->getFeatureType();
ImprovementTypes ePlotImprovement = pLoopPlot->getImprovementType();
ResourceTypes ePlotResource = pLoopPlot->getResourceType();
if (ePlotFeature == FEATURE_FOREST)
{
if (iDistance <= 5)
{
++iIroquoisForestCount;
if (iDistance == 1)
{
if (ePlotImprovement == NO_IMPROVEMENT)
{
++iCelticForestCount;
}
}
}
}
else if (ePlotFeature == FEATURE_JUNGLE)
{
#if defined(MOD_GLOBAL_CITY_WORKING)
if (iDistance <= pPlayer->getWorkPlotDistance())
#else
if (iDistance <= NUM_CITY_RINGS)
#endif
{
++iBrazilJungleCount;
}
}
else if (ePlotFeature == FEATURE_MARSH || ePlotFeature == FEATURE_FLOOD_PLAINS)
{
#if defined(MOD_GLOBAL_CITY_WORKING)
if (iDistance <= pPlayer->getWorkPlotDistance())
#else
示例4: canPlaceGoodyAt
bool CvMapGenerator::canPlaceGoodyAt(ImprovementTypes eImprovement, int iX, int iY)
{
PROFILE_FUNC();
CvPlot* pPlot;
FAssertMsg(eImprovement != NO_IMPROVEMENT, "Improvement is not assigned a valid value");
FAssertMsg(GC.getImprovementInfo(eImprovement).isGoody(), "ImprovementType eImprovement is expected to be a goody");
if (GC.getGameINLINE().isOption(GAMEOPTION_NO_GOODY_HUTS))
{
return false;
}
pPlot = GC.getMapINLINE().plotINLINE(iX, iY);
if (!(pPlot->canHaveImprovement(eImprovement, NO_TEAM)))
{
return false;
}
long result = 0;
if (gDLL->getPythonIFace()->pythonCanPlaceGoodyAt(pPlot, &result) && !gDLL->getPythonIFace()->pythonUsingDefaultImpl()) // Python override
{
if (result >= 0)
{
return result;
}
else
{
FAssertMsg(false, "pythonGetRiverAltitude() must return >= 0");
}
}
if (pPlot->getImprovementType() != NO_IMPROVEMENT)
{
return false;
}
if (pPlot->getBonusType() != NO_BONUS)
{
return false;
}
if (pPlot->isImpassable())
{
return false;
}
int iUniqueRange = GC.getImprovementInfo(eImprovement).getGoodyUniqueRange();
for (int iDX = -iUniqueRange; iDX <= iUniqueRange; iDX++)
{
for (int iDY = -iUniqueRange; iDY <= iUniqueRange; iDY++)
{
CvPlot *pLoopPlot = plotXY(iX, iY, iDX, iDY);
if (pLoopPlot != NULL && pLoopPlot->getImprovementType() == eImprovement)
{
return false;
}
}
}
return true;
}
示例5: FindBestArtistTargetPlot
CvPlot* CvPlayerAI::FindBestArtistTargetPlot(CvUnit* pGreatArtist, int& iResultScore)
{
CvAssertMsg(pGreatArtist, "pGreatArtist is null");
if(!pGreatArtist)
{
return NULL;
}
iResultScore = 0;
CvPlotsVector& m_aiPlots = GetPlots();
CvPlot* pBestPlot = NULL;
int iBestScore = 0;
// loop through plots and wipe out ones that are invalid
const uint nPlots = m_aiPlots.size();
for(uint ui = 0; ui < nPlots; ui++)
{
if(m_aiPlots[ui] == -1)
{
continue;
}
CvPlot* pPlot = GC.getMap().plotByIndex(m_aiPlots[ui]);
if(pPlot->isWater())
{
continue;
}
if(!pPlot->IsAdjacentOwnedByOtherTeam(getTeam()))
{
continue;
}
// don't build over luxury resources
ResourceTypes eResource = pPlot->getResourceType();
if(eResource != NO_RESOURCE)
{
CvResourceInfo* pkResource = GC.getResourceInfo(eResource);
if(pkResource != NULL)
{
if (pkResource->getResourceUsage() == RESOURCEUSAGE_LUXURY)
{
continue;
}
}
}
// if no improvement can be built on this plot, then don't consider it
FeatureTypes eFeature = pPlot->getFeatureType();
if (eFeature != NO_FEATURE && GC.getFeatureInfo(eFeature)->isNoImprovement())
{
continue;
}
// Improvement already here?
ImprovementTypes eImprovement = (ImprovementTypes)pPlot->getImprovementType();
if (eImprovement != NO_IMPROVEMENT)
{
CvImprovementEntry* pkImprovementInfo = GC.getImprovementInfo(eImprovement);
if(pkImprovementInfo)
{
if (pkImprovementInfo->GetCultureBombRadius() > 0)
{
continue;
}
}
}
int iScore = 0;
for(int iI = 0; iI < NUM_DIRECTION_TYPES; ++iI)
{
CvPlot* pAdjacentPlot = plotDirection(pPlot->getX(), pPlot->getY(), ((DirectionTypes)iI));
// if there's no plot, bail
if(pAdjacentPlot == NULL)
{
continue;
}
// if the plot is ours or no one's, bail
if(pAdjacentPlot->getTeam() == NO_TEAM || pAdjacentPlot->getTeam() == getTeam())
{
continue;
}
// don't evaluate city plots since we don't get ownership of them with the bomb
if(pAdjacentPlot->getPlotCity())
{
continue;
}
const PlayerTypes eOtherPlayer = pAdjacentPlot->getOwner();
if(GET_PLAYER(eOtherPlayer).isMinorCiv())
{
MinorCivApproachTypes eMinorApproach = GetDiplomacyAI()->GetMinorCivApproach(eOtherPlayer);
// if we're friendly or protective, don't be a jerk. Bail out.
if(eMinorApproach != MINOR_CIV_APPROACH_CONQUEST && eMinorApproach != MINOR_CIV_APPROACH_IGNORE)
//.........这里部分代码省略.........
示例6: PlotFoundValue
//.........这里部分代码省略.........
iTotalFoodValue += iFoodValue;
iTotalHappinessValue += iHappinessValue;
iTotalProductionValue += iProductionValue;
iTotalGoldValue += iGoldValue;
iTotalScienceValue += iScienceValue;
iTotalFaithValue += iFaithValue;
iTotalResourceValue += iResourceValue;
iTotalStrategicValue += iStrategicValue;
iPlotValue += iRingModifier * ( iFoodValue + iHappinessValue + iProductionValue + iGoldValue + iScienceValue + iFaithValue + iResourceValue ) + iStrategicValue;
}
// for the central plot
if (iDistance==0)
vQualifiersPositive.push_back( CvString::format("raw plot value %d", iPlotValue).c_str() );
if (iDistance==1 && !pPlot->isCoastalLand(GC.getMIN_WATER_SIZE_FOR_OCEAN()) && pLoopPlot->isCoastalLand(GC.getMIN_WATER_SIZE_FOR_OCEAN()))
bIsAlmostCoast = true;
// if this tile is a NW boost the value just so that we force the AI to claim them (if we can work it)
if (pLoopPlot->IsNaturalWonder() && iPlotValue>0)
iPlotValue *= 15;
// lower value a lot if we already own this tile
if (iPlotValue > 0 && pLoopPlot->getOwner() == ePlayer && ePlayer != NO_PLAYER)
iPlotValue /= 2;
// add this plot into the total
workablePlots.push_back( SPlotWithScore(pLoopPlot,iPlotValue) );
// some civ-specific checks
FeatureTypes ePlotFeature = pLoopPlot->getFeatureType();
ImprovementTypes ePlotImprovement = pLoopPlot->getImprovementType();
ResourceTypes ePlotResource = pLoopPlot->getResourceType();
if (ePlotFeature == FEATURE_FOREST)
{
if (iDistance <= 5)
{
++iIroquoisForestCount;
if (iDistance == 1)
if (ePlotImprovement == NO_IMPROVEMENT)
++iCelticForestCount;
}
}
else if (ePlotFeature == FEATURE_JUNGLE)
{
if (iDistance <= iRange)
++iBrazilJungleCount;
}
else if (ePlotFeature == FEATURE_MARSH || ePlotFeature == FEATURE_FLOOD_PLAINS)
{
if (iDistance <= iRange)
++iWetlandsCount;
}
if (pLoopPlot->IsNaturalWonder())
{
if (iDistance <= iRange)
++iNaturalWonderCount;
}
if (pLoopPlot->isLake())
{
if (iDistance <= iRange)
示例7: PlotFoundValue
//.........这里部分代码省略.........
iTotalStrategicValue += iStrategicValue;
int iPlotValue = iFoodValue + iHappinessValue + iProductionValue + iGoldValue + iScienceValue + iFaithValue + iResourceValue;
if (iPlotValue == 0)
{
// this tile is so bad it gets negatives
iPlotValue -= iRingModifier * GC.getSETTLER_FOOD_MULTIPLIER() * 2;
}
iPlotValue += iStrategicValue;
// if this tile is a NW boost the value just so that we force the AI to claim them (if we can work it)
if (pLoopPlot->IsNaturalWonder() && iDistance > 0 && iDistance <= NUM_CITY_RINGS)
{
iPlotValue += iPlotValue * 2 + 10;
}
// lower value a lot if we already own this tile
if (iPlotValue > 0 && pLoopPlot->getOwner() == pPlayer->GetID())
{
iPlotValue /= 4;
}
// add this plot into the total
rtnValue += iPlotValue;
if (pLoopPlot->getFeatureType() == FEATURE_FOREST)
{
if (iDistance <= 5)
{
++iIroquoisForestCount;
if (iDistance == 1)
{
if (pLoopPlot->getImprovementType() == NO_IMPROVEMENT)
{
++iCelticForestCount;
}
}
}
}
}
}
else // this tile is owned by someone else
{
// See if there are other cities nearby (only count major civs)
if (iClosestEnemyCity > iDistance)
{
if (pLoopPlot->isCity() && (pLoopPlot->getOwner() < MAX_MAJOR_CIVS))
{
iClosestEnemyCity = iDistance;
}
}
}
}
}
}
}
if (pPlayer->GetPlayerTraits()->IsFaithFromUnimprovedForest())
{
if (iCelticForestCount >= 3)
{
rtnValue += 2 * 1000 * m_iFlavorMultiplier[YIELD_FAITH];
}
else if (iCelticForestCount >= 1)
{
示例8: MarkCellsNearEnemy
// Indicate the plots we might want to move to that the enemy can attack
void CvTacticalAnalysisMap::MarkCellsNearEnemy()
{
int iDistance;
// Look at every cell on the map
for(int iI = 0; iI < GC.getMap().numPlots(); iI++)
{
bool bMarkedIt = false; // Set true once we've found one that enemy can move past (worst case)
CvPlot* pPlot = GC.getMap().plotByIndexUnchecked(iI);
if(m_pPlots[iI].IsRevealed() && !m_pPlots[iI].IsImpassableTerrain() && !m_pPlots[iI].IsImpassableTerritory())
{
// Friendly cities always safe
if(!m_pPlots[iI].IsFriendlyCity())
{
if(!pPlot->isVisibleToEnemyTeam(m_pPlayer->getTeam()))
{
m_pPlots[iI].SetNotVisibleToEnemy(true);
}
else
{
for(unsigned int iUnitIndex = 0; iUnitIndex < m_EnemyUnits.size() && !bMarkedIt; iUnitIndex++)
{
CvUnit* pUnit = m_EnemyUnits[iUnitIndex];
if(pUnit->getArea() == pPlot->getArea())
{
// Distance check before hitting pathfinder
iDistance = plotDistance(pUnit->getX(), pUnit->getY(), pPlot->getX(), pPlot->getY());
if(iDistance == 0)
{
m_pPlots[iI].SetSubjectToAttack(true);
m_pPlots[iI].SetEnemyCanMovePast(true);
bMarkedIt = true;
}
// TEMPORARY OPTIMIZATION: Assumes can't use roads or RR
else if(iDistance <= pUnit->baseMoves())
{
int iTurnsToReach;
iTurnsToReach = TurnsToReachTarget(pUnit, pPlot, true /*bReusePaths*/, true /*bIgnoreUnits*/); // Its ok to reuse paths because when ignoring units, we don't use the tactical analysis map (which we are building)
if(iTurnsToReach <= 1)
{
m_pPlots[iI].SetSubjectToAttack(true);
}
if(iTurnsToReach == 0)
{
m_pPlots[iI].SetEnemyCanMovePast(true);
bMarkedIt = true;
}
}
}
}
// Check adjacent plots for enemy citadels
if(!m_pPlots[iI].IsSubjectToAttack())
{
CvPlot* pAdjacentPlot;
for(int jJ = 0; jJ < NUM_DIRECTION_TYPES; jJ++)
{
pAdjacentPlot = plotDirection(pPlot->getX(), pPlot->getY(), ((DirectionTypes)jJ));
if(pAdjacentPlot != NULL && pAdjacentPlot->getOwner() != NO_PLAYER)
{
if(atWar(m_pPlayer->getTeam(), GET_PLAYER(pAdjacentPlot->getOwner()).getTeam()))
{
ImprovementTypes eImprovement = pAdjacentPlot->getImprovementType();
if(eImprovement != NO_IMPROVEMENT && GC.getImprovementInfo(eImprovement)->GetNearbyEnemyDamage() > 0)
{
m_pPlots[iI].SetSubjectToAttack(true);
break;
}
}
}
}
}
}
}
}
}
}