/* * Copyright (C) 2016 Olivier Gayot * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef GAME_H #define GAME_H #include #include #include #include "game.h" #include "cards.h" #include "board.h" #include "player.h" #include "client.h" class client; namespace cao { /* game {{{ */ class game { public: game(const cards::deck &black_deck, const cards::deck &white_deck); enum state { WAITING_NEW_JUDGE, /* we need a new judge */ WAITING_COLLECTION, /* the judge should collect the cards */ WAITING_DESIGNATION, /* the judge should pick the best card */ }; player *try_join(client *); void try_become_judge(player *); void try_play_card(player *, int idx); void try_collect_cards(player *); void try_designate_card(player *, int idx); void try_view_player_cards(const player *) const; void try_view_flop() const; void try_view_black_card() const; private: board _board; state _state; std::vector _players; player *_judge; }; /* }}} */ /* game_manager {{{ */ class game_manager { public: static game_manager *get_instance(); game *find_game_by_name(const std::string &game_name); private: game_manager(); std::map _games; cards::deck black_deck; cards::deck white_deck; static game_manager *_instance; }; /* }}} */ }; #endif /* GAME_H */