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
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
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