Advertisement
Siddharta33

OldMaid

Mar 29th, 2013
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.30 KB | None | 0 0
  1. # Dal capitolo 15 di Pensare da Informatico.
  2.  
  3. class Carta:
  4.     ListaSemi = ["Fiori", "Quadri", "Cuori", "Picche"]
  5.     ListaRanghi = ["impossibile", "Asso", "2", "3", "4", "5", "6",\
  6.                     "7", "8", "9", "10", "Jack", "Regina", "Re"]
  7.     def __init__(self, Seme=0, Rango=0):
  8.         self.Seme = Seme
  9.         self.Rango = Rango
  10.     def __cmp__(self, Altro):
  11.         # controlla il seme
  12.         if self.Seme > Altro.Seme: return 1
  13.         if self.Seme < Altro.Seme: return -1
  14.         # se i semi sono uguali controlla il rango
  15.         if self.Rango > Altro.Rango: return 1
  16.         if self.Rango < Altro.Rango: return -1
  17.         # se anche i ranghi sono uguali le carte sono uguali!
  18.         return 0
  19.     def __str__(self):
  20.         return (self.ListaRanghi[self.Rango] + " di " +
  21.                self.ListaSemi[self.Seme])
  22. #Ora l'oggetto carta e' creato.
  23.  
  24. # Ora il Mazzo.
  25.  
  26. class Mazzo:
  27.     def __init__(self):
  28.         self.Carte = []
  29.         for Seme in range(4):
  30.             for Rango in range (1,14):
  31.                 self.Carte.append(Carta(Seme, Rango))
  32.     def __str__(self):
  33.         s = ""
  34.         for i in range(len(self.Carte)):
  35.             s = s + " "*i + str(self.Carte[i]) + "\n"
  36.         return s
  37.     def Mescola(self):
  38.         import random
  39.         NumCarte = len(self.Carte)
  40.         for i in range(NumCarte):
  41.             j = random.randrange(i,NumCarte)
  42.             self.Carte[i], self.Carte[j] = self.Carte[j], self.Carte[i]
  43.     def RimuoviCarta(self, Carta):
  44.         if Carta in self.Carte:
  45.             self.Carte.remove(Carta)
  46.             return 1
  47.         else:
  48.             return 0
  49.     def PrimaCarta(self):
  50.         return self.Carte.pop()
  51.     def EVuoto(self):
  52.         return (len(self.Carte) == 0)
  53.     def Distribuisci(self, ListaMani, NumCarte=999):
  54.         NumMani=len(ListaMani)
  55.         for i in range(NumCarte):
  56.             if self.EVuoto:
  57.                 break
  58.             Carta = self.PrimaCarta()
  59.             Mano = ListaMani(i % NumMani)
  60.             Mano.AggiungiCarta(Carta)
  61.            
  62. class Mano(Mazzo):
  63.     def __init__(self, Nome=""):
  64.         self.Carte = []
  65.         self.Nome = Nome
  66.     def AggiungiCarta(self, Carta):
  67.         self.Carte.append(Carta)
  68.     def __str__(self):
  69.         s = "La mano di "+self.Nome
  70.         if self.EVuoto():
  71.             s += " E' vuota\n"
  72.         else:
  73.             s += " Contiene queste carte:\n"
  74.             return s + Mazzo.__str__(self)
  75. class GiocoDiCarte:
  76.     def __init__(self):
  77.         self.Mazzo = Mazzo()
  78.         self.Mazzo.Mescola()
  79. class ManoOldMaid(Mano):
  80.     def RimuoviCoppie(self):
  81.         Conteggio = 0
  82.         CarteOriginali = self.Carte[:]
  83.         for CartaOrig in CarteOriginali:
  84.             CartaDaCercare = (3-CartaOrig.Seme, CartaOrig.Rango)
  85.             if CartaDaCercare in self.Carte:
  86.                 self.Carte.remove(CartaOrig)
  87.                 self.Carte.remove(CartaDaCercare)
  88.                 print "Mano di %s : %s elimina %s" %\
  89.                 self.Nome, CartaOrig, CartaDaCercare
  90.                 Conteggio += 1
  91.                 return Conteggio
  92. class GiocoOldMaid(GiocoDiCarte):
  93.     def Partita(self, Nomi):
  94.         # Tolgo la donna di fiori
  95.         self.Mazzo.RimuoviCarta(Carta(0,12))
  96.         # Creazione di una mano per ogni giocatore
  97.         self.Mani = []
  98.         for Nome in Nomi:
  99.             self.Mani.append(ManoOldMaid(Nome))
  100.             # Distribuzione mani
  101.             self.Mazzo.Distribuisci(self.Mani)
  102.             print " ---------- Le carte sono state distribuite."
  103.             #self.StampaMani()
  104.             print self.Mani
  105.             # Toglie le coppie iniziali.
  106.             NumCoppie = self.RimuoviTutteLeCoppie()
  107.             print " --- Coppie scartate. Inizia la partita.\n"
  108.             #self.StampaMani()
  109.             print self.Mani
  110.             # Gioca finche' non sono state fatte 25 coppie
  111.             Turno = 0
  112.             NumMani = len(self.Mani())
  113.             while NumCoppie < 25:
  114.                 NumCoppie += self.GiocaUnTurno(Turno)
  115.                 Turno = (Turno + 1) % NumMani
  116.             print "----------La partita e' finita! \n"
  117.             #self.StampaMani()
  118.             print self.Mani
  119.     def RimuoviTutteLeCoppie(self):
  120.         Conteggio = 0
  121.         for Mano in self.Mani:
  122.             Conteggio += Mano.RimuoviCoppie()
  123.             return Conteggio
  124.     def GiocaUnTurno(self, Giocatore):
  125.         if self.Mani[Giocatore].EVuoto():
  126.             return 0
  127.         Vicino = self.TrovaVicino(Giocatore)
  128.         CartaScelta = self.Mani[Vicino].PrimaCarta()
  129.         self.Mani[Giocatore].AggiungiCarta(CartaScelta)
  130.         print "Mano di ",self.Mani[Giocatore].Nome,\
  131.         ": scelta", CartaScelta
  132.         Conteggio = self.Mani[Giocatore].RimuoveCoppie()
  133.         self.Mani[Giocatore].Mescola()
  134.         return Conteggio
  135.     def TrovaVicino(self, Giocatore):
  136.         NumMani=len(self.Mani)
  137.         for Prossimo in range(1, NumMani):
  138.             Vicino = (Prossimo + Giocatore) % NumMani
  139.             if not self.Mani[Vicino].EVuoto():
  140.                 return Vicino
  141. # Codice che gestisce il gioco.
  142. Gioco = GiocoOldMaid()
  143. Quanti = input("Quanti giocatori?")
  144. if Quanti > 8: Quanti = 8
  145. if Quanti < 2: Quanti = 2
  146. ListaG = []
  147. for i in range(Quanti):
  148.     print "Giocatore: ", i+1,
  149.     ListaG.append(raw_input("nome: "))
  150. Gioco.Partita(ListaG)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement