Domanda problema gioco OldMaid

Stato
Discussione chiusa ad ulteriori risposte.

examinedcastle

Utente Electrum
5 Luglio 2014
158
36
14
122
Salve Ragazzi,
svolgendo alcuni esercizi in python (libro HowToThinkITA) dovevo creare un gioco ma a circà metà del progetto ho già dei problemi.
Regole del gioco:
L’obbiettivo di Old Maid è quello di riuscire a sbarazzarsi di tutte le carte che si hanno in mano. Questo viene fatto eliminando coppie di carte che hanno lo stesso rango e colore: il 4 di fiori viene eliminato con il 4 di picche perchè entrambi i segni sono neri; il jack di cuori con il jack di quadri perchè entrambi sono rossi. Per iniziare il gioco la Regina di Fiori è tolta dal mazzo per fare in modo che la Regina di Picche non possa essere eliminata durante la partita. Le 51 carte sono poi tutte distribuite una alla volta in senso orario ai giocatori e dopo la distribuzione tutti i giocatori scartano immediatamente quante più carte possibili eliminando le coppie presenti nella mano appena distribuita. Quando non si possono più scartare carte il gioco ha inizio. A turno ogni giocatore pesca senza guardarla una carta dal giocatore che, in senso orario, ha ancora delle carte in mano. Se la carta scelta elimina una carta in mano la coppia viene rimossa. In caso contrario la carta scelta rimane in mano. Alla fine della partita tutte le eliminazioni saranno state fatte ed il perdente è chi rimane con la Regina di Picche in mano.
Questo è il codice scritto da me
Codice:
 class Mazzo():

 def __init__(self):
  self.Carte=[]
  for Seme in range(4):
   for Rango in range(1,14):
    self.Carte.append(Carta(Seme,Rango))
    
 def __cmp__(self,Altro):
 #controllailseme
  if self.Seme > Altro.Seme:
   return 1
  if self.Seme < Altro.Seme:
   return -1
 #seisemisonougualicontrollailrango
  if self.Rango > Altro.Rango:
   return 1
  if self.Rango < Altro.Rango:
   return -1
 #seancheiranghisonougualilecartesonouguali!
   return 0
   
 def Mescola(self):
  import random
  NumCarte=len(self.Carte)
  for i in range(NumCarte):
   j=random.randrange(i,NumCarte)
   self.Carte[i], self.Carte[j] = self.Carte[j], self.Carte[i]

 def __str__(self):
  s=" "
  for i in range(len(self.Carte)):
   s = s + " "*i + str(self.Carte[i]) + "\n"
   return s
 
 def Distribuisci(self,ListaMani,NumCarte=999):
  NumMani=len(ListaMani)
  for i in range(NumCarte):
   if self.EVuoto():
    break
   Carta=self.PrimaCarta()
   Mano=ListaMani[i%NumMani]
   Mano.AggiungeCarta(Carta)

 def EVuoto(self):
  return(len(self.Carte)==0) 

 def PrimaCarta(self):
  return self.Carte.pop()

 def RimuoviCarta(self,Carta):
  if Carta in self.Carte:
   self.Carte.remove(Carta)
   return 1
  else:
    return0

   
class Carta():

 ListaSemi = ["Fiori","Quadri","Cuori","Picche"]
 ListaRanghi=["impossibile","Asso","2","3","4","5","6","7","8","9","10","Jack","Regina","Re"]

 def __str__(self):
  return (self.ListaRanghi[self.Rango]+" di "+ self.ListaSemi[self.Seme])
  
  
 def __init__(self,Seme=0,Rango=0):
  self.Seme=Seme
  self.Rango=Rango


class Mano(Mazzo):

 def __init__(self,Nome=""):  
  self.Carte=[]
  self.Nome=Nome
  
 def AggiungeCarta(self,Carta):
   self.Carte.append(Carta)
   
 def __str__(self):
  s="La mano di " + self.Nome
  if self.EVuoto():
   s = s + "e’vuota \n"
  else: 
   s = s + " contiene queste carte: \n"
   return s + Mazzo.__str__(self)

class GiocoDiCarte:

 def __init__(self):
  self.Mazzo=Mazzo()
  self.Mazzo.Mescola()

class ManoOldMaid(Mano):

 def RimuoveCoppie(self):
  Conteggio=0
  CarteOriginali=self.Carte[:]
  for CartaOrig in CarteOriginali:
   CartaDaCercare = Carta(3-CartaOrig.Seme,CartaOrig.Rango)
   if CartaDaCercare in self.Carte:
    self.Carte.remove(CartaOrig)
    self.Carte.remove(CartaDaCercare)
   print"Mano di %s : %s elimina %s" % (self.Nome,CartaOrig,CartaDaCercare)
   Conteggio = Conteggio + 1
  return Conteggio 



Partita=GiocoDiCarte() 
Mano1=ManoOldMaid("Franco")
Partita.Mazzo.Distribuisci([Mano1],13)
print Mano1
g = raw_input("Press ENTER to continue")
Mano1.RimuoveCoppie()

La prima immagine è l'output generato dal MIO codice la seconda l'output che il libro mostra.
N.B. aiutatemi a trovare l'errore senza stravolgere la struttura dello programma.

Inviato dal mio IdeaPadA10 utilizzando Tapatalk
 

Allegati

  • uploadfromtaptalk1425332443038.JPG
    uploadfromtaptalk1425332443038.JPG
    98.4 KB · Visualizzazioni: 76
  • uploadfromtaptalk1425332773331.JPG
    uploadfromtaptalk1425332773331.JPG
    95.3 KB · Visualizzazioni: 62
Stato
Discussione chiusa ad ulteriori risposte.