diff options
Diffstat (limited to 'game.h')
-rw-r--r-- | game.h | 89 |
1 files changed, 89 insertions, 0 deletions
@@ -0,0 +1,89 @@ +/* + * Copyright (C) 2016 Olivier Gayot <olivier.gayot@sigexec.com> + * + * 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 <string> +#include <map> +#include <vector> + +#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<player *> _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<const std::string, game *> _games; + + cards::deck black_deck; + cards::deck white_deck; + + static game_manager *_instance; + }; + + /* }}} */ +}; + +#endif /* GAME_H */ |