Files
wagic/projects/mtg/include/MTGGameZones.h
techdragon.nguyen@gmail.com e53c16f700 No code change just reformatting of header files.
finishing up my reformatting of the source from November/December following the guidelines that were posted.
some extra things I added:
   * Any empty virtual declarations were kept to one line.  
   * Enums were split up into separate lines to promote uniformity across all headers. ( each header file had a different style for enums)
2011-01-21 18:01:14 +00:00

207 lines
5.1 KiB
C++

#ifndef _MTGGAMEZONES_H_
#define _MTGGAMEZONES_H_
#include <map>
using std::map;
#include "MTGDeck.h"
#include "MTGCardInstance.h"
#define MTG_MAX_PLAYER_CARDS 100
class MTGAllCards;
class MTGDeck;
class MTGCardInstance;
class Player;
class MTGGameZone
{
protected:
public:
enum
{
ALL_ZONES = -1,
MY_GRAVEYARD = 11,
OPPONENT_GRAVEYARD = 12,
TARGET_OWNER_GRAVEYARD = 13,
TARGET_CONTROLLER_GRAVEYARD = 14,
GRAVEYARD = 15,
OWNER_GRAVEYARD = 16,
MY_BATTLEFIELD = 21,
OPPONENT_BATTLEFIELD = 22,
TARGET_OWNER_BATTLEFIELD = 23,
TARGET_CONTROLLER_BATTLEFIELD = 24,
BATTLEFIELD = 25,
OWNER_BATTLEFIELD = 26,
MY_HAND = 31,
OPPONENT_HAND = 32,
TARGET_OWNER_HAND = 33,
TARGET_CONTROLLER_HAND = 34,
HAND = 35,
OWNER_HAND = 36,
MY_EXILE = 41,
OPPONENT_EXILE = 42,
TARGET_OWNER_EXILE = 43,
TARGET_CONTROLLER_EXILE = 44,
EXILE = 45,
OWNER_EXILE = 46,
MY_LIBRARY = 51,
OPPONENT_LIBRARY = 52,
TARGET_OWNER_LIBRARY = 53,
TARGET_CONTROLLER_LIBRARY = 54,
LIBRARY = 55,
OWNER_LIBRARY = 56,
MY_STACK = 61,
OPPONENT_STACK = 62,
TARGET_OWNER_STACK = 63,
TARGET_CONTROLLER_STACK = 64,
STACK = 65,
OWNER_STACK = 66,
};
Player * owner;
//Both cards and cardsMap contain the cards of a zone. The long term objective is to get rid of the array
vector<MTGCardInstance *> cards; //[MTG_MAX_PLAYER_CARDS];
map<MTGCardInstance *, int> cardsMap;
int nb_cards;
MTGGameZone();
~MTGGameZone();
void shuffle();
void addCard(MTGCardInstance * card);
void debugPrint();
MTGCardInstance * removeCard(MTGCardInstance * card, int createCopy = 1);
MTGCardInstance * hasCard(MTGCardInstance * card);
void cleanupPhase();
int countByType(const char * value);
MTGCardInstance * findByName(string name);
int hasAbility(int ability); //returns 1 if one of the cards in the zone has the ability, 0 otherwise
int hasType(const char * value); //returns 1 if one of the cards in the zone has the type, 0 otherwise
int hasColor(int value); //returns 1 if one of the cards in the zone has the color, 0 otherwise
int hasX();
void setOwner(Player * player);
MTGCardInstance * lastCardDrawn;
static MTGGameZone * stringToZone(string zoneName, MTGCardInstance * source, MTGCardInstance * target);
static int zoneStringToId(string zoneName);
static MTGGameZone *intToZone(int zoneId, MTGCardInstance * source = NULL, MTGCardInstance * target = NULL);
bool needShuffle;
virtual const char * getName()
{
return "zone";
}
;
virtual ostream& toString(ostream&) const;
};
class MTGLibrary: public MTGGameZone
{
public:
void shuffleTopToBottom(int nbcards);
virtual ostream& toString(ostream&) const;
const char * getName()
{
return "library";
}
};
class MTGGraveyard: public MTGGameZone
{
public:
virtual ostream& toString(ostream&) const;
const char * getName()
{
return "graveyard";
}
};
class MTGHand: public MTGGameZone
{
public:
virtual ostream& toString(ostream&) const;
const char * getName()
{
return "hand";
}
};
class MTGRemovedFromGame: public MTGGameZone
{
public:
virtual ostream& toString(ostream&) const;
const char * getName()
{
return "exile";
}
};
class MTGStack: public MTGGameZone
{
public:
virtual ostream& toString(ostream&) const;
const char * getName()
{
return "stack";
}
};
class MTGInPlay: public MTGGameZone
{
public:
void untapAll();
MTGCardInstance * getNextAttacker(MTGCardInstance * previous);
virtual ostream& toString(ostream&) const;
const char * getName()
{
return "battlefield";
}
};
class MTGPlayerCards
{
protected:
void init();
public:
MTGLibrary * library;
MTGGraveyard * graveyard;
MTGHand * hand;
MTGInPlay * inPlay;
MTGInPlay * battlefield; //alias to inPlay
MTGStack * stack;
MTGRemovedFromGame * removedFromGame;
MTGRemovedFromGame * exile; //alias to removedFromZone
MTGGameZone * garbage;
MTGGameZone * temp;
MTGPlayerCards(int * idList, int idListSize);
MTGPlayerCards(MTGDeck * deck);
~MTGPlayerCards();
void initGame(int shuffle = 1, int draw = 1);
void OptimizedHand(Player * who, int amount = 7, int lands = 3, int creatures = 0, int othercards = 4);
void setOwner(Player * player);
void discardRandom(MTGGameZone * from, MTGCardInstance * source);
void drawFromLibrary();
void showHand();
void resetLibrary();
void initDeck(MTGDeck * deck);
MTGCardInstance * putInGraveyard(MTGCardInstance * card);
MTGCardInstance * putInExile(MTGCardInstance * card);
MTGCardInstance * putInLibrary(MTGCardInstance * card);
MTGCardInstance * putInHand(MTGCardInstance * card);
MTGCardInstance * putInZone(MTGCardInstance * card, MTGGameZone * from, MTGGameZone * to);
int isInPlay(MTGCardInstance * card);
};
ostream& operator<<(ostream&, const MTGGameZone&);
#endif