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)
Exemple #2
0
 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)))
Exemple #3
0
 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)
Exemple #6
0
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
Exemple #7
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)