venerdì 18 febbraio 2011

[Python3.1] Trova la pepita !


Un piccolo gioco in python3.1, giusto per prenderci la mano con la chiamata di funzioni, le doctype e per mettere a frutto un'idea nata nel bus per fornire materiale all'Accademia :)

Vai all'ultima versione!



#! /usr/bin/env python3.1
# -*- coding: utf-8 -*-
import sys
import random

def stampaCantiere(campo,pepita=None):
 # se passo la pepita allora deve controllare cella per cella
 # quale sia quella giusta dove metterla
 if pepita != None:
  for r in range(campo):
   for c in range(campo):
    if r == pepita[0] and c == pepita[1]:
     print("|X|",end='')
    else:
     print("|_|",end='')
   print()
 # altrimenti fai una stampa veloce
 # separo i due casi per evitare di eseguire sempre del codice molto pesante
 else:
  for i in range(campo):
   print("|_|"*campo)
 
 
 
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. 
 
 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("\n Benvenuto nella miniera di TuxErrante ! \n Sarò lieto di \
condividere con te il mio oro, a patto che tu riesca a trovarlo!\n \
Hai {0} cariche di esplosivo e {1} cave da esplorare. \n \
Sei pronto ? \n Ecco lo schema del cantiere \n".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 [0 ..{}] \n x = ".format(campo-1))
  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)
   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)
     exit(" Complimenti!! L'hai trovata! Siamo ricchiiiii !!")
    else: # dice se si è lontani o meno dalla pepita
     tent -=1
     if abs(pepita[0] - bangx) == 1 or abs(pepita[1] - bangy) == 1:
      print(" Ci sei vicino !!")      
     else:
      print(" No, no, non ci siamo. \n")
    if tent >= 1:
     print(" Dai ritenta !!")
    else:
     print(" Peccato che abbia finito l'esplosivo !! \n Ecco dov'era :")
     stampaCantiere(campo,pepita)
       
   
# 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)






0 commenti:

Posta un commento