diff --git a/games/field6.gm b/games/field6.gm index b4006ac..f3d52b2 100644 --- a/games/field6.gm +++ b/games/field6.gm @@ -26,6 +26,8 @@ 7 ], "type": "vote", + "proposer": 0, + "voten": 1, "round": 1 }, { @@ -69,6 +71,8 @@ 6 ], "type": "vote", + "proposer": 1, + "voten": 1, "round": 2 }, { @@ -95,6 +99,8 @@ 5 ], "type": "vote", + "proposer": 2, + "voten": 2, "round": 2 }, { @@ -121,6 +127,8 @@ 3 ], "type": "vote", + "proposer": 3, + "voten": 3, "round": 2 }, { @@ -147,6 +155,8 @@ 6 ], "type": "vote", + "proposer": 4, + "voten": 4, "round": 2 }, { @@ -202,6 +212,8 @@ 7 ], "type": "vote", + "proposer": 5, + "voten": 1, "round": 3 }, { @@ -227,6 +239,8 @@ 6, 7 ], + "proposer": 6, + "voten": 2, "type": "vote", "round": 3 }, @@ -253,7 +267,9 @@ 5, 7 ], + "proposer": 7, "type": "vote", + "voten": 3, "round": 3 }, { @@ -280,6 +296,8 @@ 5 ], "type": "vote", + "proposer": 0, + "voten": 4, "round": 3 }, { @@ -335,7 +353,9 @@ 5, 6 ], + "proposer": 1, "type": "vote", + "voten": 1, "round": 4 }, { @@ -382,6 +402,8 @@ 6 ], "type": "vote", + "proposer": 1, + "voten": 1, "round": 5 }, { @@ -403,4 +425,4 @@ "must fail": true, "round": 5 } -] \ No newline at end of file +] diff --git a/games/p2 b/games/p2 new file mode 100644 index 0000000..2ab788c --- /dev/null +++ b/games/p2 @@ -0,0 +1,450 @@ +[ + { + "game_size": 10, + "player_names": {} + }, + { + "type": "vote", + "team": [ + 1, + 7, + 8 + ], + "votes": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0 + ], + "round": 1, + "voten": 1, + "proposer": 8, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "vote", + "team": [ + 2, + 7, + 9 + ], + "votes": [ + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1 + ], + "round": 1, + "voten": 2, + "proposer": 9, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "vote", + "team": [ + 0, + 5, + 6 + ], + "votes": [ + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 0 + ], + "round": 1, + "voten": 3, + "proposer": 0, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "mission", + "team": [ + 0, + 5, + 6 + ], + "fails": 1, + "round": 1, + "must fail": false, + "print_order": [ + "team", + "fails", + "must fail", + "round" + ] + }, + { + "type": "vote", + "team": [ + 1, + 3, + 6, + 7 + ], + "votes": [ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0 + ], + "round": 2, + "voten": 1, + "proposer": 1, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "vote", + "team": [ + 0, + 1, + 2, + 7 + ], + "votes": [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ], + "round": 2, + "voten": 2, + "proposer": 2, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "vote", + "team": [ + 0, + 1, + 3, + 4 + ], + "votes": [ + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1 + ], + "round": 2, + "voten": 3, + "proposer": 3, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "vote", + "team": [ + 0, + 4, + 7, + 9 + ], + "votes": [ + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 1 + ], + "round": 2, + "voten": 4, + "proposer": 4, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "mission", + "team": [ + 0, + 4, + 7, + 9 + ], + "fails": 1, + "round": 2, + "must fail": false, + "print_order": [ + "team", + "fails", + "must fail", + "round" + ] + }, + { + "type": "lady", + "p1": 7, + "p2": 0, + "is good": true, + "round": false, + "print_order": [ + "p1", + "p2", + "round", + "is good" + ] + }, + { + "type": "vote", + "team": [ + 0, + 4, + 5, + 9 + ], + "votes": [ + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0 + ], + "round": 3, + "voten": 1, + "proposer": 5, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "vote", + "team": [ + 0, + 3, + 6, + 7 + ], + "votes": [ + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0 + ], + "round": 3, + "voten": 2, + "proposer": 6, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "vote", + "team": [ + 0, + 2, + 6, + 7 + ], + "votes": [ + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0 + ], + "round": 3, + "voten": 3, + "proposer": 7, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "vote", + "team": [ + 0, + 1, + 8, + 9 + ], + "votes": [ + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 0 + ], + "round": 3, + "voten": 4, + "proposer": 8, + "fails required": 1, + "print_order": [ + "team", + "votes", + "round" + ] + }, + { + "type": "mission", + "team": [ + 0, + 1, + 2, + 9 + ], + "fails": 0, + "round": 3, + "must fail": true, + "print_order": [ + "team", + "fails", + "must fail", + "round" + ] + }, + { + "type": "lady", + "p1": 0, + "p2": 9, + "is good": true, + "round": false, + "print_order": [ + "p1", + "p2", + "round", + "is good" + ] + }, + { + "type": "mission", + "team": [ + 0, + 1, + 2, + 7, + 9 + ], + "fails": 0, + "round": 4, + "must fail": false, + "print_order": [ + "team", + "fails", + "must fail", + "round" + ] + }, + { + "type": "mission", + "team": [ + 0, + 1, + 2, + 3, + 6 + ], + "fails": 0, + "round": 5, + "must fail": true, + "print_order": [ + "team", + "fails", + "must fail", + "round" + ] + } +] \ No newline at end of file diff --git a/models/data_model.py b/models/data_model.py index d3af60d..cc706b0 100644 --- a/models/data_model.py +++ b/models/data_model.py @@ -42,9 +42,9 @@ class DataModel(DefaultModel): elif role == "Percival": roles = [self.player_role(x) for x in team] tc = "" - if "merlin" in roles: + if "Merlin" in roles: tc += "merlin" - if "morgana" in roles: + if "Morgana" in roles: tc += "morgana" if tc == "": tc = "neither" @@ -81,10 +81,13 @@ class DataModel(DefaultModel): else: continue app = approval(data) + if app == 0.0: + continue if vote == 1: total = total * app else: total = total * (1.0 - app) + #print total return total diff --git a/models/dataset.json.gz b/models/dataset.json.gz index c787500..9b0c6ed 100644 Binary files a/models/dataset.json.gz and b/models/dataset.json.gz differ diff --git a/models/default_model.py b/models/default_model.py index e7beb05..9929226 100644 --- a/models/default_model.py +++ b/models/default_model.py @@ -46,13 +46,13 @@ class BaseModel(object): # Override these! def player_sees_player_and_claims(self, p1, p2, claim, rnd): - return True + return 1.0 def mission(self, team, fails, must_fail, rnd): - return True + return 1.0 def votes(self, team, votes, fail_req, rnd, voten, proposer): - return True + return 1.0 class DefaultModel(BaseModel): diff --git a/models/probs_from_game.py b/models/probs_from_game.py index 207cd66..bb1232b 100644 --- a/models/probs_from_game.py +++ b/models/probs_from_game.py @@ -11,9 +11,9 @@ def isSpy(x, game): return game["players"][x]["spy"] def approval(x): - if x["Approve"] + x["Reject"] == 0: + if x[0] + x[1] == 0: return 0.0 - return (x["Approve"] * 1.0) / (x["Approve"] + x["Reject"]) + return (x[0] * 1.0) / (x[0] + x[1]) def getRole(x, game): if str(x) not in game["role_by_seat"]: @@ -23,16 +23,11 @@ def getRole(x, game): return game["role_by_seat"][str(x)] def sumKeys(a, b): - out = dd(int) - for k, v in a.items(): - out[k] += v - for k, v in b.items(): - out[k] += v - return out + return (a[0] + b[0], a[1] + b[1]) -def sum_helper(table, constraint_list): +def sum_helper(table, constraint_list, keys=["Approve", "Reject"]): if len(constraint_list) == 0: - return table + return (table[keys[0]], table[keys[1]]) c = constraint_list[0] out = dd(int) if isinstance(c, type([])): diff --git a/tim.py b/tim.py index ac4831f..0ec5bff 100644 --- a/tim.py +++ b/tim.py @@ -114,7 +114,7 @@ def main(): game = DeceptionGame( AvalonGame(int(metadata["game_size"])), - DefaultModel) + DataModel) namemap = metadata["player_names"] game.load_save(data) else: