initializespatch fix for issue 459. This patch encapsulates the metadata object more and initializes the stat values.

This commit is contained in:
techdragon.nguyen
2010-09-24 11:27:34 +00:00
parent f7d2b774e3
commit 5eab87345a
5 changed files with 128 additions and 69 deletions
+19 -7
View File
@@ -16,21 +16,33 @@ enum DECK_DIFFICULTY
}; };
class DeckMetaData { class DeckMetaData {
private:
string _filename;
string _desc;
string _name;
int _deckid;
// statistical information
int _nbGamesPlayed, _victories, _percentVictories, _difficulty;
public: public:
DeckMetaData(); DeckMetaData();
DeckMetaData(string filename, Player * statsPlayer); DeckMetaData(string filename, Player * statsPlayer);
void load(string filename); void load(string filename);
void loadStatsForPlayer( Player * statsPlayer, string opponentDeckName = "" ); void loadStatsForPlayer( Player * statsPlayer, string opponentDeckName = "" );
// Accessors
string getFilename();
string getDescription(); string getDescription();
string getName();
string desc; int getDeckId();
string name; int getGamesPlayed();
int deckid; int getVictories();
int getVictoryPercentage();
int getDifficulty();
// statistical information
int nbGamesPlayed, victories, percentVictories, difficulty;
}; };
class DeckMetaDataList { class DeckMetaDataList {
+96 -51
View File
@@ -22,64 +22,50 @@ DeckMetaData::DeckMetaData(string filename, Player * statsPlayer){
void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFileName ) void DeckMetaData::loadStatsForPlayer( Player * statsPlayer, string deckStatsFileName )
{ {
DeckStats * stats = DeckStats::GetInstance(); DeckStats * stats = DeckStats::GetInstance();
if ( statsPlayer ) if ( statsPlayer )
{
stats->load(statsPlayer);
DeckStat * opponentDeckStats = stats->getDeckStat(deckStatsFileName);
if ( opponentDeckStats )
{ {
stats->load(statsPlayer); _percentVictories = stats->percentVictories(deckStatsFileName);
DeckStat * opponentDeckStats = stats->getDeckStat(deckStatsFileName); _victories = opponentDeckStats->victories;
if ( opponentDeckStats ) _nbGamesPlayed = opponentDeckStats->nbgames;
if (_percentVictories < 34)
{ {
percentVictories = stats->percentVictories(deckStatsFileName); _difficulty = HARD;
victories = opponentDeckStats->victories; }
nbGamesPlayed = opponentDeckStats->nbgames; else if (_percentVictories < 67)
if (percentVictories < 34){ {
difficulty = HARD; _difficulty = NORMAL;
}else if (percentVictories < 67){ }
difficulty = NORMAL; else
}else{ {
difficulty = EASY; _difficulty = EASY;
}
} }
} }
else }
{ else
if(fileExists(deckStatsFileName.c_str())){ {
stats->load(deckStatsFileName.c_str()); if(fileExists(deckStatsFileName.c_str())){
nbGamesPlayed = stats->nbGames(); stats->load(deckStatsFileName.c_str());
percentVictories = stats->percentVictories(); _nbGamesPlayed = stats->nbGames();
} _percentVictories = stats->percentVictories();
} }
}
stats = NULL;
} }
string DeckMetaData::getDescription()
{
char deckDesc[512];
string difficultyString = "";
switch( difficulty )
{
case HARD:
difficultyString = "Hard";
break;
case EASY:
difficultyString = "Easy";
break;
}
if ( nbGamesPlayed > 0 && difficultyString != "")
sprintf(deckDesc, "Difficulty: %s\nVictory %%: %i\nGames Played: %i\n\n%s", difficultyString.c_str(), percentVictories, nbGamesPlayed, desc.c_str() );
else if ( nbGamesPlayed > 0 )
sprintf(deckDesc, "Victory %%: %i\nGames Played: %i\n\n%s", percentVictories, nbGamesPlayed, desc.c_str() );
else
return desc.c_str();
return deckDesc;
}
void DeckMetaData::load(string filename){ void DeckMetaData::load(string filename){
MTGDeck * mtgd = NEW MTGDeck(filename.c_str(),NULL,1); MTGDeck * mtgd = NEW MTGDeck(filename.c_str(),NULL,1);
name = trim( mtgd->meta_name ); _name = trim( mtgd->meta_name );
desc = trim( mtgd->meta_desc ); _desc = trim( mtgd->meta_desc );
deckid = atoi( (filename.substr( filename.find("deck") + 4, filename.find(".txt") )).c_str() ); _deckid = atoi( (filename.substr( filename.find("deck") + 4, filename.find(".txt") )).c_str() );
_percentVictories = 0;
_nbGamesPlayed = 0;
_filename = filename;
_victories = 0;
delete(mtgd); delete(mtgd);
} }
@@ -99,7 +85,6 @@ void DeckMetaDataList::invalidate(string filename){
} }
} }
DeckMetaData * DeckMetaDataList::get(string filename, Player * statsPlayer){ DeckMetaData * DeckMetaDataList::get(string filename, Player * statsPlayer){
map<string,DeckMetaData *>::iterator it = values.find(filename); map<string,DeckMetaData *>::iterator it = values.find(filename);
if (it ==values.end()){ if (it ==values.end()){
@@ -111,4 +96,64 @@ DeckMetaData * DeckMetaDataList::get(string filename, Player * statsPlayer){
return values[filename]; //this creates a NULL entry if the file does not exist return values[filename]; //this creates a NULL entry if the file does not exist
} }
//Accessors
string DeckMetaData::getFilename()
{
return _filename;
}
string DeckMetaData::getName()
{
return _name;
}
int DeckMetaData::getDeckId()
{
return _deckid;
}
int DeckMetaData::getGamesPlayed()
{
return _nbGamesPlayed;
}
int DeckMetaData::getVictories()
{
return _victories;
}
int DeckMetaData::getVictoryPercentage()
{
return _percentVictories;
}
int DeckMetaData::getDifficulty()
{
return _difficulty;
}
string DeckMetaData::getDescription()
{
char deckDesc[512];
string difficultyString = "";
switch( _difficulty )
{
case HARD:
difficultyString = "Hard";
break;
case EASY:
difficultyString = "Easy";
break;
}
if ( _nbGamesPlayed > 0 && difficultyString != "")
sprintf(deckDesc, "Deck: %s\nDifficulty: %s\nVictory %%: %i\nGames Played: %i\n\n%s", _name.c_str(), difficultyString.c_str(), _percentVictories, _nbGamesPlayed, _desc.c_str() );
else if ( _nbGamesPlayed > 0 )
sprintf(deckDesc, "Deck: %s\nVictory %%: %i\nGames Played: %i\n\n%s", _name.c_str(), _percentVictories, _nbGamesPlayed, _desc.c_str() );
else
sprintf(deckDesc, "Deck: %s\n\n%s", _name.c_str(), _desc.c_str() );
return deckDesc;
}
+9 -7
View File
@@ -35,11 +35,12 @@ vector<DeckMetaData *> GameState::getValidDeckMetaData( string path, string smal
char smallDeckName[512]; char smallDeckName[512];
char deckDesc[512]; char deckDesc[512];
sprintf(buffer, "%s/deck%i.txt",path.c_str(),nbDecks); sprintf(buffer, "%s/deck%i.txt",path.c_str(),nbDecks);
if(DeckMetaData * meta = metas->get(buffer, statsPlayer)){
DeckMetaData * meta = metas->get(buffer, statsPlayer);
if (meta)
{
found = 1; found = 1;
sprintf(smallDeckName, "%s_deck%i",smallDeckPrefix.c_str(),nbDecks); sprintf(smallDeckName, "%s_deck%i",smallDeckPrefix.c_str(),nbDecks);
sprintf(deckDesc, "%s",meta->name.c_str());
if (statsPlayer){ if (statsPlayer){
string smallDeckNameStr = string(smallDeckName); string smallDeckNameStr = string(smallDeckName);
meta->loadStatsForPlayer( statsPlayer, smallDeckNameStr ); meta->loadStatsForPlayer( statsPlayer, smallDeckNameStr );
@@ -47,16 +48,17 @@ vector<DeckMetaData *> GameState::getValidDeckMetaData( string path, string smal
else else
{ {
char playerStatsDeckName[512]; char playerStatsDeckName[512];
sprintf(playerStatsDeckName, "stats/player_deck%i.txt", nbDecks); sprintf(playerStatsDeckName, "stats/player_deck%i.txt", nbDecks);
string deckstats = options.profileFile(playerStatsDeckName); string deckstats = options.profileFile(playerStatsDeckName);
meta->loadStatsForPlayer( NULL, deckstats ); meta->loadStatsForPlayer( NULL, deckstats );
} }
deckDesc[16] = 0; deckDesc[16] = 0;
retList.push_back( meta ); retList.push_back( meta );
nbDecks++; nbDecks++;
} }
meta = NULL;
} }
std::sort( retList.begin(), retList.end(), sortByName); std::sort( retList.begin(), retList.end(), sortByName);
@@ -75,7 +77,7 @@ void GameState::renderDeckMenu ( SimpleMenu * _menu, vector<DeckMetaData *> deck
for (vector<DeckMetaData *>::iterator i = deckMetaDataList.begin(); i != deckMetaDataList.end(); i++) for (vector<DeckMetaData *>::iterator i = deckMetaDataList.begin(); i != deckMetaDataList.end(); i++)
{ {
DeckMetaData * deckMetaData = *i; DeckMetaData * deckMetaData = *i;
string deckName = deckMetaData -> name; string deckName = deckMetaData -> getName();
string deckDescription = deckMetaData -> getDescription(); string deckDescription = deckMetaData -> getDescription();
//translate decks desc //translate decks desc
it = t->deckValues.find(deckName); it = t->deckValues.find(deckName);
@@ -90,7 +92,7 @@ void GameState::renderDeckMenu ( SimpleMenu * _menu, vector<DeckMetaData *> deck
// deck sorting routines // deck sorting routines
bool sortByName( DeckMetaData * d1, DeckMetaData * d2 ) bool sortByName( DeckMetaData * d1, DeckMetaData * d2 )
{ {
return strcmp( d1->name.c_str(), d2->name.c_str()) < 0; return strcmp( d1->getName().c_str(), d2->getName().c_str()) < 0;
} }
+1 -1
View File
@@ -1475,7 +1475,7 @@ void GameStateDeckViewer::ButtonPressed(int controllerId, int controlId)
if (controlId == MENU_ITEM_NEW_DECK) // new deck option selected if (controlId == MENU_ITEM_NEW_DECK) // new deck option selected
deckIdNumber = deckList->size() + 1; deckIdNumber = deckList->size() + 1;
else if (deckListSize > 0 && controlId <= deckListSize) else if (deckListSize > 0 && controlId <= deckListSize)
deckIdNumber = deckList->at(controlId - 1)->deckid; deckIdNumber = deckList->at(controlId - 1)-> getDeckId();
else else
deckIdNumber = controlId; deckIdNumber = controlId;
+3 -3
View File
@@ -527,7 +527,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) {
break; break;
} }
else if ( controlId != MENUITEM_EVIL_TWIN && aiDeckSize > 0) // evil twin else if ( controlId != MENUITEM_EVIL_TWIN && aiDeckSize > 0) // evil twin
deckNumber = deckManager->getAIDeckOrderList()->at( controlId - 1 )->deckid; deckNumber = deckManager->getAIDeckOrderList()->at( controlId - 1 )->getDeckId();
loadPlayer(1,deckNumber,1); loadPlayer(1,deckNumber,1);
OpponentsDeckid=deckNumber; OpponentsDeckid=deckNumber;
@@ -542,7 +542,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) {
if ( controlId == MENUITEM_RANDOM_PLAYER ) // Random Player Deck Selection if ( controlId == MENUITEM_RANDOM_PLAYER ) // Random Player Deck Selection
{ {
vector<DeckMetaData *> * playerDeckList = deckManager->getPlayerDeckOrderList(); vector<DeckMetaData *> * playerDeckList = deckManager->getPlayerDeckOrderList();
deckNumber = playerDeckList->at(WRand() * 1001 % (playerDeckList->size()) )->deckid; deckNumber = playerDeckList->at(WRand() * 1001 % (playerDeckList->size()) )->getDeckId();
loadPlayer( 0, deckNumber ); loadPlayer( 0, deckNumber );
deckmenu->Close(); deckmenu->Close();
mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY; mGamePhase = DUEL_STATE_CHOOSE_DECK2_TO_PLAY;
@@ -562,7 +562,7 @@ void GameStateDuel::ButtonPressed(int controllerId, int controlId) {
if (mGamePhase == DUEL_STATE_CHOOSE_DECK1){ if (mGamePhase == DUEL_STATE_CHOOSE_DECK1){
vector<DeckMetaData *> * playerDeck = deckManager->getPlayerDeckOrderList(); vector<DeckMetaData *> * playerDeck = deckManager->getPlayerDeckOrderList();
if ( !premadeDeck && controlId > 0 ) if ( !premadeDeck && controlId > 0 )
deckNumber = playerDeck->at( controlId - 1 )->deckid; deckNumber = playerDeck->at( controlId - 1 )->getDeckId();
loadPlayer(0,deckNumber); loadPlayer(0,deckNumber);
deckmenu->Close(); deckmenu->Close();
mGamePhase = DUEL_STATE_CHOOSE_DECK1_TO_2; mGamePhase = DUEL_STATE_CHOOSE_DECK1_TO_2;