sábado, 25 de mayo de 2019

Loteria con hilos


import os #libreria para obtener rutas de direcciones en carpetas
import random # para generar numeros aleatorios
import threading #libreria para manejar hilos
from Tkinter import *
import PIL
from PIL import Image, ImageTk # tratar imagenes ,png
import time # para tiermpos o dormir o espera o wait en segundos
import pygame # para juegos 2D y 3d

"""Variables globales"""
imagen = 0
stop = 0
dir = os.path.dirname(__file__)
Ccartas = dir + "/loteria/Cartas/"  # establece la ruta hacia las imagenes de cartas
Csonido = dir + "/loteria/Sonidos/"  # establece la ruta hacia los sonidos
play = 1
"""--------------------------------------------------------"""


def
setimagen(nombre, x, y):  # carga la imagen
   
global imagen  # Declaro el uso de una variable global
   
img = Image.open(nombre)  # cargo la imagen mandada como parametro
   
img.thumbnail((x, y), Image.ANTIALIAS)  # establezco sus dimensiones y la propiedad antialiasado
   
imagen = ImageTk.PhotoImage(img)  # la convierto a un formato soportado por los widgets de tkinter
   
return imagen  # retorno el objeto con la imagen


def play():
    global stop, play, TBoton  # Declaro el uso de las variables stop y play
   
"""play: sirve para controlar la pulsasion del boton, si se pulsa una vez el boton jugar en pantalla deberia iniciar el juego
    pero si se vuelve a pulsar deberia detenerse y dado que se usa el mismo boton para ambas acciones la uso para controlar las acciones
    stop: se usa para controlar el hilo de ejecucion declarado, si stop vale 1 debera terminar el hilo, si vale 0 debera continuar hasta que se le indique"""
    if
play == 1:
        TBoton.set("Pausar")
        t = threading.Thread(target=hilo)
        t.start()
        stop = 0  # El hilo continua con normalidad
       
play = 0  # La proxima vez que se pulse el boton debera entrar en el else
   
else:
        TBoton.set("Jugar")
        play = 1  # La proxima vez que se pulse el boton debera entrar en el if
       
stop = 1  # Se detiene el hilo


def reproducirsonido(nombre):
    pygame.mixer.music.load(nombre)
    pygame.mixer.music.play()


def hilo():
    global tiempo, cartas, Limagen, stop, Tetiqueta, spin
    cartas = ["EL GALLO", "EL DIABLITO", "LA DAMA", "EL CATRIN", "EL PARAGUAS", "LA SIRENA", "LA ESCALERA",
              "LA BOTELLA", "EL BARRIL", "EL ARBOL", "EL MELON",
              "EL VALIENTE", "EL GORRITO", "LA MUERTE", "LA PERA", "LA BANDERA", "EL BANDOLON", "EL VIOLINCELLO",
              "LA GARZA", "EL PAJARO", "LA MANO", "LA BOTA",
              "LA LUNA", "EL COTORRO", "EL BORRACHO", "EL NEGRITO", "EL CORAZON", "LA SANDIA", "EL TAMBOR",
              "EL CAMARON", "LAS JARAS", "EL MUSICO", "LA ARANA",
              "EL SOLDADO", "LA ESTRELLA", "EL CAZO", "EL MUNDO", "EL APACHE", "EL NOPAL", "EL ALACRAN", "LA ROSA",
              "LA CALAVERA", "LA CAMPANA", "EL CANTARITO",
              "EL VENADO", "EL SOL", "LA CORONA", "LA CHALUPA", "EL PINO", "EL PESCADO", "LA PALMA", "LA MACETA",
              "EL ARPA", "LA RANA"]

    reproducirsonido(Csonido + "inicio.ogg")
    time.sleep(3)
    while True:
        nombre = str(cartas.index(random.choice(cartas)) + 1)
        carta = Ccartas + nombre + ".png"
       
Limagen.config(image=setimagen(carta, 400, 400))
        Tetiqueta.set("Salio: " + cartas[int(nombre) - 1])
        sonido = Csonido + "s_(" + nombre + ").ogg"
       
reproducirsonido(sonido)
        time.sleep(float(spin.get()))
        if stop == 1:
            break


ventana = Tk() #creamos un objeto ventana Tk()
contenedor = Frame(ventana, width=700, height=700) # poner un frame arriba del marco o ventana TK
contenedor.config(bg="light blue")
contenedor.pack()#para cargar ventana y frame

Etitulo = Label(contenedor, text="Loteria Mexicana", background="gray", font=("Century Gothic", 40, "bold")).place(x=120, y=20)

Etiempo = Label(contenedor, text="Tiempo entre cartas: ",background="gray", font=("Century Gothic", 12, "bold"))
Etiempo.place(x=130, y=100)

spin = Spinbox(contenedor, values=[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], font=("Arial", 12, "bold"))
spin.place(x=295, y=101)

Limagen = Label(contenedor)
Limagen.config(bg="gray")
Limagen.place(x=300, y=180)

TBoton = StringVar()
TBoton.set("Jugar")
Bplay = Button(contenedor,background="gray", textvariable=TBoton, command=play)
Bplay.place(x=500, y=98)

Tetiqueta = StringVar()
Enombre = Label(contenedor, textvariable=Tetiqueta, background="gray", font=("Arial", 40, "bold"))
Enombre.place(x=80, y=400)
pygame.init()
ventana.mainloop()





No hay comentarios.:

Publicar un comentario

Unidad 3 - Configuracion y Administracion del Espacio en Disco

3.1 Estructuras logicas de almacenamiento. Para la gestión del almacenamiento de una base de datos existen 4 conceptos bien definidos que ...