Files
wagic/projects/mtg/include/MTGDeck.h
omegablast2002@yahoo.com 76653b6f54 going to go ahead and commit this now as updating the ai decks to use this tool is going to be a huge task...i originally wanted to commit this when i had a substantial amount of ai decks using it, to show case how it makes a huge difference.
it is a feature that is for ai deck building
what it will do is as follows

#NAME:sample deck
#DESC:The forces of fire and nature unite. 
#DESC: 
#DESC:Can you withstand 
#DESC:their combined fervor? 

toggledifficulty:lotus petal|black lotus (*) * 4
grizzly bear (*) * 4
someCard (8) *4

notice the toggle dificulty?
syntax is ....toggledifficulty:easy card name or number|hard card (optional set if both belong to same set otheriwse use * ) *howmany

toggledifficulty:frying pan|machine gun
toggledifficulty:tomatoe|pumpkin (MBS) * 3
toggledifficulty:tomatoe|squash
grizzly bear (*) * 4

the above exsample as easy will have a deck with:
frying pan
4X tomatoe
4X grizzly bear

and on hard it will have:
machine gun
3x pumpkin
squash
4X grizzly bears

the entire deck can be built with toggledifficulty cards....its not limited to just a single use.
you can also mix it up, some can be toggledifficulty some can be just like normal, you are not limited to having to have a complete deck of toggled cards...

if your currently selected deck has an over all win ratio of 65% or higher...this deck will have 4 black lotuses in it...if youre overall win with the current deck you are playing is below 65% then those 4 black lotuses are replaced by 4 lotus petals instead...effectively making it an easier ai deck...

note, the 2 cards used are exsamples...its a great way to show you the potential this change can have...an ai deck with 4 black lotuses will do WAY better then the same deck with 4 lotus petal...if you catch my drift...
2011-02-11 18:01:50 +00:00

181 lines
4.9 KiB
C++

#ifndef _MTGDECK_H_
#define _MTGDECK_H_
#define MTG_ERROR -1
#include "MTGDefinitions.h"
#include "GameApp.h"
#include "WResourceManager.h"
#include <dirent.h>
#include <string>
using std::string;
class GameApp;
class MTGCard;
class CardPrimitive;
class MTGPack;
class MTGSetInfo
{
public:
MTGSetInfo(string _id);
~MTGSetInfo();
string id; //Short name: 10E, RAV, etc. Automatic from folder.
string author; //Author of set, for crediting mod makers, etc.
string name; //Long name: Tenth Edition
int block; //For future use by tournament mode, etc.
int year; //The year the set was released.
//TODO Way to group cards by name, rather than mtgid.
void count(MTGCard * c);
int totalCards();
string getName();
string getBlock();
void processConfLine(string line);
enum
{
//For memoized counts
LAND = 0,
COMMON = 1,
UNCOMMON = 2,
RARE = 3,
MAX_RARITY = 4, //For boosters, mythic is part of rare... always.
MYTHIC = 4,
TOTAL_CARDS = 5,
MAX_COUNT = 6
};
MTGPack * mPack; //Does it use a specialized booster pack?
bool bZipped; //Is this set's images present as a zip file?
bool bThemeZipped; //[...] in the theme?
int counts[MTGSetInfo::MAX_COUNT];
};
class MTGSets
{
public:
//These values have to be < 0
// A setID with a value >=0 will be looked into the sets table,
// Negative values will be compared to these enums throughout the code (shop, filters...)
enum
{
INTERNAL_SET = -1, ALL_SETS = -2,
};
friend class MTGSetInfo;
MTGSets();
~MTGSets();
int Add(const char * subtype);
int findSet(string value);
int findBlock(string s);
int size();
int getSetNum(MTGSetInfo*i);
int operator[](string id); //Returns set id index, -1 for failure.
string operator[](int id); //Returns set id name, "" for failure.
MTGSetInfo* getInfo(int setID);
MTGSetInfo* randomSet(int blockId = -1, int atleast = -1); //Tries to match, otherwise 100% random unlocked set
protected:
vector<string> blocks;
vector<MTGSetInfo*> setinfo;
};
extern MTGSets setlist;
class MTGAllCards
{
private:
MTGCard * tempCard; //used by parser
CardPrimitive * tempPrimitive; //used by parser
int currentGrade; //used by Parser (we don't want an additional attribute for the primitives for that as it is only used at load time)
static MTGAllCards* instance;
protected:
int conf_read_mode;
int colorsCount[Constants::MTG_NB_COLORS];
int total_cards;
void init();
void initCounters();
MTGAllCards();
MTGAllCards(const char * config_file, const char * set_name);
~MTGAllCards();
public:
enum
{
READ_ANYTHING = 0,
READ_CARD = 1,
READ_METADATA = 2,
};
vector<int> ids;
map<int, MTGCard *> collection;
map<string, CardPrimitive *> primitives;
MTGCard * _(int id);
MTGCard * getCardById(int id);
MTGCard * getCardByName(string name);
int load(const char * config_file, const char * setName = NULL, int autoload = 1);
int countByType(const char * _type);
int countByColor(int color);
int countBySet(int setId);
int totalCards();
int randomCardId();
static void loadPrimitives(const char *root_directory);
static void loadSets(const char *root_directory, const char* filename);
static void loadInstance();
static void unloadAll();
static inline MTGAllCards* getInstance() { return instance; };
private:
map<string, MTGCard *> mtgCardByNameCache;
int processConfLine(string &s, MTGCard* card, CardPrimitive * primitive);
bool addCardToCollection(MTGCard * card, int setId);
CardPrimitive * addPrimitive(CardPrimitive * primitive, MTGCard * card = NULL);
};
#define MTGCollection() MTGAllCards::getInstance()
class MTGDeck
{
private:
string getCardBlockText( const string& title, const string& textBlock );
void printDetailedDeckText(std::ofstream& file );
protected:
string filename;
int total_cards;
public:
MTGAllCards * database;
map<int, int> cards;
string meta_desc;
string meta_name;
int meta_id;
int totalCards();
int totalPrice();
MTGDeck(MTGAllCards * _allcards);
MTGDeck(const char * config_file, MTGAllCards * _allcards, int meta_only = 0,int difficultySetting = 0);
int addRandomCards(int howmany, int * setIds = NULL, int nbSets = 0, int rarity = -1, const char * subtype = NULL,
int * colors = NULL, int nbcolors = 0);
int add(int cardid);
int add(MTGDeck * deck); // adds the contents of "deck" into myself
int complete();
int remove(int cardid);
int removeAll();
int add(MTGCard * card);
int remove(MTGCard * card);
string getFilename();
int save();
int save(const string& destFileName, bool useExpandedDescriptions, const string& deckTitle, const string& deckDesc);
MTGCard * getCardById(int id);
};
#endif