Practicas en clase (#10 al #20)

10- Juego de la lotería con interfaz gráfica (Programa de ambrocio)


Codigo: 

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,
import PIL
from PIL import Image, ImageTk      #tratar imagenes, gif,png
import time      #para tiempos,dormir,espera
import pygame    #para juegos 2D y figuras 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)
        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(bg="gray") #con config y Bg es al fondo color

contenedor = Frame(ventana, width=700, height=700) #frame arriba del marco o ventana
contenedor.pack() #para cargar ventana y frame

Etitulo = Label(contenedor, text="Loteria Mexicana", font=("Arial", 40, "bold")).place(x=120, y=20)
Etiempo = Label(contenedor, text="Tiempo entre cartas: ", font=("Arial", 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.place(x=300, y=180)

TBoton = StringVar()
TBoton.set("Jugar")

Bplay = Button(contenedor, textvariable=TBoton, command=play)
Bplay.place(x=500, y=98)

Tetiqueta = StringVar()
Enombre = Label(contenedor, textvariable=Tetiqueta, font=("Arial", 40, "bold"))
Enombre.place(x=80, y=400)

pygame.init()
ventana.mainloop()

11- Juego de BlackJack(Programa de Antonio Huerta)






Codigo:


#Librerias
import random
import time
 
#Variables Globales
global cartas
cartas = ["A",2,3,4,5,6,7,8,9,10,"J","Q","K"]
 
global nombrejugadores
nombrejugadores = []
 
#Funciones
def TurnoCartas(nombre):
    total = 0
    eleccion = 1
    i = 1
    deck = []
    print "-Turno de ",nombre,": "
 
    while (eleccion!=0 & total<21 0="" 11="" 1="" break="" deck.append="" elif="" else:="" i="" if="" ncarta="" numero="" numerosnaturales="[2,3,4,5,6,7,8,9,10]" por="" print="" que="" quieres="" return="" tenga="" time.sleep="" total="" tramposo="" tu="" u="" ue="" valor="">1):
            print "-Total: ", total,"\n"
 
        if(total<21 0="" 1="" 2="" 3="" 72="" artas:="" blackjack="" carta="" cartas="" deck.append="" deck="" def="" del="" el="" eleccion="0" elif="" else:="" es:="" for="" ganador2j="" ganador="" has="" hecho="" i="" if="" in="" inalizar="" jugador="" l="" mala="" mirar="" n="" nombre="" nombrejugadores.append="" nombrejugadores="" ntroduce="" numero="" numjugadores="" otra="" pedir="" perdido="" print="" range="" respuesta="=2):" return="" suerte="" time.sleep="" total="" turno="" tus="" un="" while="">J2):
        print nombre[0]," Con un Total de ",J1
    elif(J2>J1):
        print nombre[1]," Con un Total de ",J2
    elif(J1==J2):
        print "\nHay un EMPATE!! con un Total de ",J1," en Ambos Jugadores!!"
    else:
        print "\nLos 2 Jugadores PERDIERON!"
 
def Ganador3J(J1,J2,J3, nombre):
    print "El Ganador es: ",
    time.sleep(3)
 
    if (J1 > J2 and J1>J3):
        print nombre[0], " Con un Total de ", J1
    elif (J2 > J1 and J2>J3):
            print nombre[1], " Con un Total de ", J2
    elif (J3 > J1 and J3>J2):
            print nombre[2], " Con un Total de ", J3
    elif(J1==J2 and J1!=J3 and J2!=J3):
        print "\nHay un EMPATE!! entre ",nombre[0]," y ",nombre[1]," con un Total de ", J1, " en los Jugadores!!"
    elif (J2 == J3 and J2 != J1 and J3!=J1):
        print "\nHay un EMPATE!! entre ", nombre[1], " y ", nombre[2], " con un Total de ", J2, " en los Jugadores!!"
    elif (J1 == J3 and J1 != J2 and J3!=J2):
        print "\nHay un EMPATE!! entre ", nombre[0], " y ", nombre[2], " con un Total de ", J1, " en los Jugadores!!"
    elif (J1 == J2 and J2 == J3):
        print "\nHay un EMPATE!! con un Total de ", J1, " en TODOS los Jugadores!!"
    else:
        print "\nLos 3 Jugadores PERDIERON!"
 
#MAIN
continuar = 1
while continuar != 0:
    print "JUEGO DE BLACK JACK"
    print "-"*72
    numjugadores = input("Numero de Jugadores: 1) 1 Jugador  2) 2 Jugadores  3) 3 Jugadores\n")
    NombreJugadores(numjugadores)
 
    if(numjugadores==1):
 
        print "Buenas, Jugadores, Vamos a empezar la Partida de BlackJack"
        time.sleep(4)
        print "Inicia el Jugador numero 1"
        time.sleep(2)
        Jugador1 = TurnoCartas(nombrejugadores[0])
        print "Total del Jugador = ",Jugador1,"\n"
        time.sleep(3)
        continuar = input("\nQuieres Jugar Otra Vez???  1)Si   0)No\n")
        del nombrejugadores[:]
        print "-" * 72
 
    elif(numjugadores==2):
 
        print "Buenas, Jugadores, Vamos a empezar la Partida de BlackJack"
        time.sleep(4)
        Jugador1 = 0
        Jugador2 = 0
        for i in range(numjugadores):
            print "Inicia el Jugador numero ",i+1
            time.sleep(2)
            if(i==0):
                Jugador1 = TurnoCartas(nombrejugadores[i])
                print "Turno Finalizado. Espera a tu Oponente...\n"
                time.sleep(3)
                print "-" * 72
            else:
                Jugador2 = TurnoCartas(nombrejugadores[i])
                print "Turno Finalizado.\n"
 
        time.sleep(2)
        print "Eligiendo Ganador",
        time.sleep(2)
        print ".",
        time.sleep(2)
        print ".",
        time.sleep(2)
        print ".\n"
        time.sleep(2)
 
        Ganador2J(Jugador1,Jugador2,nombrejugadores)
        #jugadores = {nombrejugadores[0]: Jugador1 , nombrejugadores[1]: Jugador2}
        # print "\nEl Ganador es",
        #time.sleep(3)
        #print max(jugadores, key=jugadores.get), " con un Total de ",max(jugadores.values())
        #time.sleep(3)
 
        continuar = input("\nQuieres Jugar Otra Vez???  1)Si   0)No\n")
        del nombrejugadores[:]
        print "-" * 72
 
    elif(numjugadores == 3):
        print "Buenas, Jugadores, Vamos a empezar la Partida de BlackJack"
        time.sleep(4)
        Jugador1 = 0
        Jugador2 = 0
        Jugador3 = 0
        for i in range(numjugadores):
            print "Inicia el Jugador numero ", i + 1
            time.sleep(2)
            if (i == 0):
                Jugador1 = int(TurnoCartas(nombrejugadores[i]))
                print "Turno Finalizado. Espera a tu Oponente...\n"
                time.sleep(3)
                print "-" * 72
            elif(i == 1):
                Jugador2 = int(TurnoCartas(nombrejugadores[i]))
                print "Turno Finalizado. Espera a tu Oponente...\n"
                time.sleep(3)
                print "-" * 72
            else:
                Jugador3 = int(TurnoCartas(nombrejugadores[i]))
                print "Turno Finalizado.\n"
 
        time.sleep(2)
        print "Eligiendo Ganador",
        time.sleep(2)
        print ".",
        time.sleep(2)
        print ".",
        time.sleep(2)
        print ".\n"
        time.sleep(2)
 
        Ganador3J(Jugador1, Jugador2, Jugador3, nombrejugadores)
        #jugadores = {nombrejugadores[0]: Jugador1, nombrejugadores[1]: Jugador2, nombrejugadores[2]: Jugador3}
        #print "\nEl Ganador es",
        #time.sleep(3)
        #print max(jugadores, key=jugadores.get), " con un Total de ", max(jugadores.values())
        #time.sleep(3)
        continuar = input("\nQuieres Jugar Otra Vez???  1)Si   0)No\n")
        del nombrejugadores[:]
 
        print "-" * 72
 



12 -Abriendo una imagen






Codigo:


import Tkinter as tk
from PIL import Image, ImageTk
 
root=tk.Tk() #se uso para hacer una ventana
img = Image.open("Android.gif") #se usa el objeto image de la libreria pil para abrir un archivo gif
img.thumbnail((500, 300), Image.ANTIALIAS) #establezco sus dimensiones y la propiedad antialiasado
imagen = ImageTk.PhotoImage(img) #la convierto a un formato soportado por los widgets de tkinter
 
#tkimage = ImageTk.PhotoImage(img)
tk.Label(root,image=imagen).pack()
root.mainloop()




13- Mostrando imagenes al azar

Enlace archivos:
https://drive.google.com/drive/folders/1zIK0l8N_O2kAJQL19hRuQU0tFMjLt_ys


Codigo:


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
 
dir = os.path.dirname(__file__) #lo utilizo para dar una ruta de donde estan mis imagenes
fotos = dir + "/Imagenes/"
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
print eleccion_aleatoria
figura = fotos + eleccion_aleatoria + ".png" #asignas la extension png a al imagen
print figura
"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) #la imagen se pone en una etiqueta
etiqueta.pack() #la etiqueta se despliega

14- Mostrando imagenes al azar con sonidos

Codigo:


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
 
dir = os.path.dirname(__file__) #lo utilizo para dar una ruta de donde estan mis imagenes
fotos = dir + "/Imagenes/"
Csonido=dir + "/Sonidos8/" #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
 
 
root.geometry("500x500")
root.mainloop()

15- Juego de los orcos con interfaz grafica

Enlace archivos:
https://drive.google.com/drive/folders/1GMU2d0KxkEc3OEvY_dUC60Twj_KN_CaE


Codigo:


# -*- coding: utf-8 -*-
 
import sys
import random
 
if sys.version_info < (3, 0):
    from Tkinter import Tk, Label, Radiobutton, PhotoImage, IntVar
    import tkMessageBox as messagebox
else:
    from tkinter import Tk, Label, Radiobutton, PhotoImage, IntVar
    from tkinter import messagebox
 
 
class JuegoChozas:
    def __init__(self, parent):
        self.imagen_fondo = PhotoImage(file="Jungle_small_2.gif")
        self.imagen_choza = PhotoImage(file="Hut_small_2.gif")
 
        self.ancho_choza = 60
        self.alto_choza = 140
        self.container = parent
 
        self.Chozas = []
        self.result = ""
 
        self.ocupar_chozas()
 
        self.setup()
 
    def ocupar_chozas(self):
        ocupantes = ['enemigo', 'amigo', 'vacia']
        while len(self.Chozas) < 5:
            computer_choice = random.choice(ocupantes)
            self.Chozas.append(computer_choice)
        print("Los ocupantes de las chozas son:", self.Chozas)
 
    def entrar_choza(self, numero_choza):
        print("Entrando en la choza #:", numero_choza)
        ocupante_choza = self.Chozas[numero_choza-1]
        print("El ocupante de la choza es: ", ocupante_choza)
 
        if ocupante_choza == 'enemigo':
            self.result = "Enemigo visto en la choza # %d \n\n" % numero_choza
            self.result += "Has perdido :( Mucha suerte la próxima vez!"
        elif ocupante_choza == 'vacia':
            self.result = "La Choza # %d está vacia\n\n" % numero_choza
            self.result += "Enhorabuena! Has ganado!!!"
        else:
            self.result = "Amigo visto en la choza # %d \n\n" % numero_choza
            self.result += "Enhorabuena! Has ganado!!!"
 
        self.anunciar_ganador(self.result)
 
    def crear_widgets(self):
 
        self.var = IntVar()
        self.background_label = Label(self.container,
                                      image=self.imagen_fondo)
        txt = "Selecciona una choza en la que entrar. Ganarás si:\n"
        txt += "La choza está vacia o si su ocupante es tu aliado, de lo contrario morirás"
        self.info_label = Label(self.container, text=txt, bg='white')
        # Creamos un dicionario con las opciones para las imagenes de las chozas
        r_btn_config = {'variable': self.var,
                        'bg': '#8AA54C',
                        'activebackground': 'green',
                        'image': self.imagen_choza,
                        'height': self.alto_choza,
                        'width': self.ancho_choza,
                        'command': self.radio_btn_pressed}
 
        self.r1 = Radiobutton(self.container, r_btn_config, value=1)
        self.r2 = Radiobutton(self.container, r_btn_config, value=2)
        self.r3 = Radiobutton(self.container, r_btn_config, value=3)
        self.r4 = Radiobutton(self.container, r_btn_config, value=4)
        self.r5 = Radiobutton(self.container, r_btn_config, value=5)
 
    def setup(self):
        self.crear_widgets()
        self.setup_layout()
 
    def setup_layout(self):
        self.container.grid_rowconfigure(1, weight=1)
        self.container.grid_columnconfigure(0, weight=1)
        self.container.grid_columnconfigure(4, weight=1)
        self.background_label.place(x=0, y=0, relwidth=1, relheight=1)
        self.info_label.grid(row=0, column=0, columnspan=5, sticky='nsew')
        self.r1.grid(row=1, column=0)
        self.r2.grid(row=1, column=2)
        self.r3.grid(row=1, column=4)
        self.r4.grid(row=4, column=2)
        self.r5.grid(row=4, column=0)
 
    def anunciar_ganador(self, data):
        messagebox.showinfo("¡Atención!", message=data)
 
    # Handle Events
    def radio_btn_pressed(self):
        self.entrar_choza(self.var.get())
 
if __name__ == "__main__":
 
    mainwin = Tk()
    WIDTH = 1280
    HEIGHT = 700
    mainwin.geometry("%sx%s" % (WIDTH, HEIGHT))
    mainwin.resizable(0, 0)
    mainwin.title("Ataca a los orcos V 2.0.0 - El Videojuego")
    game_app = JuegoChozas(mainwin)
    mainwin.mainloop()

16- Utilizando hilos(video 51)






Codigo:

import time
import thread
 
def imprimir_mensaje(mensaje):
    while True:
        print(mensaje)
        time.sleep(1)
 
 
def main():
    mensaje="Thread1"
    mensaje2="Thread2"
    #empiezo el thread
    thread.start_new_thread(imprimir_mensaje,(mensaje,))
    thread.start_new(imprimir_mensaje,(mensaje2,))
    x = raw_input("Estoy esperando que presiones enter...\n")
 
    print("Termino la funcion main")
 
main()



17- Utilizando hilos con start






Codigo:

import threading #libreria para hacer hilos
import time #liberia para usar un timer
 
def  hola_mundo(nombre):
    print ("Hola Mundo" + nombre)
    time.sleep(15)
 
if __name__ == "__main__": #va a entrar con el nombre del programa main
    hilos = threading.Thread(target=hola_mundo,args=(" Ivan",)) #se creo un objeto de tipo hilo y con la clase target
    #mandamos llamarle al metodo que va a ser un hilo y que va a llevar un argumento que va a ser un nombre
    #para que lo reciba el metodo 1
    hilos.start()
    print "Se esta haciendo el hilo"
    print "Datos 1"
    print ("Dame el valor n1")
    n1 = input()
    print ("Dame el valor n2")
    n2 = input()
    suma = n1 + n2
    print suma



18- Utilizando hilos con start y join






Codigo:


import threading #libreria para hacer hilos
import time #liberia para usar un timer
 
def  hola_mundo(nombre):
    print ("Hola Mundo" + nombre)
    time.sleep(15)
 
if __name__ == "__main__": #va a entrar con el nombre del programa main
    hilos = threading.Thread(target=hola_mundo,args=(" Ivan",)) #se creo un objeto de tipo hilo y con la clase target
    #mandamos llamarle al metodo que va a ser un hilo y que va a llevar un argumento que va a ser un nombre
    #para que lo reciba el metodo 1
    hilos.start()
    hilos.join() #detiene el hilo hasta que termine
    print "Se esta haciendo el hilo"
    print "Datos 1"
    print ("Dame el valor n1")
    n1 = input()
    print ("Dame el valor n2")
    n2 = input()
    suma = n1 + n2
    print suma


19- Mostrando imagenes al azar con sonido y etiquetas






Codigo:

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 + "/Sonidos8/" #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()


20- Utilizando hilos con start (Hola mundo Ivan).-Version Carlos Olvera






Codigo:

"Generar Thread"
 
import threading
import time
stop = 0
 
 
def hola_mundo(nombre):
    play=1
    while play &lt 11:
        print ("Hola Mundo" + nombre)
        play=(play+1)
        time.sleep(1) #tiempo que duerme el programa
 
 
if __name__ == "__main__":
    hilos = threading.Thread(target =hola_mundo, args = (" Ivan ",) )
    hilos.start()
    print 'ultima instruccion del main'







Comentarios