summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/game.cpp41
-rw-r--r--server/game.h5
2 files changed, 25 insertions, 21 deletions
diff --git a/server/game.cpp b/server/game.cpp
index 5319e1b..3fd7961 100644
--- a/server/game.cpp
+++ b/server/game.cpp
@@ -97,21 +97,22 @@ void Game::round_update_draw() {
Actions possible_actions = players[current_player].get_actions_draw();
// Construct and send state to each client.
- for(int i = 0; i < 4; i++) {
+ PlayerNum player = 0;
+ do {
Player::State state[4];
- state[0] = players[i].get_state();
- state[1] = players[(i + 1) % 4].get_state_filtered();
- state[2] = players[(i + 2) % 4].get_state_filtered();
- state[3] = players[(i + 3) % 4].get_state_filtered();
+ state[0] = players[player].get_state();
+ state[1] = players[player + 1].get_state_filtered();
+ state[2] = players[player + 2].get_state_filtered();
+ state[3] = players[player + 3].get_state_filtered();
Actions a;
- if(i == current_player) {
+ if(player == current_player) {
a = possible_actions;
}
- players[i].client->round_state(state[0], state[1], state[2], state[3], Tiles(), a);
- }
+ players[player].client->round_state(state[0], state[1], state[2], state[3], Tiles(), a);
+ } while(++player);
// Await action from client.
players[current_player].client->get_action(boost::bind(&Game::handle_action_draw, shared_from_this(), _1), possible_actions);
@@ -123,23 +124,24 @@ void Game::round_update_discard() {
std::map<int, Actions> possible_actions;
// Construct and send state to each client.
- for(int i = 0; i < 4; i++) {
+ PlayerNum player = 0;
+ do {
Player::State state[4];
- state[0] = players[i].get_state();
- state[1] = players[(i + 1) % 4].get_state_filtered();
- state[2] = players[(i + 2) % 4].get_state_filtered();
- state[3] = players[(i + 3) % 4].get_state_filtered();
+ state[0] = players[player].get_state();
+ state[1] = players[player + 1].get_state_filtered();
+ state[2] = players[player + 2].get_state_filtered();
+ state[3] = players[player + 3].get_state_filtered();
Actions a;
- if(i != current_player) {
- if(a = players[i].get_actions_discard(discarded_tile)) {
- possible_actions[i] = a;
+ if(player != current_player) {
+ if(a = players[player].get_actions_discard(discarded_tile)) {
+ possible_actions[player] = a;
}
}
- players[i].client->round_state(state[0], state[1], state[2], state[3], Tiles(), a);
- }
+ players[player].client->round_state(state[0], state[1], state[2], state[3], Tiles(), a);
+ } while(++player);
preceding_action = Action::Pass;
if(possible_actions.empty()) {
@@ -224,8 +226,7 @@ void Game::handle_action_discard(Action action, int player) {
switch(preceding_action.type) {
case Action::Pass: {
// Tile not claimed, next player draws.
- current_player = (current_player + 1) % 4;
- players[current_player].draw(wall.take_one());
+ players[++current_player].draw(wall.take_one());
round_update_draw();
} break;
diff --git a/server/game.h b/server/game.h
index 5fd85fd..1e293f6 100644
--- a/server/game.h
+++ b/server/game.h
@@ -9,6 +9,7 @@
#include "wall.h"
#include "client.h"
#include "../common/action.h"
+#include "../common/cyclicint.h"
class Game : public boost::enable_shared_from_this<Game> {
public:
@@ -19,6 +20,8 @@ class Game : public boost::enable_shared_from_this<Game> {
~Game();
private:
+ typedef CyclicInt<4> PlayerNum;
+
class Player {
public:
Client::p client;
@@ -76,7 +79,7 @@ class Game : public boost::enable_shared_from_this<Game> {
Player players[4];
- int current_player;
+ PlayerNum current_player;
int awaiting_players;