This commit is contained in:
Alberto Xamin 2020-11-15 20:23:13 +01:00
parent 66e291e63d
commit 28a8cd02b5
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
6 changed files with 88 additions and 13 deletions

0
bot.py Normal file
View File

View File

@ -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()]

View File

@ -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]

52
game.py Normal file
View File

@ -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()

View File

@ -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
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()

View File

@ -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