From 9cba7e2d3ff647d3ade46cefba24451ce837a5f1 Mon Sep 17 00:00:00 2001 From: Olivier Gayot Date: Fri, 29 Jan 2016 22:18:02 +0100 Subject: game rewritten in C++ Signed-off-by: Olivier Gayot --- game.h | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 game.h (limited to 'game.h') diff --git a/game.h b/game.h new file mode 100644 index 0000000..b76127c --- /dev/null +++ b/game.h @@ -0,0 +1,89 @@ +/* + * 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 */ -- cgit v1.2.3