diff options
Diffstat (limited to 'server/game.cpp')
-rw-r--r-- | server/game.cpp | 37 |
1 files changed, 33 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<State>(); + 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() { |