able to play through a game without issues using the base set

This commit is contained in:
2026-05-01 18:01:34 -07:00
parent 5ff452ba2c
commit c9afd53ca7
10 changed files with 2895 additions and 614 deletions

90
game_models.py Normal file
View File

@@ -0,0 +1,90 @@
from cards import Citizen, Domain, Duke, Monster, Starter
class Player:
def __init__(self, player_id, name):
self.player_id = player_id
self.name = name
self.owned_starters = []
self.owned_citizens = []
self.owned_domains = []
self.owned_dukes = []
self.owned_monsters = []
self.gold_score = 2
self.strength_score = 0
self.magic_score = 1
self.victory_score = 0
self.is_first = False
self.shadow_count = 0
self.holy_count = 0
self.soldier_count = 0
self.worker_count = 0
self.effects = {
"roll_phase": [],
"harvest_phase": [],
"action_phase": [],
}
self.harvest_delta = {"gold": 0, "strength": 0, "magic": 0, "victory": 0}
@classmethod
def from_dict(cls, data):
player_id = data["player_id"]
name = data["name"]
player = cls(player_id, name)
player.owned_starters = [Starter.from_dict(s) for s in data["owned_starters"]]
player.owned_citizens = [Citizen.from_dict(c) for c in data["owned_citizens"]]
player.owned_domains = [Domain.from_dict(d) for d in data["owned_domains"]]
player.owned_dukes = [Duke.from_dict(d) for d in data["owned_dukes"]]
player.owned_monsters = [Monster.from_dict(m) for m in data["owned_monsters"]]
player.gold_score = data["gold_score"]
player.strength_score = data["strength_score"]
player.magic_score = data["magic_score"]
player.victory_score = data["victory_score"]
player.is_first = data["is_first"]
player.effects = data["effects"]
player.harvest_delta = data.get("harvest_delta", {"gold": 0, "strength": 0, "magic": 0, "victory": 0})
roles = player.calc_roles()
player.shadow_count = roles["shadow_count"]
player.holy_count = roles["holy_count"]
player.soldier_count = roles["soldier_count"]
player.worker_count = roles["worker_count"]
return player
def calc_roles(self):
shadow_count = 0
holy_count = 0
soldier_count = 0
worker_count = 0
for citizen in self.owned_citizens:
shadow_count = shadow_count + citizen.shadow_count
holy_count = holy_count + citizen.holy_count
soldier_count = soldier_count + citizen.soldier_count
worker_count = worker_count + citizen.worker_count
for domain in self.owned_domains:
shadow_count = shadow_count + domain.shadow_count
holy_count = holy_count + domain.holy_count
soldier_count = soldier_count + domain.soldier_count
worker_count = worker_count + domain.worker_count
roles_dict = {
"shadow_count": shadow_count,
"holy_count": holy_count,
"soldier_count": soldier_count,
"worker_count": worker_count,
}
return roles_dict
class LobbyMember:
def __init__(self, player_name, player_id):
self.name = player_name
self.player_id = player_id
self.is_ready = False
self.debug_starting_resources = False
self.last_active_time = 0
class GameMember:
def __init__(self, player_id, player_name, game_id):
self.name = player_name
self.player_id = player_id
self.game_id = game_id