/* =========================================================================== * Scoring * * Score the round now. * First see if any player made a 0 bid. * Each players bid is kept in the player game_data field. * Then tally up the tricks each team made and score the team. * Check if the team has too many overtricks during the game. */ void Spades_score_round() { int team_tricks[SPADES_TEAM_COUNT] = { 0, 0 }; unsigned int i, team, score, off; struct player * player; char buf[1024]; int overtricks; off = 0; for (player = get_array_b_element(Spades->players, 0); player; player = next_array_b_element(Spades->players)) { team = player->number % SPADES_TEAM_COUNT; score = player->played_card_count / SPADES_PLAYER_COUNT; if (0 == player->game_data) { if (0 == score) { off += sprintf(buf + off, "Player %d %s made the 0 bid.\n", player->number, player->name); Spades_misc->team_score[team] += 100; } else { off += sprintf(buf + off, "Player %d %s failed to make the 0 bid.\n", player->number, player->name); Spades_misc->team_score[team] -= 100; } } team_tricks[team] += score; } for (team = 0; team < SPADES_TEAM_COUNT; team++) { overtricks = (team_tricks[team] - Spades_misc->team_bid[team]); if (0 <= overtricks) { off += sprintf(buf + off, "Team %d made their bid of %d with %d overtricks.\n", team, Spades_misc->team_bid[team], overtricks); if (overtricks) { if (overtricks / 10) { Spades_misc->team_score[team] -= 100; } if (((Spades_misc->team_score[team] + overtricks) % 10) < (Spades_misc->team_score[team] % 10)) { Spades_misc->team_score[team] -= 100; } } Spades_misc->team_score[team] += ((Spades_misc->team_bid[team] * 10) + overtricks); } else { /* Team didn't make team bid */ off += sprintf(buf + off, "Team %d missed their bid of %d by %d tricks.\n", team, Spades_misc->team_bid[i], (overtricks * -1)); Spades_misc->team_score[team] -= (Spades_misc->team_bid[team] * 10); } Spades_misc->team_bid[team] = 0; } write_all(Spades->players, buf, off); }next slide