add game
This commit is contained in:
parent
66e291e63d
commit
28a8cd02b5
@ -34,3 +34,6 @@ class BartCassidy(Character):
|
|||||||
class BlackJack(Character):
|
class BlackJack(Character):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__("Black Jack", max_lives=4)
|
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 random
|
||||||
|
import cards
|
||||||
|
|
||||||
class Deck:
|
class Deck:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.cards = cards.get_starting_deck()
|
self.cards: List[cards.Card] = random.shuffle(cards.get_starting_deck())
|
||||||
self.scrap_pile = []
|
self.scrap_pile: List[cards.Card] = []
|
||||||
|
|
||||||
def peek(self, n_cards: int) -> list:
|
def peek(self, n_cards: int) -> list:
|
||||||
return self.cards[:n_cards]
|
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()
|
||||||
|
|
21
players.py
21
players.py
@ -1,15 +1,21 @@
|
|||||||
import roles
|
import roles
|
||||||
|
import cards
|
||||||
import characters
|
import characters
|
||||||
|
|
||||||
class Player:
|
class Player:
|
||||||
def __init__(self, id):
|
def __init__(self, id):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.id = id
|
self.id = id
|
||||||
self.hand = []
|
self.hand: cards.Card = []
|
||||||
|
self.equipment: cards.Card = []
|
||||||
self.role: roles.Role = None
|
self.role: roles.Role = None
|
||||||
self.character: characters.Character = None
|
self.character: characters.Character = None
|
||||||
self.lives = 0
|
self.lives = 0
|
||||||
self.max_lives = 0
|
self.max_lives = 0
|
||||||
|
self.game = None
|
||||||
|
|
||||||
|
def join_game(self, game):
|
||||||
|
self.game = game
|
||||||
|
|
||||||
def set_role(self, role: roles.Role):
|
def set_role(self, role: roles.Role):
|
||||||
self.role = role
|
self.role = role
|
||||||
@ -20,5 +26,18 @@ class Player:
|
|||||||
def prepare(self):
|
def prepare(self):
|
||||||
self.max_lives = self.character.max_lives + self.role.health_mod
|
self.max_lives = self.character.max_lives + self.role.health_mod
|
||||||
self.lives = self.max_lives
|
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
|
pass
|
||||||
|
|
||||||
class Sheriff(Role):
|
class Sheriff(Role):
|
||||||
def __init__(self, name):
|
def __init__(self):
|
||||||
super().__init__(name, +1)
|
super().__init__("Sceriffo", +1)
|
||||||
self.goal = "Elimina tutti i Fuorilegge e il Rinnegato!"
|
self.goal = "Elimina tutti i Fuorilegge e il Rinnegato!"
|
||||||
self.max_players = 1
|
self.max_players = 1
|
||||||
|
|
||||||
@ -24,8 +24,8 @@ class Sheriff(Role):
|
|||||||
|
|
||||||
|
|
||||||
class Vice(Role):
|
class Vice(Role):
|
||||||
def __init__(self, name):
|
def __init__(self):
|
||||||
super().__init__(name)
|
super().__init__("Vice")
|
||||||
self.goal = "Proteggi lo Sceriffo! Elimina tutti i Fuorilegge e il Rinnegato!"
|
self.goal = "Proteggi lo Sceriffo! Elimina tutti i Fuorilegge e il Rinnegato!"
|
||||||
self.max_players = 2
|
self.max_players = 2
|
||||||
|
|
||||||
@ -35,8 +35,8 @@ class Vice(Role):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
class Outlaw(Role):
|
class Outlaw(Role):
|
||||||
def __init__(self, name):
|
def __init__(self):
|
||||||
super().__init__(name)
|
super().__init__("Fuorilegge")
|
||||||
self.goal = "Elimina lo Sceriffo!"
|
self.goal = "Elimina lo Sceriffo!"
|
||||||
self.max_players = 3
|
self.max_players = 3
|
||||||
|
|
||||||
@ -46,8 +46,8 @@ class Outlaw(Role):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
class Renegade(Role):
|
class Renegade(Role):
|
||||||
def __init__(self, name):
|
def __init__(self):
|
||||||
super().__init__(name)
|
super().__init__("Rinnegato")
|
||||||
self.goal = "Rimani l'ultimo personaggio in gioco!"
|
self.goal = "Rimani l'ultimo personaggio in gioco!"
|
||||||
self.max_players = 1
|
self.max_players = 1
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user