#ifndef TILE_H #define TILE_H #include #include class Tile { public: enum Type { // Face-down tile: Back, // Characters set: Man_1, Man_2, Man_3, Man_4, Man_5, Man_6, Man_7, Man_8, Man_9, // Circles set: Pin_1, Pin_2, Pin_3, Pin_4, Pin_5, Pin_6, Pin_7, Pin_8, Pin_9, // Bamboo set: Sou_1, Sou_2, Sou_3, Sou_4, Sou_5, Sou_6, Sou_7, Sou_8, Sou_9, // Winds: Ton, Nan, Xia, Pei, // Dragons: Chun, Haku, Hatsu }; Type type; bool red; bool rotated; Tile(); Tile(Type t, bool re = false, bool ro = false); virtual ~Tile(){}; //! Get the numeric value of the tile (if one of the man/pin/sou-sets). int get_num(); //! Compare two tiles. Equal if type matches; flags are not compared. bool operator==(const Tile& other); //! Increment type. Useful for iterating over all possible types. Tile operator++(int); template void serialize(Archive & ar, const unsigned int version) { ar & type; ar & red; ar & rotated; } }; typedef std::vector Tiles; #endif