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 (); }
/* Display current player and refresh dice/display */ void DisplayCurrentPlayerRefreshDice(void) { DisplayCurrentPlayer(); UpdateAllDicePixmaps (); DeselectAllDice (); UpdateRollLabel(); }
static gboolean do_computer_turns (void) { if (!players[CurrentPlayer].comp) { last_timeout = 0; return FALSE; } if (ready_to_advance_player) { NextPlayer (); return TRUE; } if (players[CurrentPlayer].finished) { NextPlayer (); return TRUE; } ComputerRolling (CurrentPlayer); if (NoDiceSelected () || (NumberOfRolls >= NUM_ROLLS)) { ComputerScoring (CurrentPlayer); ready_to_advance_player = TRUE; } else { RollSelectedDice (); UpdateRollLabel (); } if (!DoDelay) do_computer_turns (); return TRUE; }
static void roll (void) { if (!players[CurrentPlayer].comp) { RollSelectedDice (); if (NumberOfRolls > 1) FreeUndoRedoLists (); UpdateRollLabel (); LastHumanNumberOfRolls = NumberOfRolls; } }
/* Callback on Roll! button press */ gint roll_dice (GtkWidget * widget, GdkEvent * event, gpointer data) { if (!players[CurrentPlayer].comp) { RollSelectedDice (); if (NumberOfRolls > 1) FreeUndoRedoLists(); UpdateRollLabel (); LastHumanNumberOfRolls = NumberOfRolls; } return FALSE; }
static void GyahtzeeNewGame (void) { int i; say (_("Select dice to roll or choose a score slot.")); game_type = get_new_game_type(); games_scores_set_category(highscores, SCORES_CATEGORY); NewGame (); setup_score_list (ScoreList); UpdateRollLabel (); for (i = 0; i < NumberOfPlayers; i++) ShowoffPlayer (ScoreList, i, 0); ShowoffPlayer (ScoreList, 0, 1); }