add game
This commit is contained in:
parent
66e291e63d
commit
28a8cd02b5
@ -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()]
|
7
deck.py
7
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]
|
||||
|
52
game.py
Normal file
52
game.py
Normal 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()
|
||||
|
23
players.py
23
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
|
||||
|
||||
|
||||
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()
|
||||
|
||||
|
16
roles.py
16
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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user