Bunco Simulator

Check-in [1de0c8]
Overview
Comment:Add functions to track average contribution, average and median scores
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 1de0c8566fa54f7c8f0060ec5d8adb1b334829754b09357d9382ee9be9cfd44e
User & Date: joel on 2018-11-22 16:02:27
Other Links: manifest | tags
Context
2018-11-22
16:04
Add score sheets for individual players to Excel output (closes [927402827e]) check-in: 940dde user: joel tags: trunk
16:02
Add functions to track average contribution, average and median scores check-in: 1de0c8 user: joel tags: trunk
13:41
Track player wins and losses check-in: eb8331 user: joel tags: trunk
Changes

Modified bunco.py from [481d05] to [dae914].

1
2

3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
10


+







# Test
import csv, random, sqlite3
from statistics import median

teammate_lookup = { 0: 2, 1: 3, 2: 0, 3: 1 }

fuzzydie_holder = 'x'

def TurnInProgress():
    return -1
45
46
47
48
49
50
51









52
53
54
55
56
57
58
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68







+
+
+
+
+
+
+
+
+







        self.round_scores.append(0)
        self.round_roll_counts.append(0)
        self.personal_roll_scores.append(0)
        self.round_bunco_counts.append(0)
        self.round_wins.append(0)
        self.turn_progress = 0
        self.current_streak = 0
    
    def average_contrib_pct(self):
        pcts = []
        for n in range(len(self.round_scores)):
            if self.round_scores[n] > 0:
                pcts.append(self.personal_roll_scores[n] / self.round_scores[n])
            else:
                pcts.append(0)
        return sum(pcts) / len(pcts)

    def score_last_roll(self):
        desired_num = Game.current_round() % 6
        desired_num = 6 if desired_num == 0 else desired_num
    
        roll_score = 0
        
325
326
327
328
329
330
331









332
333
334
335
336
337
338
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357







+
+
+
+
+
+
+
+
+







        cls.cur_round += 1

    def print_status(self):
        for n, table in enumerate(self.tables):
            print(f"== TABLE {n+1} == Team 1:{table.team1_score} pts, Team 2:{table.team2_score} pts")
            for player in table.players:
                print(f"    {player.name} {player.round_scores[Game.current_round() - 1]} points, streak {player.max_streak} buncos {sum(player.round_bunco_counts)}")
    
    def average_total_score(self):
        all_scores = [sum(p.round_scores) for p in self.players]
        return sum(all_scores) / len(all_scores)

    def median_total_score(self):
        all_scores = [sum(p.round_scores) for p in self.players]
        
        return median(all_scores)

    def prep_next_round(self):
        # losers from head table move to next table
        headtable_losers = self.tables[0].losers()
        log_table_move(headtable_losers, "lost", self.tables[0], self.tables[1])
        round_winners = self.tables[1].swap_for_winners(headtable_losers)