Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # Nombre del programa: 'Jackpot.py'
- # Intérprete: Python 3.x
- # Desarrollador: Jen
- # Contacta con el desarrollador en: jen.development@gmail.com
- # Licencia: Creative Commons Reconocimiento-CompartirIgual 3.0 Unported. (http://creativecommons.org/licenses/by-sa/3.0/)
- # Función: El programa simula un “jackpot”. Con menú principal, sistema de aciertos, "ranking" del ordenador, mejor puntuación
- # guardada, sistema de vidas y cuando falla el usuario; se le indica si el número premiado es mayor o menor. La elección
- # del número premiado es aleatoria gracias a la librería random. Las vidas son proporcionales al rango máximo para que
- # sea cual sea este haya posibilidades parecidas. Las puntuaciones se escriben cifradas en el archivo 'users.txt'.
- # Posibles mejoras:
- # - Incorporar mejor puntuación de sesión.
- # - Consultas de la major puntuación y el "ranking" "on cloud" para evitar su modificación y poder llevar un ranking mundial.
- # - Salida de error por si se introduce un caracter especial en rango o numero escogido.
- # - Sistema de vidas con posiblidades más parecidas independientemente del rango máximo elegido.
- ##############################################################################################################################
- import random
- import os
- # ------- Funciones
- def comprobar_archivo():
- if os.path.exists("users.txt"):
- existe=True
- else:
- existe=False
- open("users.txt","w")
- return existe
- def formar_list(existe):
- if(existe == True):
- archivo = open("users.txt","r")
- linea_users=archivo.readline()
- lista=[]
- while(linea_users != ""):
- letra_cod=3
- nombre=""
- puntuacion=""
- while(True):
- nombre = nombre+linea_users[letra_cod]
- if(linea_users[letra_cod+5] == "r" or linea_users[letra_cod+5] == "y" or linea_users[letra_cod+5] == "v"):
- break
- letra_cod=letra_cod+4
- letra_cod=letra_cod+9
- puntuacion=puntuacion+linea_users[letra_cod]
- while(True):
- if(linea_users[letra_cod+3] == "r" or linea_users[letra_cod+3] == "y" or linea_users[letra_cod+3] == "v"):
- letra_cod=letra_cod+2
- puntuacion=puntuacion+linea_users[letra_cod]
- else:
- break
- lista = lista + [[nombre,puntuacion]]
- linea_users=archivo.readline()
- archivo.close()
- else:
- lista = []
- return lista
- def comp_MPGuardada(lista):
- mejor_Naciertos=0
- for y in lista:
- if(nombre_user in y):
- mejor_Naciertos=int(y[1])
- break
- else:
- mejor_Naciertos=0
- return mejor_Naciertos
- def escribir_archivo(lista):
- lista = lista
- presente=False
- for b in lista:
- if(nombre_user in b):
- presente=True
- break
- else:
- presente=False
- if(presente == True):
- for y in lista:
- if(nombre_user in y):
- y[1] = str(aciertos)
- archivo = open("users.txt","w")
- for parejas in lista:
- for letras in parejas[0]:
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(letras)
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("ryv"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- for letra in parejas[1]:
- archivo.write(letra)
- archivo.write(random.choice("ryv"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890")+"\n")
- archivo.close()
- elif(presente == False):
- archivo = open("users.txt","a")
- nombre_usercod = ""
- for nletras in nombre_user:
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(nletras)
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("ryv"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- for digitos in str(aciertos):
- archivo.write(digitos)
- archivo.write(random.choice("ryv"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
- archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890")+"\n")
- archivo.close()
- lista = lista + [[nombre_user,str(aciertos)]]
- # ------- /Funciones
- # ------- ANCI art
- print(" .............. ......\n"+
- " . ........,=?+?I$?. .\n"+
- " . .?788DOZZ8888OZ8...\n"+
- " ..........,Z88~.?$$O=..=I8...\n"+
- " ...,+?7....=O$+..=$$OI.7$$8...\n"+
- " ...... .... .. ....+D8OZ$7..~$$ZZ.~$$88.?8O8...\n"+
- " .. .,8$I,.......... .....,?88..:$$Z..88O+.~$ZOO. .... \n"+
- " ......?8O8....,??I+......?ZO....ZZZ$......=$$OO... \n"+
- " .... ..........:?Z.?88.++?$888OZZZ....=ZO8. ..+$$O......=Z$OO \n"+
- " .=8.. ...:.+$Z888:8O..8Z$ZO....?ZZ...I$8= ...,$ZZ~.....~$$O8 \n"+
- " .I8I. ......8.?O$O$.?O$...:$$O.....$Z~..7Z8......$ZZ8.....:Z$O8 \n"+
- " .78I..... . .?Z8ZO .:$OZ?8O....:$$O.....IZD.~$ZO .. ..7$$O.. ..:$ZO8 \n"+
- " .,8.........+O88I8..:ZO7O8. ...,$$8.. .,$O.?$ZO .....7Z$O.... ,$$OO \n"+
- " ..IZ$..?I$..I8$..8..:Z$?Z,......$$8~.....$8,I$ZO......I$$O. ...,$$OO \n"+
- " .+8O.:?Z8..=ZO..=8..~Z$$ZO......$$O:....,ZO,7ZZO..... IZ$O.....,$$OO \n"+
- " .I8$.?$$O..?O8......:Z8Z$Z, ....7$O+7Z?.+88.7Z$O......I$O8.....~$$ZO. \n"+
- " .,OZ.~$Z8..IO?......,ZOO$$O.....7$O$ZZI.?8:.:Z$O.. ...7Z8O.....~Z$ZO.... \n"+
- " .,OO.787O.=I8...... ,$O8$$ZZ....7$O$:O8DOZ...$$Z$.. .,$$8......,$$ZO..... \n"+
- " ..OO.IOZO~~78.......,$O8.$ZZ....7$8O..+=.....7Z$8....I$88. ..?+IOOODD88. \n"+
- " ..O8.IOOZ$I$O.......,$O8.$$Z8...7$OZ.. ...$ZZ....78O.. ..D888I=, .. \n"+
- " ..O8.I8I$87Z8..IO...,$O8..$$Z,..7$O8.. .....OZZ..?8O$.... ... \n"+
- " ..O8.78I$O?$O..7$$..~ZO8..I$$O.:I$O8.. ......O8ZOD8.... ... .. .. \n"+
- "......O8+78OIO,7O,..78..~$O8...ZZ$D87ZO8.. ....II... \n"+
- ". ....OO778.$O.7Z?..7Z..~$OII..+8OO?7$O8.. .... ... \n"+
- "...=8$88,$8.7O~7Z8..O++$DD8O87DO8...7ZZO=, .... . \n"+
- "..,OOOO8:Z8.~ZZ.Z$?$O..7~.....?...?78D88ZO. \n"+
- "..IO7ZO8=Z8.,$O+.ODO:.............DD+.... \n"+
- "..7ODOO8?ZZ8.ZDO..... \n"+
- "..7O=~8OO8$.7Z$.. . \n"+
- "..?Z.IO,....8.... \n"+
- "...OIDO. . . \n"+
- "........ \n"+
- "........ \n\n"+
- "--------------------------------------------------------------------------------\n\n"+
- " 'El popular juego de azar llevado a un terminal' \n\n"+
- "--------------------------------------------------------------------------------")
- # ------- /ANCI art
- # ------- Cuerpo
- existe = comprobar_archivo()
- while(True):
- print("\n[^]MENU DE INICIO:")
- menu_inicio=input("Escribe 'exit', 'autor', 'manual', 'rank' o 'play': ")
- if(menu_inicio == "play"):
- nombre_user=input("Nombre de usuario: ")
- print("\n(RECUERDA: El rango empezara desde 1 y el numero que se tomara como máximo debe ser igual o mayor que 3)")
- while(True):
- rango_max=input("*Introduce un numero que se tomara como máximo en la elección aleatoria del numero premiado: ")
- if(rango_max == ""):
- print("\nNo puede dejar el campo en blanco.")
- elif(int(rango_max) < 3):
- print("\nEl número que se tomara como máximo no puede ser menor de 3!\n")
- else:
- break
- num_prem = random.randint(1,int(rango_max))
- vidas=int(rango_max) // 3
- contador=vidas
- print("\nVidas:"+(contador *"<3")+"\n")
- aciertos=0
- print("Aciertos:"+str(aciertos))
- while(True):
- if(contador == 0): #Si el jugador se queda sin vidas
- print("\n********** GAME OVER ***********\n")
- while(True):
- rango_max = input("*Introduce '@' para salir al menú de inicio o pon un nuevo rango máximo para el numero aleatorio: ")
- if(rango_max == "@"):
- break
- elif(rango_max == ""):
- print("\nNo puede dejar el campo en blanco.")
- elif(int(rango_max) < 3):
- print("\nEl número que se tomara como máximo no puede ser menor de 3!")
- else:
- break
- if(rango_max == "@"):
- break
- num_prem = random.randint(1,int(rango_max))
- vidas=int(rango_max) // 3
- contador=vidas
- print("\nVidas:"+(contador *"<3")+"\n")
- aciertos=0
- print("Aciertos:"+(str(aciertos))+"\n")
- valor1=input("Introduce tu número de la suerte: ") #Introduce número escogido
- escogido=int(valor1)
- if(escogido < 1 or escogido > int(rango_max)):
- print("Pon un número dentro del rango escogido.")
- elif(escogido == num_prem): #Si el número escogido es el número premiado
- print("\n!!!Enhorabuena!!! Es el ganador de un bielorussa de grandes tetas, 100.000€ por ser nuestro ganador nº1000 y un ferrari!!!\n")
- aciertos=aciertos+1
- print("Aciertos:"+(str(aciertos))+"\n")
- try:
- lista = formar_list(existe)
- mejor_Naciertos=comp_MPGuardada(lista)
- if(aciertos > mejor_Naciertos):
- escribir_archivo(lista)
- mejor_Naciertos = aciertos
- print("Acabas de batir tu record de aciertos!")
- print("\n[,,,]Puntuación guardada")
- except:
- print("\nERROR: No se ha podido acceder a la mejor puntuación guardada, el problema \n"+
- "puede deberse a una modificación del archivo \"users.txt\", borre el archivo\n"+
- " y se solucionara, no obstante perderá todas las partidas guardadas.\n"+
- "(El programa seguirá ejecutándose sin esta utilidad.)\n")
- while(True):
- rango_max = input("*Introduce '@' para salir al menú de inicio o pon un nuevo rango máximo para el numero aleatorio: ")
- if(rango_max == "@"):
- break
- elif(rango_max == ""):
- print("\nNo puede dejar el campo en blanco.")
- elif(int(rango_max) < 3):
- print("\nEl número que se tomara como máximo no puede ser menor de 3!")
- else:
- break
- if(rango_max == "@"):
- break
- num_prem = random.randint(1,int(rango_max))
- vidas=int(rango_max) // 3
- contador=vidas
- print("\nVidas:"+(contador *"<3")+"\n")
- print("Aciertos:"+(str(aciertos))+"\n")
- continue
- elif(escogido < num_prem): #Si el número premiado es mayor
- print("El número que buscas es mayor. ;)")
- contador=contador-1
- print("\nVidas:"+(contador *"<3")+"\n")
- print("Aciertos:"+(str(aciertos))+"\n")
- elif(escogido > num_prem):#Si el número premiado es menor
- print("¡Frena, te has pasado!")
- contador=contador-1
- print("\nVidas:"+(contador *"<3")+"\n")
- print("Aciertos:"+(str(aciertos))+"\n")
- elif(menu_inicio == "rank"):
- try:
- print("\nRANKING")
- print("-------------------------------------------------------------------------------\n")
- listaOrdenada = []
- lista = formar_list(existe)
- for pares in lista:
- listaOrdenada = listaOrdenada + [int(pares[1])]
- listaOrdenada.sort()
- listaOrdenada.reverse()
- posicion=1
- for puntuac in range(0, len(listaOrdenada)):
- if(listaOrdenada[puntuac] == listaOrdenada[puntuac-1] and puntuac != 0):
- continue
- for nombres in lista:
- if(str(listaOrdenada[puntuac]) == nombres[1]):
- print(str(posicion)+"nº "+nombres[0]+" "+((30-len(nombres[0])) * "-")+"> "+nombres[1]+" aciertos")
- posicion = posicion + 1
- except:
- print("\nERROR: No se ha podido acceder a la mejor puntuación guardada, el problema \n"+
- "puede deberse a una modificación del archivo \"users.txt\", borre el archivo\n"+
- " y se solucionara, no obstante perderá todas las partidas guardadas.\n"+
- "(El programa seguirá ejecutándose sin esta utilidad.)\n")
- elif(menu_inicio == "autor"):
- print("\n-------------------------------------------------------------------------------")
- print("\tPrograma echo por: Jen")
- print("\tContacta con el desarrollador en: jen.development@gmail.com")
- print("\nQuiero agradecer a toda la gente que hace que a dia de hoy no sea tan difícil \n"+
- "acceder a información. A las personas que hacen sus programas y liberan el \n"+
- "código para que otros puedan aprender con ello, como el autor de la librería que \n"+
- "he usado para poder hacer este programa. Y a la multitud de comunidades de \n"+
- "internet que te reciben con los brazos abiertos y ayudan en lo que pueden.")
- print("-------------------------------------------------------------------------------\n")
- elif(menu_inicio == "manual"):
- print("\n-------------------------------------------------------------------------------")
- print("En el menú de inicio puedes escoger entre:\n")
- print("autor: para saber quién es el desarrollador del programa y como contactar con el")
- print("rank: Te mostrara el ranking del ordenador.")
- print("play: Para jugar.")
- print("exit: Para salir del programa.\n")
- print("[^] Como se juega:")
- print("1 - Introduce un nombre de usuario.")
- print("2 - Escoge un rango máximo que se utilizara para seleccionar el número premiado y\n"+
- "determinara tu número de vidas.")
- print("3 - Introduce tu número y prueba suerte.")
- print("4 - Síguelo intentando mientras tengas vidas, el programa te ira indicando si el\n"+
- " número premiado es mayor o menor.")
- print("5 - Si te quedas sin vidas puedes salir del programa y probar suerte\n"+
- "otro día o volver a empezar.\n")
- print("¡Marca tu record en tu ordenador y que nadie te gane!")
- print("-------------------------------------------------------------------------------\n")
- elif(menu_inicio == "exit"):
- break
- # ------- /Cuerpo
- print("Ha salido del programa.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement