Accademia:TrovaPepita.py
Vai alla navigazione
Vai alla ricerca
#!/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)