Advertisement
Guest User

Jackpot game by Jen

a guest
Nov 28th, 2011
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 17.86 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. # Nombre del programa: 'Jackpot.py'
  5.  
  6. # Intérprete: Python 3.x
  7.  
  8. # Desarrollador: Jen
  9.  
  10. # Contacta con el desarrollador en: jen.development@gmail.com
  11.  
  12. # Licencia: Creative Commons Reconocimiento-CompartirIgual 3.0 Unported. (http://creativecommons.org/licenses/by-sa/3.0/)
  13.  
  14. # Función: El programa simula un “jackpot”. Con menú principal, sistema de aciertos, "ranking" del ordenador, mejor puntuación
  15. # guardada, sistema de vidas y cuando falla el usuario; se le indica si el número premiado es mayor o menor. La elección
  16. # del número premiado es aleatoria gracias a la librería random. Las vidas son proporcionales al rango máximo para que
  17. # sea cual sea este haya posibilidades parecidas. Las puntuaciones se escriben cifradas en el archivo 'users.txt'.
  18.  
  19. # Posibles mejoras:
  20. # - Incorporar mejor puntuación de sesión.
  21. # - Consultas de la major puntuación y el "ranking" "on cloud" para evitar su modificación y poder llevar un ranking mundial.
  22. # - Salida de error por si se introduce un caracter especial en rango o numero escogido.
  23. # - Sistema de vidas con posiblidades más parecidas independientemente del rango máximo elegido.
  24.  
  25. ##############################################################################################################################
  26.  
  27.  
  28. import random
  29. import os
  30.  
  31. # -------  Funciones
  32.  
  33.  
  34. def comprobar_archivo():
  35.     if os.path.exists("users.txt"):
  36.         existe=True
  37.     else:
  38.         existe=False
  39.         open("users.txt","w")
  40.     return existe
  41.    
  42.  
  43. def formar_list(existe):
  44.     if(existe == True):
  45.         archivo = open("users.txt","r")
  46.         linea_users=archivo.readline()
  47.         lista=[]
  48.         while(linea_users != ""):
  49.             letra_cod=3
  50.             nombre=""
  51.             puntuacion=""
  52.             while(True):
  53.                 nombre = nombre+linea_users[letra_cod]
  54.                 if(linea_users[letra_cod+5] == "r" or linea_users[letra_cod+5] == "y" or linea_users[letra_cod+5] == "v"):
  55.                     break
  56.                 letra_cod=letra_cod+4
  57.             letra_cod=letra_cod+9
  58.             puntuacion=puntuacion+linea_users[letra_cod]
  59.             while(True):
  60.                 if(linea_users[letra_cod+3] == "r" or linea_users[letra_cod+3] == "y" or linea_users[letra_cod+3] == "v"):
  61.                     letra_cod=letra_cod+2
  62.                     puntuacion=puntuacion+linea_users[letra_cod]
  63.                 else:
  64.                     break
  65.             lista = lista + [[nombre,puntuacion]]
  66.             linea_users=archivo.readline()
  67.         archivo.close()
  68.     else:
  69.         lista = []
  70.     return lista
  71.  
  72.  
  73. def comp_MPGuardada(lista):
  74.     mejor_Naciertos=0
  75.     for y in lista:
  76.        
  77.         if(nombre_user in y):
  78.             mejor_Naciertos=int(y[1])  
  79.             break
  80.         else:
  81.             mejor_Naciertos=0
  82.     return mejor_Naciertos
  83.  
  84.  
  85. def escribir_archivo(lista):
  86.     lista = lista
  87.     presente=False
  88.     for b in lista:
  89.         if(nombre_user in b):
  90.             presente=True
  91.             break
  92.         else:
  93.             presente=False
  94.                
  95.     if(presente == True):
  96.         for y in lista:
  97.             if(nombre_user in y):
  98.                 y[1] = str(aciertos)
  99.                
  100.         archivo = open("users.txt","w")
  101.         for parejas in lista:
  102.             for letras in parejas[0]:
  103.                 archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  104.                 archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  105.                 archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  106.                 archivo.write(letras)
  107.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  108.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  109.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  110.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  111.             archivo.write(random.choice("ryv"))
  112.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  113.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  114.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  115.             for letra in parejas[1]:
  116.                 archivo.write(letra)
  117.                 archivo.write(random.choice("ryv"))
  118.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  119.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  120.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890")+"\n")
  121.         archivo.close()
  122.        
  123.        
  124.     elif(presente == False):
  125.         archivo = open("users.txt","a")
  126.         nombre_usercod = ""
  127.         for nletras in nombre_user:
  128.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  129.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  130.             archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  131.             archivo.write(nletras)
  132.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  133.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  134.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  135.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  136.         archivo.write(random.choice("ryv"))
  137.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  138.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  139.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  140.         for digitos in str(aciertos):
  141.             archivo.write(digitos)
  142.             archivo.write(random.choice("ryv"))
  143.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  144.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890"))
  145.         archivo.write(random.choice("abcdefghijklmnopqstuwxz1234567890")+"\n")
  146.         archivo.close()
  147.         lista = lista + [[nombre_user,str(aciertos)]]
  148.  
  149.    
  150. # -------  /Funciones
  151.    
  152.  
  153. # -------  ANCI art
  154. print("                                                           .............. ......\n"+
  155. "                                                           . ........,=?+?I$?. .\n"+
  156. "                                                           . .?788DOZZ8888OZ8...\n"+
  157. "                                                   ..........,Z88~.?$$O=..=I8...\n"+
  158. "                                                  ...,+?7....=O$+..=$$OI.7$$8...\n"+
  159. "                            ......  ....  ..    ....+D8OZ$7..~$$ZZ.~$$88.?8O8...\n"+
  160. "                         .. .,8$I,.......... .....,?88..:$$Z..88O+.~$ZOO. ....  \n"+
  161. "                         ......?8O8....,??I+......?ZO....ZZZ$......=$$OO...     \n"+
  162. "    ....        ..........:?Z.?88.++?$888OZZZ....=ZO8. ..+$$O......=Z$OO        \n"+
  163. "    .=8..         ...:.+$Z888:8O..8Z$ZO....?ZZ...I$8= ...,$ZZ~.....~$$O8        \n"+
  164. "    .I8I.      ......8.?O$O$.?O$...:$$O.....$Z~..7Z8......$ZZ8.....:Z$O8        \n"+
  165. "    .78I..... . .?Z8ZO .:$OZ?8O....:$$O.....IZD.~$ZO .. ..7$$O.. ..:$ZO8        \n"+
  166. "    .,8.........+O88I8..:ZO7O8. ...,$$8..  .,$O.?$ZO .....7Z$O.... ,$$OO        \n"+
  167. "    ..IZ$..?I$..I8$..8..:Z$?Z,......$$8~.....$8,I$ZO......I$$O. ...,$$OO        \n"+
  168. "    .+8O.:?Z8..=ZO..=8..~Z$$ZO......$$O:....,ZO,7ZZO..... IZ$O.....,$$OO        \n"+
  169. "    .I8$.?$$O..?O8......:Z8Z$Z, ....7$O+7Z?.+88.7Z$O......I$O8.....~$$ZO.       \n"+
  170. "    .,OZ.~$Z8..IO?......,ZOO$$O.....7$O$ZZI.?8:.:Z$O.. ...7Z8O.....~Z$ZO....    \n"+
  171. "    .,OO.787O.=I8...... ,$O8$$ZZ....7$O$:O8DOZ...$$Z$.. .,$$8......,$$ZO.....   \n"+
  172. "    ..OO.IOZO~~78.......,$O8.$ZZ....7$8O..+=.....7Z$8....I$88. ..?+IOOODD88.    \n"+
  173. "    ..O8.IOOZ$I$O.......,$O8.$$Z8...7$OZ..     ...$ZZ....78O.. ..D888I=, ..     \n"+
  174. "    ..O8.I8I$87Z8..IO...,$O8..$$Z,..7$O8..    .....OZZ..?8O$.... ...            \n"+
  175. "    ..O8.78I$O?$O..7$$..~ZO8..I$$O.:I$O8..    ......O8ZOD8.... ... .. ..        \n"+
  176. "......O8+78OIO,7O,..78..~$O8...ZZ$D87ZO8..        ....II...                     \n"+
  177. ". ....OO778.$O.7Z?..7Z..~$OII..+8OO?7$O8..         ....  ...                    \n"+
  178. "...=8$88,$8.7O~7Z8..O++$DD8O87DO8...7ZZO=,           .... .                     \n"+
  179. "..,OOOO8:Z8.~ZZ.Z$?$O..7~.....?...?78D88ZO.                                     \n"+
  180. "..IO7ZO8=Z8.,$O+.ODO:.............DD+....                                       \n"+
  181. "..7ODOO8?ZZ8.ZDO.....                                                           \n"+
  182. "..7O=~8OO8$.7Z$.. .                                                             \n"+
  183. "..?Z.IO,....8....                                                               \n"+
  184. "...OIDO.  . .                                                                   \n"+
  185. "........                                                                        \n"+
  186. "........                                                                        \n\n"+
  187. "--------------------------------------------------------------------------------\n\n"+
  188. "                'El popular juego de azar llevado a un terminal'                \n\n"+
  189. "--------------------------------------------------------------------------------")
  190. # -------  /ANCI art
  191.  
  192.  
  193. # -------  Cuerpo
  194.  
  195. existe = comprobar_archivo()
  196.  
  197. while(True):
  198.     print("\n[^]MENU DE INICIO:")
  199.     menu_inicio=input("Escribe 'exit', 'autor', 'manual', 'rank' o 'play': ")
  200.    
  201.  
  202.     if(menu_inicio == "play"):
  203.         nombre_user=input("Nombre de usuario: ")
  204.  
  205.         print("\n(RECUERDA: El rango empezara desde 1 y el numero que se tomara como máximo debe ser igual o mayor que 3)")
  206.         while(True):        
  207.             rango_max=input("*Introduce un numero que se tomara como máximo en la elección aleatoria del numero premiado: ")
  208.             if(rango_max == ""):
  209.                         print("\nNo puede dejar el campo en blanco.")
  210.             elif(int(rango_max) < 3):
  211.                   print("\nEl número que se tomara como máximo no puede ser menor de 3!\n")
  212.             else:
  213.                 break
  214.              
  215.         num_prem = random.randint(1,int(rango_max))
  216.         vidas=int(rango_max) // 3
  217.         contador=vidas
  218.         print("\nVidas:"+(contador *"<3")+"\n")
  219.         aciertos=0
  220.         print("Aciertos:"+str(aciertos))
  221.  
  222.         while(True):
  223.            
  224.             if(contador == 0): #Si el jugador se queda sin vidas
  225.                 print("\n********** GAME OVER ***********\n")
  226.                 while(True):        
  227.                     rango_max = input("*Introduce '@' para salir al menú de inicio o pon un nuevo rango máximo para el numero aleatorio: ")
  228.                     if(rango_max == "@"):
  229.                         break
  230.                     elif(rango_max == ""):
  231.                         print("\nNo puede dejar el campo en blanco.")
  232.                        
  233.                     elif(int(rango_max) < 3):
  234.                         print("\nEl número que se tomara como máximo no puede ser menor de 3!")
  235.                     else:
  236.                         break
  237.  
  238.                 if(rango_max == "@"):
  239.                     break
  240.                 num_prem = random.randint(1,int(rango_max))
  241.                 vidas=int(rango_max) // 3
  242.                 contador=vidas
  243.                 print("\nVidas:"+(contador *"<3")+"\n")
  244.                 aciertos=0
  245.                 print("Aciertos:"+(str(aciertos))+"\n")
  246.  
  247.            
  248.             valor1=input("Introduce tu número de la suerte: ") #Introduce número escogido
  249.             escogido=int(valor1)
  250.             if(escogido < 1 or escogido > int(rango_max)):
  251.                 print("Pon un número dentro del rango escogido.")
  252.  
  253.            
  254.             elif(escogido == num_prem): #Si el número escogido es el número premiado
  255.                 print("\n!!!Enhorabuena!!! Es el ganador de un bielorussa de grandes tetas, 100.000€ por ser nuestro ganador nº1000 y un ferrari!!!\n")
  256.                 aciertos=aciertos+1
  257.                 print("Aciertos:"+(str(aciertos))+"\n")
  258.                 try:
  259.                     lista = formar_list(existe)
  260.                    
  261.                     mejor_Naciertos=comp_MPGuardada(lista)
  262.  
  263.                     if(aciertos > mejor_Naciertos):
  264.                         escribir_archivo(lista)
  265.                         mejor_Naciertos = aciertos
  266.        
  267.                         print("Acabas de batir tu record de aciertos!")
  268.                         print("\n[,,,]Puntuación guardada")
  269.                 except:
  270.                     print("\nERROR: No se ha podido acceder a la mejor puntuación guardada, el problema \n"+
  271.                           "puede deberse a una modificación del archivo \"users.txt\", borre el archivo\n"+
  272.                           " y se solucionara, no obstante perderá todas las partidas guardadas.\n"+
  273.                           "(El programa seguirá ejecutándose sin esta utilidad.)\n")
  274.                
  275.                            
  276.                 while(True):        
  277.                     rango_max = input("*Introduce '@' para salir al menú de inicio o pon un nuevo rango máximo para el numero aleatorio: ")
  278.                     if(rango_max == "@"):
  279.                         break
  280.                     elif(rango_max == ""):
  281.                         print("\nNo puede dejar el campo en blanco.")
  282.  
  283.                     elif(int(rango_max) < 3):
  284.                         print("\nEl número que se tomara como máximo no puede ser menor de 3!")
  285.                     else:
  286.                         break
  287.                 if(rango_max == "@"):
  288.                     break
  289.                 num_prem = random.randint(1,int(rango_max))
  290.                 vidas=int(rango_max) // 3
  291.                 contador=vidas
  292.                 print("\nVidas:"+(contador *"<3")+"\n")
  293.                 print("Aciertos:"+(str(aciertos))+"\n")
  294.                 continue
  295.                
  296.  
  297.             elif(escogido < num_prem): #Si el número premiado es mayor
  298.                 print("El número que buscas es mayor. ;)")
  299.                 contador=contador-1
  300.                 print("\nVidas:"+(contador *"<3")+"\n")
  301.                 print("Aciertos:"+(str(aciertos))+"\n")
  302.                
  303.             elif(escogido > num_prem):#Si el número premiado es menor
  304.                 print("¡Frena, te has pasado!")
  305.                 contador=contador-1
  306.                 print("\nVidas:"+(contador *"<3")+"\n")
  307.                 print("Aciertos:"+(str(aciertos))+"\n")
  308.  
  309.  
  310.  
  311.     elif(menu_inicio == "rank"):
  312.         try:
  313.             print("\nRANKING")
  314.             print("-------------------------------------------------------------------------------\n")
  315.             listaOrdenada = []
  316.             lista = formar_list(existe)
  317.             for pares in lista:
  318.                 listaOrdenada = listaOrdenada + [int(pares[1])]
  319.             listaOrdenada.sort()
  320.             listaOrdenada.reverse()
  321.             posicion=1
  322.             for puntuac in range(0, len(listaOrdenada)):
  323.                 if(listaOrdenada[puntuac] == listaOrdenada[puntuac-1] and puntuac != 0):
  324.                     continue
  325.                 for nombres in lista:
  326.                     if(str(listaOrdenada[puntuac]) == nombres[1]):
  327.                         print(str(posicion)+"nº "+nombres[0]+" "+((30-len(nombres[0])) * "-")+"> "+nombres[1]+" aciertos")
  328.                 posicion = posicion + 1
  329.         except:
  330.             print("\nERROR: No se ha podido acceder a la mejor puntuación guardada, el problema \n"+
  331.                   "puede deberse a una modificación del archivo \"users.txt\", borre el archivo\n"+
  332.                   " y se solucionara, no obstante perderá todas las partidas guardadas.\n"+
  333.                   "(El programa seguirá ejecutándose sin esta utilidad.)\n")
  334.            
  335.  
  336.  
  337.     elif(menu_inicio == "autor"):
  338.         print("\n-------------------------------------------------------------------------------")
  339.         print("\tPrograma echo por: Jen")
  340.         print("\tContacta con el desarrollador en: jen.development@gmail.com")
  341.  
  342.         print("\nQuiero agradecer a toda la gente que hace que a dia de hoy no sea tan difícil \n"+
  343.               "acceder a información. A las personas que hacen sus programas y liberan el \n"+
  344.               "código para que otros puedan aprender con ello, como el autor de la librería que \n"+
  345.               "he usado para poder hacer este programa. Y a la multitud de comunidades de \n"+
  346.               "internet que te reciben con los brazos abiertos y ayudan en lo que pueden.")                                                                                                    
  347.         print("-------------------------------------------------------------------------------\n")
  348.        
  349.  
  350.  
  351.     elif(menu_inicio == "manual"):
  352.         print("\n-------------------------------------------------------------------------------")
  353.         print("En el menú de inicio puedes escoger entre:\n")
  354.  
  355.         print("autor: para saber quién es el desarrollador del programa y como contactar con el")
  356.         print("rank: Te mostrara el ranking del ordenador.")
  357.         print("play: Para jugar.")
  358.         print("exit: Para salir del programa.\n")
  359.  
  360.         print("[^] Como se juega:")
  361.         print("1 - Introduce un nombre de usuario.")
  362.         print("2 - Escoge un rango máximo que se utilizara para seleccionar el número premiado y\n"+
  363.               "determinara tu número de vidas.")
  364.         print("3 - Introduce tu número y prueba suerte.")
  365.         print("4 - Síguelo intentando mientras tengas vidas, el programa te ira indicando si el\n"+
  366.               " número premiado es mayor o menor.")
  367.         print("5 -  Si te quedas sin vidas puedes salir del programa y probar suerte\n"+
  368.               "otro día o volver a empezar.\n")
  369.  
  370.         print("¡Marca tu record en tu ordenador y que nadie te gane!")
  371.         print("-------------------------------------------------------------------------------\n")
  372.  
  373.  
  374.     elif(menu_inicio == "exit"):
  375.         break        
  376. # -------  /Cuerpo            
  377.  
  378. print("Ha salido del programa.")
  379.  
  380.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement