lunes, 27 de mayo de 2019

Figuras 3D: Triángulo.

Se realizó una figura en 3D que dé vueltas en pantalla con la librería OpenGL. Es necesario instalarla con el uso de la herramienta pip.

 
       
import pygame
from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *

verticies = (
    (1, -1, -1),
    (1, 1, -1),
    (-1, 1, -1),
    (-1, -1, -1),
    (0,0,1)

    )

edges = (
    (4,0),
    (4,1),
    (4,2),
    (4,3),
    (0,1),
    (0,3),
    (2,1),
    (2,3)

    )


def Cube():
    glBegin(GL_LINES)
    for edge in edges:
        for vertex in edge:
            glVertex3fv(verticies[vertex])
    glEnd()


def main():
    pygame.init()
    display = (800,600)
    pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

    gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)

    glTranslatef(0.0,0.0, -5)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        glRotatef(1, 3, 1, 1)
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
        Cube()
        pygame.display.flip()
        pygame.time.wait(10)


main()
       


Loteria con hilos.

Se realizo una lotería 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 * # GUI,botones,label,menu,entry,tk,frame etc
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 + "/Cartas/"  # establece la ruta hacia las imagenes de cartas
Csonido = dir + "/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)
        print nombre
        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()
#ventana.config("500x500")#con config y Bg es al fondo color
contenedor = Frame(ventana, width=700, height=700,bg='light steel blue') # poner un frame arriba del marco o ventana TK
contenedor.pack()#para cargar ventana y frame

Etitulo = Label(contenedor, bg="light steel blue", text="Loteria Mexicana", font=("Calibri", 40, "bold"),fg='White').place(x=140, y=20)

Etiempo = Label(contenedor, bg="light steel blue", text="Tiempo entre cartas: ", font=("Calibri", 13, "bold"),fg='white')
Etiempo.place(x=130, y=100)

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

Limagen = Label(contenedor)
Limagen.place(x=300, y=180)

TBoton = StringVar()
TBoton.set("Jugar")
Bplay = Button(contenedor, bg="LightGreen", textvariable=TBoton, command=play,fg='white')
Bplay.place(x=500, y=98)

Tetiqueta = StringVar()
Enombre = Label(contenedor, textvariable=Tetiqueta, font=("Calibri", 40, "bold",),fg='LightGreen')
Enombre.place(x=80, y=400)
pygame.init()

ventana.mainloop()
       

miércoles, 8 de mayo de 2019

Imagenes con sonido.

Programa que despliega una imagen, un audio describiéndola así como una etiqueta.


       
from Tkinter import *  # para crear la GUI
from PIL import Image, ImageTk  # despliegue de imagenes
import os  # para dar una ruta path de una carpeta o directorio
import random  # para seleccionar y dar numeros aleatorios
import pygame
import threading

dir = os.path.dirname(__file__)  # lo utilizo para dar una ruta de donde estan mis imagenes
fotos = dir + "/Imagenes/"
Csonido = dir + "/Sonidos/"  # establece la ruta hacia los sonidos
root = Tk()  # lo uso para la ventana de app de tkinter

arreglo = [1, 2, 3, 4, 5, 6, 7, 8]  # crear un areglo con el numero de las imagenes
eleccion_aleatoria = str(
    arreglo.index(random.choice(arreglo)) + 1)  # se toma un elemento del array al azar y se hace string
figura = fotos + eleccion_aleatoria + ".png"  # asignas la extension png a al imagen
sonido = Csonido + eleccion_aleatoria + ".mp3"


def reproducirsonido(sonido):
    pygame.init()
    pygame.mixer.music.load(sonido)
    pygame.mixer.music.play()


# Como despliego el archivo en la ventana tk
img = Image.open(figura)  # va a la ruta de la imagen y la abre
tkimage = ImageTk.PhotoImage(img)  # despliega la imagen
etiqueta = Label(root, image=tkimage, command=reproducirsonido(sonido))  # la imagen se pone en una etiqueta
etiqueta.pack()  # la etiqueta se despliega

imagenes = ["Cat", "Dog", "House", "Pencil", "Holy Hand Granade", "3D", "Flower", "Car"]
nombre_img = Label(text=imagenes[int(eleccion_aleatoria) - 1], font=("Times New Roman", 20, "bold")).place(x=100, y=300)

root.geometry("500x500")
root.mainloop()