void NextPlayer (void) { if (GameIsOver ()) { if (last_timeout) { g_source_remove (last_timeout); last_timeout = 0; } if (DoDelay && NumberOfComputers > 0) NumberOfRolls = NUM_ROLLS; else NumberOfRolls = LastHumanNumberOfRolls; /* update_roll_button_sensitivity() needs to be called in this context however UpdateRollLabel() also calls that method */ UpdateRollLabel (); CheerWinner (); return; } NumberOfRolls = 0; ready_to_advance_player = FALSE; ShowoffPlayer (ScoreList, CurrentPlayer, 0); /* Find the next player with rolls left */ do { CurrentPlayer = (CurrentPlayer + 1) % NumberOfPlayers; } while (players[CurrentPlayer].finished); DisplayCurrentPlayer(); SelectAllDice (); RollSelectedDice (); FreeRedoList(); /* Remember the roll count if this turn is for a human player for display at the end of the game */ if (!players[CurrentPlayer].comp) LastHumanNumberOfRolls = NumberOfRolls; if (players[CurrentPlayer].comp) { if (DoDelay) { if (!last_timeout) last_timeout = g_timeout_add (DELAY_MS, (GSourceFunc) do_computer_turns, NULL); } else { do_computer_turns (); } } /* Only update the roll label if we are running in delay mode or if this turn is for a human player */ if (DoDelay || (!players[CurrentPlayer].comp)) UpdateRollLabel (); }
void FreeUndoRedoLists (void) { FreeUndoList (); FreeRedoList (); }