From 6caa3da6a2da23fe8cd8e8fdc8074a1022a00163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atle=20Hellvik=20Havs=C3=B8?= Date: Sat, 20 Nov 2010 12:18:25 +0100 Subject: Wait for action from player 0 (East) at the start of a round. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Atle Hellvik Havsø --- server/game.cpp | 37 +++++++++++++++++++++++++++++++++---- server/game.h | 7 +++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/server/game.cpp b/server/game.cpp index 3f34d07..3c695c4 100644 --- a/server/game.cpp +++ b/server/game.cpp @@ -42,6 +42,13 @@ void Game::round_start() { // Sett opp runden game_state = make_shared(); + east_action = false; + west_action = false; + south_action = false; + north_action = false; + + num_player_actions = 0; + // Simulates drawing 4, 4 ,4 for each player for (int player_num = 0; player_num < 4; player_num++) { for (int i = 0; i < 3; i++) { @@ -59,7 +66,13 @@ void Game::round_start() { // Gives an extra tile to the first player (east) game_state->players[0].hand.push_back(wall.take_one()); - + // Set the action that east can do. + Action discard; + discard.type = Action::Discard; + game_state->possible_actions.push_back(discard); + + east_action = true; + num_player_actions++; round_update(); } @@ -72,16 +85,32 @@ void Game::round_update() { players[2]->round_state(game_state); players[3]->round_state(game_state); + // Kall player->get_action(handle_action) for hver spiller som har actions - players[0]->get_action(boost::bind(&Game::handle_action, shared_from_this(), _1)); + if (east_action) { + players[0]->get_action(boost::bind(&Game::handle_action, shared_from_this(), _1)); + } + + if (west_action) { + players[1]->get_action(boost::bind(&Game::handle_action, shared_from_this(), _1)); + } + + if (south_action) { + players[2]->get_action(boost::bind(&Game::handle_action, shared_from_this(), _1)); + } + + if (north_action) { + players[3]->get_action(boost::bind(&Game::handle_action, shared_from_this(), _1)); + } } void Game::handle_action(Action action) { // Sjekk action, sjekk om endelig action er avgjort // Oppdater state // Evt. round_end() - - round_update(); + if (num_player_actions == 0) { + round_update(); + } } void Game::round_end() { diff --git a/server/game.h b/server/game.h index dc3a9ff..634ea4d 100644 --- a/server/game.h +++ b/server/game.h @@ -31,6 +31,13 @@ class Game : public boost::enable_shared_from_this { //! The current state of the game State::p game_state; + int num_player_actions; + + bool east_action; + bool west_action; + bool south_action; + bool north_action; + //! Handle Ready message from player. void handle_ready(); -- cgit v1.2.3