Accademia:TrovaPepita.py: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
(Nuova pagina: <pre>#! /usr/bin/env python3.1 # -*- coding: utf-8 -*- """ Gioco dimostrativo creato per l'Accademia debianizzati. Copyright 2011 risca <risca at altervista (cancella questo)dot org> ...) |
(ultima versione script) |
||
(3 versioni intermedie di 3 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
<pre>#! /usr/bin/env python3.1 | {{Template:Acc_Menu_Python}} | ||
# -*- | Ultima versione, aggiornata dagli ''alunni'' dell'Accademia : | ||
<pre> | |||
#!/usr/bin/env python3 | |||
""" | |||
Gioco dimostrativo creato per l'Accademia debianizzati. | |||
Copyright 2011 risca <risca at altervista (cancella questo)dot org> | |||
Copyright 2011 TuxErrante <trimurtide at gmail (delete this)dot com> | |||
GPLv2 or later | |||
""" | |||
import sys | |||
import random | |||
errore = [] | |||
benvenuto = """Benvenuto nella miniera TuxErrante & Risca co.! | |||
Sarò lieto di condividere con te il nostro oro, a patto che tu riesca a trovarlo! | |||
Hai {0} cariche di esplosivo e {1} cave da esplorare. | |||
Sei pronto?""" | |||
# Definisco come stampare l'ascissa | |||
def stampa_ascissa(campo): | |||
print(" ", end=' ') | |||
for i in range(campo): | |||
print('{:2}'.format(i+1), end=' ') | |||
print() | |||
def stampa_cantiere(campo,pepita=[-10,-10], errore=errore): | |||
print("-"*3*(campo+2)) # stampa un divisore largo come il campo | |||
stampa_ascissa(campo) | |||
# Stampa la griglia di gioco | |||
for r in range(campo): | |||
print('{:2}'.format(r+1), end=' ') | |||
for c in range(campo): | |||
if [r , c] in errore: | |||
print(" O ",end='') | |||
elif r == pepita[0] and c == pepita[1]: | |||
print(" X ",end='') | |||
else: | |||
print(" . ",end='') | |||
print('{:2}'.format(r+1), end=' ') | |||
print() # manda a capo per ogni nuova riga | |||
stampa_ascissa(campo) | |||
print("-"*3*(campo+2)) # stampa un divisore largo come il campo | |||
def trova_pepita(tent,campo): | |||
""" | |||
Crea una matrice di dimensione campo*campo dove pone una 'pepita' in modo | |||
casuale attraverso la funzione randomint(), che bisognerà cercare di trovare | |||
per vincere. Se la distanza tra la 'cava' inserita e quella della pepita è di | |||
uno, ci avvertirà della vicinanza. | |||
Puo' essere invocato senza argomenti, nel caso in cui i valori di default | |||
saranno 6 tentativi e una matrice 6x6, altrimenti accetta due numeri dove | |||
il numero dei tentativi deve essere inferiore al numero delle cave. | |||
""" | |||
# controlla che il gioco non sia troppo facile | |||
troppi_tent = int(campo**2 / 3) | |||
if tent >= troppi_tent: | |||
exit("Così non si può giocare! È troppo facile, abbassa il numero di " | |||
"tent almeno a {}".format(troppi_tent)) | |||
# assegna casualmente le coordinate della pepita all'interno del campo | |||
pepita = [random.randint(0,campo-1), random.randint(0,campo-1)] | |||
messaggio = benvenuto.format(tent,campo**2) | |||
avviso = '' | |||
while tent > 0: | |||
print('\n'*30) | |||
print(" " * int(campo/2), end=' ') | |||
print("La MINIERA di Tux&risca") | |||
stampa_cantiere(campo) | |||
print(messaggio) | |||
print(avviso) | |||
print("_"*50) | |||
print("Inserisci le coordinate in cui vuoi piazzare la mina" | |||
" comprese tra [1 ..{}]".format(campo)) | |||
bangx = input(" x = ") | |||
bangy = input(" y = ") | |||
# verifica che sia stato inserito un numero | |||
try: | |||
bangx, bangy = int(bangx)-1, int(bangy)-1 | |||
except ValueError: | |||
avviso = "Inserisci delle coordinate numeriche per favore!" | |||
else: | |||
# fai ripetere l'input se le coordinate sono già state inserite | |||
if ([bangx,bangy] in errore): | |||
avviso = ("Errare è umano ma perseverare è diabolico!" + | |||
" Con queste hai già provato...") | |||
# se le coordinate inserite sono ammissibili procedi | |||
elif 0 <= bangx < campo and 0 <= bangy < campo: | |||
avviso = '' | |||
if (pepita[0] == bangx) and (pepita[1] == bangy): | |||
# Hai indovinato! Svela dove è la pepita ! | |||
messaggio = "coordinate segrete {},{}".format(pepita[0],pepita[1]) | |||
stampa_cantiere(campo,pepita,errore) | |||
exit("Complimenti!! L'hai trovata! Siamo ricchiiiii\n" | |||
"Ci devi una percentuale, ricordatelo!!") | |||
else: # Non hai indovinato, continua a giocare | |||
tent -=1 | |||
errore.append([bangx, bangy]) # inserisco nella lista errori | |||
# Avvisa se sei andato vicino/vicinissimo/lontano alla pepita | |||
testX = abs(pepita[0] - bangx) | |||
testY = abs(pepita[1] - bangy) | |||
if (testX <= 1) and (testY <= 1): | |||
messaggio = "Sei davvero VICINISSIMO!!!" | |||
elif ((testX == 2) and (testY <= 2)) or ((testY == 2) and (testX <= 2)): | |||
messaggio = "Sei abbastanza vicino!" | |||
else: | |||
messaggio = "No, no, non ci siamo. \n" | |||
# Stampa tentativi rimasti | |||
if tent > 1: | |||
messaggio += ("Dai ritenta ancora! Hai ancora {} tentativi".format(tent)) | |||
elif tent == 1: | |||
messaggio += ("ATTENTO: hai l'ultimissimo tentativo! ") | |||
else: | |||
avviso = ("Per favore inserisci delle coordinate corrette!" + | |||
"\nRicorda che quelli che hai in mano sono esplosivi!!") | |||
print("\n Peccato che tu abbia finito l'esplosivo!!!\nEcco dov'era:") | |||
stampa_cantiere(campo,pepita,errore) | |||
# chiamata della funzione principale | |||
# se viene chiamata senza argomenti gli verranno passati di default 6 e 6 | |||
# chiamare lo script con '-h' per vedere la documentazione | |||
if len(sys.argv) == 3: | |||
trova_pepita(int(sys.argv[1]), int(sys.argv[2])) | |||
elif len(sys.argv) == 2 and sys.argv[1] == '-h': | |||
print (trova_pepita.__doc__) | |||
else: | |||
trova_pepita(6,6) | |||
</pre> | |||
---- | |||
Versione precedente: | |||
<pre> | |||
#!/usr/bin/env python3 | |||
""" | """ | ||
Gioco dimostrativo creato per l'Accademia debianizzati. | Gioco dimostrativo creato per l'Accademia debianizzati. | ||
Riga 117: | Riga 259: | ||
else: | else: | ||
trovaPepita(6,6)</pre> | trovaPepita(6,6)</pre> | ||
---- | |||
:[[Utente:Tuxerrante|Tuxerrante]] | |||
:[[Utente:Risca86|Risca86]] | |||
[[Categoria:Accademia Python - Lezione 6]] | |||
[[Categoria:Accademia Python - Lezione 7]] |
Versione attuale delle 15:11, 1 mar 2011
Ultima versione, aggiornata dagli alunni dell'Accademia :
#!/usr/bin/env python3 """ Gioco dimostrativo creato per l'Accademia debianizzati. Copyright 2011 risca <risca at altervista (cancella questo)dot org> Copyright 2011 TuxErrante <trimurtide at gmail (delete this)dot com> GPLv2 or later """ import sys import random errore = [] benvenuto = """Benvenuto nella miniera TuxErrante & Risca co.! Sarò lieto di condividere con te il nostro oro, a patto che tu riesca a trovarlo! Hai {0} cariche di esplosivo e {1} cave da esplorare. Sei pronto?""" # Definisco come stampare l'ascissa def stampa_ascissa(campo): print(" ", end=' ') for i in range(campo): print('{:2}'.format(i+1), end=' ') print() def stampa_cantiere(campo,pepita=[-10,-10], errore=errore): print("-"*3*(campo+2)) # stampa un divisore largo come il campo stampa_ascissa(campo) # Stampa la griglia di gioco for r in range(campo): print('{:2}'.format(r+1), end=' ') for c in range(campo): if [r , c] in errore: print(" O ",end='') elif r == pepita[0] and c == pepita[1]: print(" X ",end='') else: print(" . ",end='') print('{:2}'.format(r+1), end=' ') print() # manda a capo per ogni nuova riga stampa_ascissa(campo) print("-"*3*(campo+2)) # stampa un divisore largo come il campo def trova_pepita(tent,campo): """ Crea una matrice di dimensione campo*campo dove pone una 'pepita' in modo casuale attraverso la funzione randomint(), che bisognerà cercare di trovare per vincere. Se la distanza tra la 'cava' inserita e quella della pepita è di uno, ci avvertirà della vicinanza. Puo' essere invocato senza argomenti, nel caso in cui i valori di default saranno 6 tentativi e una matrice 6x6, altrimenti accetta due numeri dove il numero dei tentativi deve essere inferiore al numero delle cave. """ # controlla che il gioco non sia troppo facile troppi_tent = int(campo**2 / 3) if tent >= troppi_tent: exit("Così non si può giocare! È troppo facile, abbassa il numero di " "tent almeno a {}".format(troppi_tent)) # assegna casualmente le coordinate della pepita all'interno del campo pepita = [random.randint(0,campo-1), random.randint(0,campo-1)] messaggio = benvenuto.format(tent,campo**2) avviso = '' while tent > 0: print('\n'*30) print(" " * int(campo/2), end=' ') print("La MINIERA di Tux&risca") stampa_cantiere(campo) print(messaggio) print(avviso) print("_"*50) print("Inserisci le coordinate in cui vuoi piazzare la mina" " comprese tra [1 ..{}]".format(campo)) bangx = input(" x = ") bangy = input(" y = ") # verifica che sia stato inserito un numero try: bangx, bangy = int(bangx)-1, int(bangy)-1 except ValueError: avviso = "Inserisci delle coordinate numeriche per favore!" else: # fai ripetere l'input se le coordinate sono già state inserite if ([bangx,bangy] in errore): avviso = ("Errare è umano ma perseverare è diabolico!" + " Con queste hai già provato...") # se le coordinate inserite sono ammissibili procedi elif 0 <= bangx < campo and 0 <= bangy < campo: avviso = '' if (pepita[0] == bangx) and (pepita[1] == bangy): # Hai indovinato! Svela dove è la pepita ! messaggio = "coordinate segrete {},{}".format(pepita[0],pepita[1]) stampa_cantiere(campo,pepita,errore) exit("Complimenti!! L'hai trovata! Siamo ricchiiiii\n" "Ci devi una percentuale, ricordatelo!!") else: # Non hai indovinato, continua a giocare tent -=1 errore.append([bangx, bangy]) # inserisco nella lista errori # Avvisa se sei andato vicino/vicinissimo/lontano alla pepita testX = abs(pepita[0] - bangx) testY = abs(pepita[1] - bangy) if (testX <= 1) and (testY <= 1): messaggio = "Sei davvero VICINISSIMO!!!" elif ((testX == 2) and (testY <= 2)) or ((testY == 2) and (testX <= 2)): messaggio = "Sei abbastanza vicino!" else: messaggio = "No, no, non ci siamo. \n" # Stampa tentativi rimasti if tent > 1: messaggio += ("Dai ritenta ancora! Hai ancora {} tentativi".format(tent)) elif tent == 1: messaggio += ("ATTENTO: hai l'ultimissimo tentativo! ") else: avviso = ("Per favore inserisci delle coordinate corrette!" + "\nRicorda che quelli che hai in mano sono esplosivi!!") print("\n Peccato che tu abbia finito l'esplosivo!!!\nEcco dov'era:") stampa_cantiere(campo,pepita,errore) # chiamata della funzione principale # se viene chiamata senza argomenti gli verranno passati di default 6 e 6 # chiamare lo script con '-h' per vedere la documentazione if len(sys.argv) == 3: trova_pepita(int(sys.argv[1]), int(sys.argv[2])) elif len(sys.argv) == 2 and sys.argv[1] == '-h': print (trova_pepita.__doc__) else: trova_pepita(6,6)
Versione precedente:
#!/usr/bin/env python3 """ Gioco dimostrativo creato per l'Accademia debianizzati. Copyright 2011 risca <risca at altervista (cancella questo)dot org> Copyright 2011 TuxErrante <trimurtide at gmail (delete this)dot com> GPLv2 or later """ import sys import random errore = [] benvenuto = "\n \n \n \n \n \nBenvenuto nella miniera TuxErrante & Risca co.!\n\ Sarò lieto di condividere con te il nostro oro, a patto che \ tu riesca a trovarlo!\n\ Hai {0} cariche di esplosivo e {1} cave da esplorare.\n\ Sei pronto?\nEcco lo schema del cantiere\n" #pepita = [-10, -10] def stampaCantiere(campo,pepita=[-10,-10], errore=[]): # se passo la pepita allora deve controllare cella per cella # quale sia quella giusta dove metterla print("-"*50) print(" ", end=' ') for i in range(campo): if i < 9: print("{} ".format(i+1), end=' ') else: print("{}".format(i+1), end=' ') print() for r in range(campo): if r < 9: print(' {}'.format(r + 1), end=' ') else: print(r + 1, end=' ') for c in range(campo): if [r , c] in errore: print(" O ",end='') elif r == pepita[0] and c == pepita[1]: print(" X ",end='') else: print(" . ",end='') print() # manda a capo per ogni nuova riga def trovaPepita(tent,campo): """\nCrea una matrice di dimensione campo*campo dove pone una 'pepita' in modo casuale attraverso la funzione randomint(), che bisognerà cercare di trovare per vincere. Se la distanza tra la 'cava' inserita e quella della pepita è di uno, ci avvertirà della vicinanza. \n Puo' essere invocato senza argomenti, nel caso in cui i valori di default saranno 6 tentativi e una matrice 6x6, altrimenti accetta due numeri dove il numero dei tentativi deve essere inferiore al numero delle cave.""" if tent >= campo * campo: exit(" Così non si puo' giocare! ") print(benvenuto.format(tent,campo*campo)) # prendi le coordinate della pepita casualmente tra 0 # e la dimensione del campo-1 pepita = [random.randint(0,campo-1), random.randint(0,campo-1)] stampaCantiere(campo) # stampa il campo vuoto while tent > 0: bangx = input("\n Inserisci le coordinate in cui vuoi piazzare la mina \ comprese tra [1 ..{}] \n x = ".format(campo)) bangy = input(" y = ") if not bangx.isnumeric() or not bangy.isnumeric(): print(" Inserisci delle coordinate numeriche per favore! \n") continue else: bangx, bangy = int(bangx), int(bangy) bangx -= 1 bangy -= 1 if bangx < 0 or bangx >= campo or bangy < 0 or bangy >= campo: print(" Per favore inserisci delle coordinate corrette ! \n \ Ricorda che quelli che hai in mano sono esplosivi !! \n") continue else: # coordinate inserite ammissibili if (pepita[0] == bangx) and (pepita[1] == bangy): # svela dove è la pepita ! print("coordinate segrete {},{}".format(pepita[0],pepita[1])) stampaCantiere(campo,pepita,errore) exit(" Complimenti!! L'hai trovata! Siamo ricchiiiii \n \ Ci devi una percentuale, ricordatelo!!") elif ([bangx,bangy] in errore): print(" errare è umano perseverare è diabolico!") continue else: # dice se si è lontani o meno dalla pepita tent -=1 errore.append([bangx, bangy]) # inserisco nella lista errori print("\n") stampaCantiere(campo,[-10,-10],errore) testX = abs(pepita[0] - bangx) testY = abs(pepita[1] - bangy) if (testX == 1 or testX == 0) and (testY == 1 or testY == 0): print(" Ci sei vicino !!") else: print(" No, no, non ci siamo. \n") if tent >= 1: print(" Dai ritenta !!") else: print("\n Peccato che abbia finito l'esplosivo !!\n Ecco dov'era :") stampaCantiere(campo,pepita,errore) # chiamata della funzione principale # se viene chiamata senza argomenti gli verranno passati di default 6 e 6 # chiamare lo script con '-h' per vedere la documentazione if len(sys.argv) == 3: trovaPepita(int(sys.argv[1]), int(sys.argv[2])) elif len(sys.argv) == 2 and sys.argv[1] == '-h': print (trovaPepita.__doc__) else: trovaPepita(6,6)