View Full Version : Python: gioco del tris entro domenica :help:
<B>Pietro<B>
24-05-2011, 20:57
Ciao a tutti entro lunedì devo fare e studiarmi il gioco del Tris in Python perché lunedì mattina ci fa una bella verifica e il nostro prof non ci ha spiegato nulla perché dice che "dobbiamo ragionare e provare". NESSUNO ha realizzato questo simpatico gioco quindi potete immaginare com'è la situazione (di ansia).
Ho realizzato buona parte del lavoro ma mi sono bloccato su alcune cosette che fra un attimo vi dico. Anzitutto il gioco deve essere eseguito in locale tra due giocatori fisici. In Python:
"print" sta per scrivi
"m" è la variabile della mossa de giocatore
col segno cancellato # si fanno i commenti
"import os" (quindi "os.system") è per importare i comandi dal prompt
Questo è il codice:
import os
os.system("clear")
print "Benvenuto al gioco dl Tris!" #Messaggi di benvenuto
print "Questo gioco e' stato creato con Python ed e' soggetto da copyright"+"\n"
print "ISTRUZIONI"+"\n"+"Questo gioco e' stato realizzato col linguaggio denominato Python. Giocare e' molto semplice, pero' ricordati che puoi usare soltanto la tastiera. Per inserire il segno all'interno della griglia dovrai scrivere di seguito le coordnate di questa, con caratteri minuscoli, per poi veder apparire di seguito un simbolo nella casella corrispondente. A seconda dell'ordine del giocatore, vedrete apparire una X, per il 1 giocatore, o una O, per il 2 giocatore. Ad esempio per mettere una X in alto a destra dovrai scrivere a3. Buon divertimento!"+"\n"
v="_" #Variabili tabella
A1=v
A2=v
A3=v
B1=v
B2=v
B3=v
C1=v
C2=v
C3=v
print "A "+A1+"|"+A2+"|"+A3+"\n"+ "B "+B1+"|"+B2+"|"+B3+"\n"+"C "+C1+"|"+C2+"|"+C3+"\n"+" 1 2 3"+"\n"
a="X" #Variabile segno
while True: #Inizio inserimento valori X e O
m=True
t=(raw_input("Inserisci le coordinate: ")) #Coordinate segni
if(t=="a1" and A1==v):
A1=a
elif(t=="a2" and A2==v):
A2=a
elif(t=="a3" and A3==v):
A3=a
elif(t=="b1" and B1==v):
B1=a
elif(t=="b2" and B2==v):
B2=a
elif(t=="b3" and B3==v):
B3=a
elif(t=="c1" and C1==v):
C1=a
elif(t=="c2" and C2==v):
C2=a
elif(t=="c3" and C3==v):
C3=a
os.system("clear")
print "A "+A1+"|"+A2+"|"+A3+"\n"+ "B "+B1+"|"+B2+"|"+B3+"\n"+"C "+C1+"|"+C2+"|"+C3+"\n"+" 1 2 3"
#Condizioni vincita o parita'
if (A1==A2==A3==a or B1==B2==B3==a or C1==C2==C3==a or A1==B2==C3==a or A3==B2==C1==a or A1==B1==C1==a or A2==B2==C2==a or A3==B3==C3==a):
print "Vince il giocatore "+a #Vincita
if (A1!=v and A2!=v and A3!=v and B1!=v and B2!=v and B3!=v and C1!=v and C2!=v and C3!=v):
print "Parita'" #Parita'
if (a=="X"): #Cambiamento segno giocatore
a="O"
elif (a=="O"):
a="X"
else: m=False
#if m=False: exit
[il commento finale l'ho messo perché quella riga non mi va anche se non capisco perché…]
Quello che proprio non capisco è come far finire il gioco nei casi di vincita di un giocatore e dell'altro e nel caso di parità. Il problema secondario è come far richiedere la mossa se il giocatore inserisce una coordinata già immessa precedentemente.
Grazie mille in anticipo a tutti quelli che mi aiuteranno e volevo ricordare che il mio scopo è quello di capire e di imparare, non quello di avere il codice.
:help:
cdimauro
25-05-2011, 14:19
[il commento finale l'ho messo perché quella riga non mi va anche se non capisco perché…]
exit è una funzione, quindi dev'essere invocata con exit() (quindi con le parentesi) anziché mettendo solo il nome.
Quello che proprio non capisco è come far finire il gioco nei casi di vincita di un giocatore e dell'altro e nel caso di parità.
Basta mettere un'istruzione break per uscire dal ciclo while, dopo aver verificato la situazione di vincita o di parità.
Il problema secondario è come far richiedere la mossa se il giocatore inserisce una coordinata già immessa precedentemente.
Dovresti mettere tutto il blocco di inserimento dentro un altro ciclo while, aggiungendo alla catena di if un else finale che servirà a indicare la condizione di input errato, in modo da ritornare a eseguire il ciclo (while) e richiedere un nuovo input da valutare.
Il concetto è che devi "marcare" se l'input è corretto, oppure no, e uscire dal ciclo soltanto nel primo caso.
Grazie mille in anticipo a tutti quelli che mi aiuteranno e volevo ricordare che il mio scopo è quello di capire e di imparare, non quello di avere il codice.
:help:
Non so se è chiaro quello che ho scritto. Eventualmente chiedi pure.
<B>Pietro<B>
26-05-2011, 18:56
non ce la faccio… :dry:
Comunque ho cliccato sul libro che linki nella tua firma e ho visto la funzione return. Fa ripartire il codice o lo fa soltanto finire?
Per il ciclo while ho scritto il while True: e dopo anchor while True:… quell'if che mi dice se t!=v allora scrivi "hai sbagliato" dove lo metto?
Ecco il codice aggiornato (che non va):
import os
os.system("clear")
print "Benvenuto al gioco dl Tris!" #Messaggi di benvenuto
print "Questo gioco e' stato creato con Python ed e' soggetto da copyright"+"\n"
print "ISTRUZIONI"+"\n"+"Questo gioco e' stato realizzato col linguaggio denominato Python. Giocare e' molto semplice, p$
v="_" #Variabili tabella
A1=v
A2=v
A3=v
B1=v
B2=v
B3=v
C1=v
C2=v
C3=v
print "A "+A1+"|"+A2+"|"+A3+"\n"+ "B "+B1+"|"+B2+"|"+B3+"\n"+"C "+C1+"|"+C2+"|"+C3+"\n"+" 1 2 3"+"\n"
a="X" #Variabile segno
t=True
while True: #Inizio inserimento valori X e O
while (t==True):
m=True
t=(raw_input("Inserisci le coordinate: ")) #Coordinate segni
if(t=="a1" and A1==v):
A1=a
elif(t=="a2" and A2==v):
A2=a
elif(t=="a3" and A3==v):
A3=a
elif(t=="b1" and B1==v):
B1=a
elif(t=="b2" and B2==v):
B2=a
elif(t=="b3" and B3==v):
B3=a
elif(t=="c1" and C1==v):
C1=a
elif(t=="c2" and C2==v):
C2=a
elif(t=="c3" and C3==v):
C3=a
os.system("clear")
print "A "+A1+"|"+A2+"|"+A3+"\n"+ "B "+B1+"|"+B2+"|"+B3+"\n"+"C "+C1+"|"+C2+"|"+C3+"\n"+" 1 2 3"
if(t!=v):
print "Hai fatto una mossa errata"
t=False
#Condizioni vincita o parita'
if (A1==A2==A3==a or B1==B2==B3==a or C1==C2==C3==a or A1==B2==C3==a or A3==B2==C1==a or A1==B1==C1==a or A2==B2$
print "Vince il giocatore "+a #Vincita
if (A1!=v and A2!=v and A3!=v and B1!=v and B2!=v and B3!=v and C1!=v and C2!=v and C3!=v):
print "Parita'" #Parita'
if (a=="X"): #Cambiamento segno giocatore
a="O"
elif (a=="O"):
a="X"
else:
m=False
t=True
if m==False:
break
<B>Pietro<B>
27-05-2011, 21:39
Ci ho ragionato un bel po' ed è venuto fuori questo:
import os
os.system("clear")
print "Benvenuto al gioco dl Tris!" #Messaggi di benvenuto
print "Questo gioco e' stato creato con Python ed e' soggetto da copyright"+"\n"
print "ISTRUZIONI"+"\n"+"Questo gioco e' stato realizzato col linguaggio denominato Python. Giocare e' molto semplice, p$
v="_" #Variabili tabella
A1=v
A2=v
A3=v
B1=v
B2=v
B3=v
C1=v
C2=v
C3=v
scacchiera="A "+A1+"|"+A2+"|"+A3+"\n"+ "B "+B1+"|"+B2+"|"+B3+"\n"+"C "+C1+"|"+C2+"|"+C3+"\n"+" 1 2 3"
mse="Hai inserito una coordinata gia' immessa!"
print scacchiera
a="X" #Variabile segno
while True: #Inizio inserimento valori X e O
m=True
print "Turno del giocatore "+a
t=(raw_input("Inserisci le coordinate: ")) #Coordinate segni
os.system("clear")
if(t=="a1" and A1==a):
print mse
elif(t=="a2" and A2==a):
print mse
elif(t=="a3" and A3==a):
print mse
elif(t=="b1" and B1==a):
print mse
elif(t=="b2" and B2==a):
print mse
elif(t=="b3" and B3==a):
print msE
elif(t=="c1" and C1==a):
print msE
elif(t=="c2" and C2==a):
print msE
elif(t=="c3" and C3==a):
print msE
elif(t=="a1" and A1==v):
A1=a
elif(t=="a2" and A2==v):
A2=a
elif(t=="a3" and A3==v):
A3=a
elif(t=="b1" and B1==v):
B1=a
elif(t=="b2" and B2==v):
B2=a
elif(t=="b3" and B3==v):
B3=a
elif(t=="c1" and C1==v):
C1=a
elif(t=="c2" and C2==v):
C2=a
elif(t=="c3" and C3==v):
C3=a
print "A "+A1+"|"+A2+"|"+A3+"\n"+ "B "+B1+"|"+B2+"|"+B3+"\n"+"C "+C1+"|"+C2+"|"+C3+"\n"+" 1 2 3"
#Condizioni vincita o parita'
if (A1==A2==A3==a or B1==B2==B3==a or C1==C2==C3==a or A1==B2==C3==a or A3==B2==C1==a or A1==B1==C1==a or A2==B2$
print "Vince il giocatore "+a #Vincita
break
if (A1!=v and A2!=v and A3!=v and B1!=v and B2!=v and B3!=v and C1!=v and C2!=v and C3!=v):
print "Parita'" #Parita'
break
if (a=="X"): #Cambiamento segno giocatore
a="O"
elif (a=="O"):
a="X"
else: m=False
però il problema è che quando c'è la coordinata già immessa cambia il simbolo del giocatore… come fare?
cdimauro
28-05-2011, 08:20
Perché, come ti dicevo prima, devi inserire tutta la parte di immissione e controllo della validità delle coordinate dentro un ciclo while, dal quale uscire se e solo se le coordinate immesse sono corrette.
Intercettare il caso della coordinate corrette è molto semplice: basta aggiungere un else alla fine della catena di if che controllano la non validità dell'input. L'else deve semplicemente far uscire dal secondo ciclo while, allo stesso modo di come hai fatto uscire dal ciclo while principale.
Sei davvero a una passo dalla soluzione, veramente. Ti bastano 3 righe con 3 istruzioni, che rispecchiano esattamente quello che ho detto.
<B>Pietro<B>
29-05-2011, 13:07
Ecco qua cosa sono riuscito a fare:
import os
os.system("clear")
print "Benvenuto al gioco dl Tris!" #Messaggi di benvenuto
print "Questo gioco e' stato creato con Python ed e' soggetto da copyright"+"\n"
#print "ISTRUZIONI"+"\n"+"Questo gioco e' stato realizzato col linguaggio denominato Python. Giocare e' molto semplice, pero' ricordati che puoi usare soltanto la tastiera. Per inserire il segno all'interno della griglia dovrai scrivere di seguito le coordnate di questa, con caratteri minuscoli, per poi veder apparire di seguito un simbolo nella casella corrispondente. A seconda dell'ordine del giocatore, vedrete apparire una X, per il 1 giocatore, o una O, per il 2 giocatore. Ad esempio per mettere una X in alto a destra dovrai scrivere a3. Buon divertimento!"+"\n""
print "ISTRUZIONI"+"\n"+"Questo gioco e' stato realizzato col linguaggio denominato Python. Giocare e' molto semplice, pero' ricordati che puoi usare soltanto la tastiera. Per inserire il segno all'interno della griglia dovrai scrivere di seguito le coordnate di questa, con caratteri minuscoli, per poi veder apparire di seguito un simbolo nella casella corrispondente. A seconda dell'ordine del giocatore, vedrete apparire una X, per il 1 giocatore, o una O, per il 2 giocatore. Ad esempio per mettere una X in alto a destra dovrai scrivere a3. Buon divertimento!"+"\n"
v="_" #Variabili tabella
A1=v
A2=v
A3=v
B1=v
B2=v
B3=v
C1=v
C2=v
C3=v
tab="A "+A1+"|"+A2+"|"+A3+"\n"+ "B "+B1+"|"+B2+"|"+B3+"\n"+"C "+C1+"|"+C2+"|"+C3+"\n"+" 1 2 3"
mse="Hai inserito una coordinata gia' immessa!"
print tab
a="X" #Variabile segno
m=False
while True: #Inizio inserimento valori X e O
m=True
print "Turno del giocatore "+a
t=(raw_input("Inserisci le coordinate: ")) #Coordinate segni
os.system("clear")
if(t=="a1" and A1==v):
A1=a
elif(t=="a2" and A2==v):
A2=a
elif(t=="a3" and A3==v):
A3=a
elif(t=="b1" and B1==v):
B1=a
elif(t=="b2" and B2==v):
B2=a
elif(t=="b3" and B3==v):
B3=a
elif(t=="c1" and C1==v):
C1=a
elif(t=="c2" and C2==v):
C2=a
elif(t=="c3" and C3==v):
C3=a
else: m=False
print tab
#Condizioni vincita o parita'
if (A1==A2==A3==a or B1==B2==B3==a or C1==C2==C3==a or A1==B2==C3==a or A3==B2==C1==a or A1==B1==C1==a or A2==B2==C2==a or A1==B2==C3==a or A3==B2==C1==a):
print "Vince il giocatore "+a #Vincita
break
elif (A1!=v and A2!=v and A3!=v and B1!=v and B2!=v and B3!=v and C1!=v and C2!=v and C3!=v):
print "Parita'" #Parita'
break
elif (a=="X" and m==True): #Cambiamento segno giocatore
a="O"
elif (a=="O" and m==True):
a="X"
elif(m==False): print mse
else: m=False
Però sabato il prof mi ha detto di togliere la funzione break, mettendo
if(m): #condizioni vincita e parità e cambiamento segno
In poche parole devo sostituire la funzione break con gli if. Da che cosa deriva quindi questa funzione?
<B>Pietro<B>
29-05-2011, 13:34
L'ho fattooooooo!!!!!!!!!! Evvaiii! :sofico:
Ecco qua:
import os
os.system("clear")
print "Benvenuto al gioco dl Tris!" #Messaggi di benvenuto
print "Questo gioco e' stato creato con Python ed e' soggetto da copyright"+"\n"
#print "ISTRUZIONI"+"\n"+"Questo gioco e' stato realizzato col linguaggio denominato Python. Giocare e' molto semplice, pero' ricordati che puoi usare soltanto la tastiera. Per inserire il segno all'interno della griglia dovrai scrivere di seguito le coordnate di questa, con caratteri minuscoli, per poi veder apparire di seguito un simbolo nella casella corrispondente. A seconda dell'ordine del giocatore, vedrete apparire una X, per il 1 giocatore, o una O, per il 2 giocatore. Ad esempio per mettere una X in alto a destra dovrai scrivere a3. Buon divertimento!"+"\n""
print "ISTRUZIONI"+"\n"+"Questo gioco e' stato realizzato col linguaggio denominato Python. Giocare e' molto semplice, pero' ricordati che puoi usare soltanto la tastiera. Per inserire il segno all'interno della griglia dovrai scrivere di seguito le coordnate di questa, con caratteri minuscoli, per poi veder apparire di seguito un simbolo nella casella corrispondente. A seconda dell'ordine del giocatore, vedrete apparire una X, per il 1 giocatore, o una O, per il 2 giocatore. Ad esempio per mettere una X in alto a destra dovrai scrivere a3. Buon divertimento!"+"\n"
v="_" #Variabili tabella
A1=v
A2=v
A3=v
B1=v
B2=v
B3=v
C1=v
C2=v
C3=v
tab="A "+A1+"|"+A2+"|"+A3+"\n"+ "B "+B1+"|"+B2+"|"+B3+"\n"+"C "+C1+"|"+C2+"|"+C3+"\n"+" 1 2 3"
mse="Hai inserito una coordinata gia' immessa!"
print tab
a="X" #Variabile segno
m=False
f=True
while(f): #Inizio inserimento valori X e O
m=True
print "Turno del giocatore "+a
t=(raw_input("Inserisci le coordinate: ")) #Coordinate segni
os.system("clear")
if(t=="a1" and A1==v):
A1=a
elif(t=="a2" and A2==v):
A2=a
elif(t=="a3" and A3==v):
A3=a
elif(t=="b1" and B1==v):
B1=a
elif(t=="b2" and B2==v):
B2=a
elif(t=="b3" and B3==v):
B3=a
elif(t=="c1" and C1==v):
C1=a
elif(t=="c2" and C2==v):
C2=a
elif(t=="c3" and C3==v):
C3=a
else: m=False
print "A "+A1+"|"+A2+"|"+A3+"\n"+ "B "+B1+"|"+B2+"|"+B3+"\n"+"C "+C1+"|"+C2+"|"+C3+"\n"+" 1 2 3"
#Condizioni vincita o parita'
if (A1==A2==A3==a or B1==B2==B3==a or C1==C2==C3==a or A1==B2==C3==a or A3==B2==C1==a or A1==B1==C1==a or A2==B2==C2==a or A1==B2==C3==a or A3==B2==C1==a):
print "Vince il giocatore "+a #Vincita
f=False
elif(A1!=v and A2!=v and A3!=v and B1!=v and B2!=v and B3!=v and C1!=v and C2!=v and C3!=v):
print "Parita'" #Parita'
f=False
elif(a=="X" and m==True): #Cambiamento segno giocatore
a="O"
elif (a=="O" and m==True):
a="X"
elif(m==False): print mse
else: m=False
Adesso lo metto in rete! Però sarebbe da convertirlo in C perché se no uno si deve scaricare anche l'interprete…
cdimauro
30-05-2011, 14:03
Io penserei a spendere meglio il tempo, fortificando le conoscenze di programmazione prima di passare a un linguaggio più ostico, come il C (SE realmente necessario), perché da quel che ho visto finora ne avete strada da fare.
Un buon esercizio sarebbe riscrivere quel codice per renderlo più "pulito". :)
P.S. Il tuo professore dovrebbe almeno avere un po' di pietà e non limitarvi nell'usare alcune istruzioni, viste le condizioni in cui versate.
<B>Pietro<B>
30-05-2011, 14:31
no no me lo faccio fare! :D
Comunque sì penso di continuare con Python e guardarmelo bene. Ma se dovessi farlo con le funzioni il gioco sarebbe più veloce e come dici tu più "pulito"?
Il nostro professore ce l'ha fatto fare così affinché potessimo ripassare tutto quello che abbiamo fatto e verificare le nostre capacità (credo :stordita: ),
Oggi abbiamo fatto la verifica e direi che per me è andata abbastanza bene penso, credo di aver fatto 2 errori.
Comunque tra C e Python che differenze ci sono?
cdimauro
31-05-2011, 13:52
no no me lo faccio fare! :D
Ah, meglio così. :D
Comunque sì penso di continuare con Python e guardarmelo bene. Ma se dovessi farlo con le funzioni il gioco sarebbe più veloce e come dici tu più "pulito"?
La velocità lasciala perdere, che per il tipo di gioco è del tutto ininfluente.
Più pulito sì, lo sarebbe sicuramente.
Il nostro professore ce l'ha fatto fare così affinché potessimo ripassare tutto quello che abbiamo fatto e verificare le nostre capacità (credo :stordita: ),
Quindi non avete ancora studiato le funzioni?
Oggi abbiamo fatto la verifica e direi che per me è andata abbastanza bene penso, credo di aver fatto 2 errori.
Quindi avrai ottenuto un buon risultato. Ottimo per l'autostima.
Comunque tra C e Python che differenze ci sono?
Piccolissime. :asd:
A parte gli scherzi, sono il giorno e la notte: non c'entra nulla l'uno con l'altro.
Fortificati con Python, che per farti del male col C c'è sempre tempo. ;)
<B>Pietro<B>
31-05-2011, 14:33
No, le funzione non le abbiamo ancora fatte comunque oltre usare break e continue cos'altro potrei modificare?
I risultati ce li darà sabato e vedremo… e il prof di laboratorio di informatica ci dovrebbe correggere il Tris (avrebbe dovuto farlo ieri ma non l'ha fatto :asd: )
cdimauro
31-05-2011, 21:02
Intanto potresti usare break e continue.
Poi utilizzerei una matrice al posto di A1, A2, ecc., in modo da effettuare i controlli con un ben più pulito ciclo (se non hai fatto il for, al limite anche col while).
<B>Pietro<B>
01-06-2011, 14:52
Intanto potresti usare break e continue.
Poi utilizzerei una matrice al posto di A1, A2, ecc., in modo da effettuare i controlli con un ben più pulito ciclo (se non hai fatto il for, al limite anche col while).
ehm cos'è una matrice? :D Conosco solo le funzioni di continue, break e exit() Cmq sto seguendo il libro che hai linkato come firma però devo capire come creare una funzione con def.
cdimauro
01-06-2011, 17:53
OK, come non detto: sei proprio agli inizi. Quindi fai benissimo a smazzarti il libro che ho in firma: vedrai che un po' alla volta ti sarà tutto più chiaro. :)
<B>Pietro<B>
02-06-2011, 21:48
eh già :rolleyes:
Grazie per il tuo aiuto. Quando ci dà i risultati (sabato) di dirò ;)
<B>Pietro<B>
04-06-2011, 15:40
ecco ce li ha dati! Ho preso 9! E forse ha detto che potrebbe pensarci anche per darmi 9 in pagella! :sofico:
Grazie!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.