diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..e69de29 diff --git a/characters.py b/characters.py index 90146e0..ecfe611 100644 --- a/characters.py +++ b/characters.py @@ -34,3 +34,6 @@ class BartCassidy(Character): class BlackJack(Character): def __init__(self): super().__init__("Black Jack", max_lives=4) + +def all_characters(): + return [BartCassidy(), BlackJack()] \ No newline at end of file diff --git a/deck.py b/deck.py index 4b4aa87..c2a3b1c 100644 --- a/deck.py +++ b/deck.py @@ -1,11 +1,12 @@ -import cards +from typing import List, Set, Dict, Tuple, Optional import random +import cards class Deck: def __init__(self): super().__init__() - self.cards = cards.get_starting_deck() - self.scrap_pile = [] + self.cards: List[cards.Card] = random.shuffle(cards.get_starting_deck()) + self.scrap_pile: List[cards.Card] = [] def peek(self, n_cards: int) -> list: return self.cards[:n_cards] diff --git a/game.py b/game.py new file mode 100644 index 0000000..c1f54f1 --- /dev/null +++ b/game.py @@ -0,0 +1,52 @@ +from typing import List, Set, Dict, Tuple, Optional +import random +import players +from characters import all_characters +from deck import Deck +import roles + +class Game: + def __init__(self): + super().__init__() + self.players: List[players.Player] = [] + self.deck: Deck = None + self.started = False + self.turn = 0 + + def add_player(self, player: players.Player): + player.join_game(self) + self.players.append(player) + + def choose_characters(self): + char_cards = random.sample(all_characters(), len(self.players)) + for i in range(len(self.players)): + self.players[i].set_available_character(char_cards[i*2:i*2+2]) + + def start_game(self): + if self.started: + return + self.started = True + self.deck = Deck() + self.choose_characters() + + def distribute_roles(self): + available_roles: List[roles.Role] = [] + if len(self.players) == 3: + available_roles = [roles.Sheriff(), roles.Renegade(), roles.Outlaw()] + random.shuffle(available_roles) + for i in range(len(self.players)): + self.players[i].set_role(available_roles[i]) + if type(available_roles[i]) == roles.Sheriff: + self.turn = i + self.players[i].prepare() + for k in range(self.players[i].max_lives): + self.players[i].hand.append(self.deck.draw()) + self.play_turn() + + def play_turn(self): + self.players[self.turn].play_turn() + + def next_turn(self): + self.turn = (self.turn + 1) % len(self.players) + self.play_turn() + diff --git a/players.py b/players.py index ffe98a7..e4f6069 100644 --- a/players.py +++ b/players.py @@ -1,15 +1,21 @@ import roles +import cards import characters class Player: def __init__(self, id): super().__init__() self.id = id - self.hand = [] + self.hand: cards.Card = [] + self.equipment: cards.Card = [] self.role: roles.Role = None self.character: characters.Character = None self.lives = 0 self.max_lives = 0 + self.game = None + + def join_game(self, game): + self.game = game def set_role(self, role: roles.Role): self.role = role @@ -20,5 +26,18 @@ class Player: def prepare(self): self.max_lives = self.character.max_lives + self.role.health_mod self.lives = self.max_lives + self.hand = [] + self.equipment = [] + + def set_available_character(self, available): + self.available_characters = available - \ No newline at end of file + def play_turn(self): + print('not implemented') + + def end_turn(self): + if len(self.hand) > self.max_lives: + print("discard a card") + else: + game.next_turn() + diff --git a/roles.py b/roles.py index 6ed4814..a1ee589 100644 --- a/roles.py +++ b/roles.py @@ -12,8 +12,8 @@ class Role(ABC): pass class Sheriff(Role): - def __init__(self, name): - super().__init__(name, +1) + def __init__(self): + super().__init__("Sceriffo", +1) self.goal = "Elimina tutti i Fuorilegge e il Rinnegato!" self.max_players = 1 @@ -24,8 +24,8 @@ class Sheriff(Role): class Vice(Role): - def __init__(self, name): - super().__init__(name) + def __init__(self): + super().__init__("Vice") self.goal = "Proteggi lo Sceriffo! Elimina tutti i Fuorilegge e il Rinnegato!" self.max_players = 2 @@ -35,8 +35,8 @@ class Vice(Role): pass class Outlaw(Role): - def __init__(self, name): - super().__init__(name) + def __init__(self): + super().__init__("Fuorilegge") self.goal = "Elimina lo Sceriffo!" self.max_players = 3 @@ -46,8 +46,8 @@ class Outlaw(Role): pass class Renegade(Role): - def __init__(self, name): - super().__init__(name) + def __init__(self): + super().__init__("Rinnegato") self.goal = "Rimani l'ultimo personaggio in gioco!" self.max_players = 1