bang/game.py
Alberto Xamin 28a8cd02b5
add game
2020-11-15 20:23:13 +01:00

53 lines
1.6 KiB
Python

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