本文整理汇总了C++中CShipClass::MatchesCriteria方法的典型用法代码示例。如果您正苦于以下问题:C++ CShipClass::MatchesCriteria方法的具体用法?C++ CShipClass::MatchesCriteria怎么用?C++ CShipClass::MatchesCriteria使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CShipClass
的用法示例。
在下文中一共展示了CShipClass::MatchesCriteria方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RunEncounterSim
void RunEncounterSim (CUniverse &Universe, CXMLElement *pCmdLine)
{
int iRuns = pCmdLine->GetAttributeIntegerBounded(COUNT_ATTRIB, 1, -1, DEFAULT_RUN_COUNT);
int iTimeOut = DEFAULT_TIME_OUT;
// Get the station criteria
CString sCriteria = strPatternSubst(CONSTLIT("%s t"), pCmdLine->GetAttribute(DEFENDERS_ATTRIB));
CDesignTypeCriteria DefenderCriteria;
if (CDesignTypeCriteria::ParseCriteria(sCriteria, &DefenderCriteria) != NOERROR)
{
printf("ERROR: Unable to parse defenders criteria.\n");
return;
}
bool bAll = pCmdLine->GetAttributeBool(CONSTLIT("all"));
// Get the criteria from the command line. Always append 's' because we
// want ship classes.
sCriteria = strPatternSubst(CONSTLIT("%s s"), pCmdLine->GetAttribute(ATTACKERS_ATTRIB));
CDesignTypeCriteria AttackerCriteria;
if (CDesignTypeCriteria::ParseCriteria(sCriteria, &AttackerCriteria) != NOERROR)
{
printf("ERROR: Unable to parse attackers criteria.\n");
return;
}
// Create a viewer, if desired
CSimViewer Viewer;
if (pCmdLine->GetAttributeBool(VIEWER_ATTRIB))
Viewer.Create();
// Print headers
printf("Encounter\tLevel");
int iAttacker;
for (iAttacker = 0; iAttacker < Universe.GetShipClassCount(); iAttacker++)
{
CShipClass *pAttackerClass = Universe.GetShipClass(iAttacker);
if (!pAttackerClass->MatchesCriteria(AttackerCriteria))
continue;
printf("\t%s", pAttackerClass->GetName().GetASCIIZPointer());
}
printf("\n");
// Loop over all defenders
int iDefender;
for (iDefender = 0; iDefender < Universe.GetStationTypeCount(); iDefender++)
{
CStationType *pDefenderType = Universe.GetStationType(iDefender);
if (!bAll && pDefenderType->GetLevel() == 0)
continue;
if (!pDefenderType->MatchesCriteria(DefenderCriteria))
continue;
// Compute an enemy of the station
CSovereign *pAttackerSovereign = GetAttackerSovereign(Universe, pDefenderType);
if (pAttackerSovereign == NULL)
{
printf("ERROR: Unable to find enemy sovereign of encounter: %s [%x].\n", pDefenderType->GetNounPhrase().GetASCIIZPointer(), pDefenderType->GetUNID());
return;
}
printf("%s [%x]\t%d", pDefenderType->GetNounPhrase().GetASCIIZPointer(), pDefenderType->GetUNID(), pDefenderType->GetLevel());
// Loop over all attackers
for (iAttacker = 0; iAttacker < Universe.GetShipClassCount(); iAttacker++)
{
CShipClass *pAttackerClass = Universe.GetShipClass(iAttacker);
if (!pAttackerClass->MatchesCriteria(AttackerCriteria))
continue;
// Do several runs so we can get some statistical data
int iAttackerSurvived = 0;
int iRun;
for (iRun = 0; iRun < iRuns; iRun++)
{
EResults iResult = RunEncounter(Universe, Viewer, pDefenderType, pAttackerClass, pAttackerSovereign);
if (iResult == resultError)
return;
// Did the attacker survive?
if (iResult != resultAttackerDestroyed)
iAttackerSurvived++;
}
// Output results for this attacker
//.........这里部分代码省略.........
示例2: GenerateShipTable
void GenerateShipTable (CUniverse &Universe, CXMLElement *pCmdLine, CIDTable &EntityTable)
{
int i, j;
// Some options
bool bAllClasses = (pCmdLine->GetAttributeBool(CONSTLIT("allClasses")) || pCmdLine->GetAttributeBool(CONSTLIT("all")));
// Get the criteria from the command line. Always append 's' because we
// want ship classes.
CString sCriteria = strPatternSubst(CONSTLIT("%s s"), pCmdLine->GetAttribute(CONSTLIT("criteria")));
CDesignTypeCriteria Criteria;
if (CDesignTypeCriteria::ParseCriteria(sCriteria, &Criteria) != NOERROR)
{
printf("ERROR: Unable to parse criteria.\n");
return;
}
// Generate a list of columns to display
TArray<CString> Cols;
Cols.Insert(FIELD_LEVEL);
Cols.Insert(FIELD_NAME);
for (i = 0; i < pCmdLine->GetAttributeCount(); i++)
{
CString sAttrib = pCmdLine->GetAttributeName(i);
if (strEquals(sAttrib, FIELD_BALANCE))
{
Cols.Insert(CONSTLIT("balanceType"));
Cols.Insert(CONSTLIT("combatStrength"));
Cols.Insert(CONSTLIT("damage"));
Cols.Insert(CONSTLIT("defenseStrength"));
}
else if (!IsMainCommandParam(sAttrib)
&& !strEquals(sAttrib, CONSTLIT("shiptable")))
{
CString sValue = pCmdLine->GetAttribute(i);
if (!strEquals(sValue, CONSTLIT("true")))
Cols.Insert(strPatternSubst(CONSTLIT("%s:%s"), sAttrib, sValue));
else
Cols.Insert(sAttrib);
}
}
// Output the header
for (j = 0; j < Cols.GetCount(); j++)
{
if (j != 0)
printf("\t");
printf(Cols[j].GetASCIIZPointer());
}
printf("\n");
// Generate a table
CSymbolTable Table(FALSE, TRUE);
// Loop over all items that match and add them to
// a sorted table.
for (i = 0; i < Universe.GetShipClassCount(); i++)
{
CShipClass *pClass = Universe.GetShipClass(i);
// Only include generic classes unless otherwise specified
if (!bAllClasses && !pClass->HasLiteralAttribute(CONSTLIT("genericClass")))
continue;
if (!pClass->MatchesCriteria(Criteria))
continue;
// Figure out the sort order
char szBuffer[1024];
wsprintf(szBuffer, "%04d%s%d",
pClass->GetLevel(),
pClass->GetNounPhrase(0).GetASCIIZPointer(),
pClass->GetUNID());
Table.AddEntry(CString(szBuffer), (CObject *)pClass);
}
// Output table
for (i = 0; i < Table.GetCount(); i++)
{
CShipClass *pClass = (CShipClass *)Table.GetValue(i);
// Output each row
for (j = 0; j < Cols.GetCount(); j++)
{
if (j != 0)
//.........这里部分代码省略.........