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 __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)))
def setUp(self): self.mazzo_rosso = Mazzo() self.mazzo_blu = Mazzo() self.mazzo_verde = Mazzo() self.re_di_cuori = Carta(2, 13) self.mano_mario = Mano("Mario") self.mano_davide = Mano("Davide")
def test_shuffle(self): m = Mazzo() carte = m.carte m.shuffle() self.assertEqual(carte, m.carte)
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
class TestMazzo(unittest.TestCase): def setUp(self): self.mazzo_rosso = Mazzo() self.mazzo_blu = Mazzo() self.mazzo_verde = Mazzo() self.re_di_cuori = Carta(2, 13) self.mano_mario = Mano("Mario") self.mano_davide = Mano("Davide") def test_rimuovi(self): self.mazzo_blu.rimuovi(self.re_di_cuori) self.assertFalse(self.re_di_cuori in self.mazzo_blu.carte) def test_pesca(self): numero_carte = len(self.mazzo_rosso.carte) carta = self.mazzo_rosso.carte[numero_carte - 1] self.mazzo_rosso.pesca() # Controllo che il mazzo abbia una carta in meno self.assertTrue(len(self.mazzo_rosso.carte) == numero_carte - 1) # Controllo che la carta pescata non ci sia più self.assertFalse(carta in self.mazzo_rosso.carte) def test_mazzo_vuoto(self): self.assertFalse(self.mazzo_blu.mazzo_vuoto()) for i in range(len(self.mazzo_blu.carte)): self.mazzo_blu.pesca() self.assertTrue(self.mazzo_blu.mazzo_vuoto()) def test_distribuisci_tutte_le_carte(self): numero_carte_mazzo = len(self.mazzo_verde.carte) self.mazzo_verde.distribuisci_carte( (self.mano_mario, self.mano_davide)) self.assertEqual(len(self.mano_mario.carte), len(self.mano_davide.carte), numero_carte_mazzo // 2) def test_distribuisci_dieci_carte(self): ''' Distribuisce in tutto 10 carte, le mani sono due, quindi cinque a testa ''' print(len(self.mazzo_rosso.carte)) self.mazzo_rosso.distribuisci_carte( (self.mano_mario, self.mano_davide), 10) self.assertEqual(len(self.mano_mario.carte), len(self.mano_davide.carte), 5)