def test_deal(self): m = Mazzo() lastThree = m.carte[-3:] others = m.carte[:-3] dealed = m.deal(3) self.assertEqual(lastThree, dealed) self.assertEqual(m.carte, others)
def test_deal_empy(self): m = Mazzo() m.deal(40) with self.assertRaises(ValueError): m.deal(1)
class Gioco(): """ Classe contenente tutti gli oggetti presenti in una partita """ def __init__(self, num_giocatori=2, classe_giocatore=Giocatore): self.mazzo = Mazzo() self.briscola = copy.deepcopy(self.mazzo.carte[0]) self.giocatori = [] self.num_giocatori = num_giocatori self.primo = 0 if not (num_giocatori == 2 or num_giocatori == 4): raise ValueError("Numero di giocatori non valido, num_giocatori=%d" % num_giocatori) for i in range(num_giocatori): self.giocatori.append(classe_giocatore(self.mazzo.deal(3))) """ Funzione con un loop che chiede a tutti i giocatori di giocare una carta finchè non finisce il mazzo """ def run(self): print("BRISCOLA: %s\n" % self.briscola.__str__()) while not self.gioco_finito(): self.gioca_turno() vincitore = max(self.giocatori, key=(lambda x: Rules.conta_punti(x.prese))) return self.giocatori.index(vincitore) """ Fa giocare un turno a tutti i giocatori """ def gioca_turno(self): carte = [] for i in range(self.primo, self.primo+self.num_giocatori): carte.append(self.chiedi_carta(i, carte)) print("Giocato: %s" % carte[-1].__str__()) giocatore_vincente = self.elabora_vincitore(carte) self.aggiungi_presa(giocatore_vincente, carte) self.pesca() """ Ritorna il vincitore di una giocata Usa la funzione della classe Rules e poi ricalcola l'indice """ def elabora_vincitore(self, carte): carta_vincente = Rules.vincitore(carte, self.briscola.seme) index_giocatore_vincente = (carte.index(carta_vincente)+self.primo) % self.num_giocatori self.primo = index_giocatore_vincente return self.giocatori[index_giocatore_vincente] """ Aggiunge presa alle carte prese da un giocatore """ def aggiungi_presa(self, giocatore, presa): giocatore.prese.extend(presa) """ Pesca una carta dal mazzo per ciascun giocatore Ignora se il mazzo e' finito """ def pesca(self): for giocatore in self.giocatori: try: giocatore.mano.carte.append(self.mazzo.deal(1)[0]) except ValueError: pass """ Chiama la funzione di callback che deve ritornare la carta giocata dal giocatore """ def chiedi_carta(self, i, carte): i %= self.num_giocatori return self.giocatori[i].gioca(carte) """ Controlla se la partita e' finita """ def gioco_finito(self): return len(self.giocatori[0].mano.carte) == 0