Hola a todos,
Estoy intentando hacer para un trabajo un buscaminas.
El juego en si ya esta funcionando pero me piden que haga un ranking conforme cuanto menos tiempo tardes en encontrar todas las minas mejor puntuación.
De momento he hecho una funcion que inserta en un blog de notas el nombre del jugador cuando ya ha ganado, el problema esta con el tiempo y como ordenar después el ranking de solo los 5 mejores.
Tengo pensado como hacerlo pero no se como aplicarlo:
Mi idea consiste en guardar en una variable la hora actual de cuando se ejecuta el programa y después restarla a la que se haya acabado la partida.
Si alguien pudiese ayudarme estaría muy agradecido.
Gracias por la atención
Os dejo el código para que le echéis un vistazo
import random
import sys
TAMANY = 8
MINES = 10
def print_taulell (tau):
print "\n"
for col in tau:
for fil in col:
print fil," ",
print "\n"
def recompte (col,fil):
suma = 0
for a in range (col-1,col+2):
for b in range (fil-1,fil+2):
if a>=0 and a<=TAMANY-1 and b>=0 and b<=TAMANY-1:
if taulell_ocult[a][b]=="*":
suma = suma + 1
return suma
#Guardar partida
def guardar_taulell(fitxer, taulell):
sortida = open (fitxer, "w")
for i in range(TAMANY):
for j in range(TAMANY):
sortida.write(str(taulell[i][j]))
sortida.close()
#Rankings
def ranking(fitxer):
sortida = open (fitxer, "a")
nom = raw_input("Escriu el nom: ")
sortida.write(nom + '\n')
sortida.close()
#taulell_ocult
taulell_ocult = []
for A in range (TAMANY):
taulell_3 = []
for B in range (TAMANY):
taulell_3.append (0)
taulell_ocult.append (taulell_3)
#Taulell_visible
taulell_visible = []
for A in range (TAMANY):
taulell_3 = []
for B in range (TAMANY):
taulell_3.append ("@")
taulell_visible.append (taulell_3)
#colocar les mines
suma = 0
while suma!=MINES:
random1 = random.randrange(0,TAMANY)
random2 = random.randrange(0,TAMANY)
if taulell_ocult[random1][random2] != '*':
taulell_ocult[random1][random2] = '*'
suma = suma + 1
#Contament de mines contorn
for col in range (TAMANY):
for fil in range (TAMANY):
num = recompte(col,fil)
if taulell_ocult[col][fil]!="*":
taulell_ocult[col][fil]=num
#Joc
suma = 0
partida = raw_input("Vols carregar la partida guardada? S/N ")
if partida=="N":
while suma!=MINES:
posicio = raw_input ("M per mina, G per guardar J per jugar ")
#Mina
if posicio=="M":
print "Indica les coordenades per una posicio AMB mines"
col_mines = input ("Columna: ") -1
fil_mines = input ("Fila: ") -1
if taulell_ocult[fil_mines][col_mines]=="*":
suma = suma + 1
taulell_visible[fil_mines][col_mines]="*"
if suma==MINES:
print_taulell (taulell_visible)
print "Has guanyat"
ranking('ranking.txt')
break
else:
print_taulell (taulell_ocult)
print "Has perdut"
break
print_taulell (taulell_visible)
print "Et queden",MINES-suma,"mines"
#Guardar partida
if posicio == "G":
guardar_taulell("ocult.txt",taulell_ocult)
guardar_taulell("visible.txt", taulell_visible)
print "Has guardat la partida"
break
#Selecionar jugada
if posicio == "J":
print "Indica les coordenades per una posicio SENSE mines"
columna = input ("Columna: ") -1
fila = input ("Fila: ") -1
if taulell_ocult[fila][columna]!="*":
taulell_visible[fila][columna]=taulell_ocult[fila][columna]
else:
print_taulell (taulell_ocult)
print "Has perdut"
break
print_taulell (taulell_visible)
print "Et queden",MINES-suma,"mines"
print "\n"
else:
raw_input()
Quizás no sea la solución más sofisticada, pero esto es lo que uso regularmente para 'medir' el tiempo que demora en correr un algoritmo. Aquí va:
import time
# start measuring time
start = time.time()
# task to measure
l = [x for x in range(1000000)]
# end measuring time
end = time.time()
# getting elapsed time
time_elapsed = end - start
time_in_miliseconds = time_elapsed * 1000
# printing information
print 'time elapsed:\t{}'.format(time_elapsed)
print 'time elapsed:\t{} ms'.format(time_in_miliseconds)
Espero que te sirva.
PD: Lo puse en texto plano porque no tengo ni idea de cómo poner un snippet de código en el post.
Mod: código modificado, para colocarlo como código debes usar las etiquetas GeSHi
from time import time
def inicio(): #inicio del tiempo
global inicio_tiempo #hay que declarar la variable como global
inicio_tiempo = time() #captura tiempo
def terminado():
global tiempo_pasado
tiempo_pasado= time() - inicio_tiempo
if tiempo_pasado > 60:
minutos=(tiempo_pasado %3600 /60)
print("minutos %d " %minutos)
else:
print("segundos: %.2f seconds." % tiempo_pasado)
def Ordenar():
Ranking=["3 : Ricardo","9 : Alejandra","1 : El Mejor","6: Otro"] #crear una lista con el tiempo y nombre
Ranking.sort() #ordenar la lista
print(Ranking)
inicio() #inicio del tiempo
iniciar = input("Nombre del Jugador: ") #acá van las funciones que controlan el inicio y final
terminar = input("Terminar ") #en este caso mide el tiempo entre que escribís el nombre y el enter de terminar
terminado() #una idea de como mostrar el tiempo
Ordenar() #obvio que creas un txt con los ganadores y después al leerlos creas una lista #despues de ordenarla solo mostrśs los 5 primeros en caso de que haya más
para ordenar creas listas y listo
'''
Autor: JaAViEr|0x5d
Twitter: @javieresteban__
Website: http://www.codigo.ga
'''
from time import sleep
import threading
class Timer(threading.Thread):
def __init__(self, tiempo):
threading.Thread.__init__(self)
self.tiempo = tiempo
self.status = True
def run(self):
for i in range(self.tiempo):
sleep(1)
self.status = False
tiempo = Timer(5)
tiempo.start()
n = raw_input("Nombre :> ")
if tiempo.status:
print "Tu nombre es", n
else:
print "Tardaste mas de 5 segundos en responder"
Un ejemplo usando Thread, así podemos ejecutar otra tarea mientras el tiempo se cuenta por separado.
Saludos.