miércoles, 21 de noviembre de 2018

Unidad 3: Blackjack interfaz gráfica

Blackjack interfaz gráfica



from Tkinter import *
from PIL import Image,ImageTk
import os
import random
import tkMessageBox
import time
import threading

carpetaraiz=os.path.dirname(__file__)
#print carpetaraiz

DirCartas = carpetaraiz+"/Poker Cards/PNG/"
continuar = 1
#----------------------------Variables Globales-------------------------------
imagendeck = []
allcards = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
allsymbols = ["H","S","C","D"]
labelsarray = []
imagenes = []
indice = 0
#numerocolumna = 1
puntajetotal = 0
contadorposicion = 0
#print DirCartas

#----------Metodo para mostrar imagenes en Pantalla---------------------
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
    return ImageTk.PhotoImage(img)
    #imagen = ImageTk.PhotoImage(img) #la convierto a un formato soportado por los widgets de tkinter
    #return imagen

def ReiniciarJuego():
    opcion = tkMessageBox.askyesno("Retry?", "Quisieras volver a Intentarlo?")

    if(opcion==True):
        global indice, puntajetotal, contadorposicion, totalmarcador
        del labelsarray[:]
        del imagenes[:]
        indice = 0
        puntajetotal = 0
        contadorposicion = 0
        totalmarcador.config(text = "0")

    else:
        exit()


def TerminarJugada():
    opcion=tkMessageBox.askokcancel("Terminar Jugada", "Si sales ahora perderas el juego...")

    if(opcion==True):
        ReiniciarJuego()

def InicioJuego():
    global TextoBoton, contenedor, numerocolumna, indice, puntajetotal, contadorposicion
    global Botoniniciar, totalmarcador

    Botoniniciar.config(width = 43)
    finishButton = Button(contenedor, text="Terminar", font=("Arial", 10), width=15, command = TerminarJugada)
    finishButton.place(x=567, y=376)

    card = random.choice(allcards)
    palo = random.choice(allsymbols)
    carta = card+palo
    imagenes.append(setimagen(DirCartas+carta+".png", 150, 180))
    labelcartas = Label(framecartas, image = imagenes[indice])
    #labelcartas.grid(row = 1, column = numerocolumna, padx = 10, pady = 10)
    labelcartas.place(x=contadorposicion, y=0)

    contadorposicion+=130
    #numerocolumna+= 1
    indice+=1
    labelsarray.append(labelcartas)

    if(card == "10" or card == "J" or card == "Q" or card == "K"):
        puntajetotal+=10
    elif(card == "A"):
        opcion = tkMessageBox.askquestion("Elija el valor del As", "Quiere que valga 11?\nYes = 11 | No = 1")
        if opcion=="yes":
            puntajetotal+=11
        else:
            puntajetotal+=1

    else:
        puntajetotal+= int(card)

    totalmarcador.config(text = str(puntajetotal))

    if(puntajetotal==21):
        tkMessageBox.showinfo("BLACKJACK!! FELICIDADES!", "Has hecho un BLACKJACK!\nTotal: 21")
        ReiniciarJuego()
    elif(puntajetotal>21):
        tkMessageBox.showerror("HAS PERDIDO!",'Te has pasado! Vuelve a Intentarlo')
        ReiniciarJuego()

#--------------Metodo para mostrar el Marcador al Ingresar el Nombre--------------------
def Marcador(nombre):
    global labelentry, BotonOK, entrynombre, Botoniniciar
    global nombrejugador, TextoBoton, totalmarcador
    #nombrejugador = nombre
    BotonOK.destroy()
    entrynombre.destroy()

    TextoBoton.set("Pedir Carta")
    Botoniniciar = Button(contenedor, textvariable=TextoBoton, font=("Arial", 10), width=45, command = InicioJuego)
    Botoniniciar.place(x=200, y=376)

    framemarcador = Frame(contenedor, bg="grey")
    framemarcador.config(bd=3, relief="ridge")
    framemarcador.place(width=154, height=316, x=18, y=90)

    titulomarcador = Label(framemarcador, text = "Marcador",font = ("Arial",20, "bold"), bg = "grey")
    titulomarcador.grid(row=1, column=1, padx = 10, pady = 10, columnspan=3)

    j1marcador = Label(framemarcador, text = "Jugador 1:", font = ("Arial",10), bg="grey")
    j1marcador.grid(row=2, column=1, sticky = "E")

    nombremarcador = Label(framemarcador, text = nombre, font = ("Arial",10), bg = "grey")
    nombremarcador.grid(row=2, column=2, sticky = "W")

    totallabel = Label(framemarcador, text = "Total:", font = ("Arial",10,"bold"), bg = "grey")
    totallabel.grid(row=3, column = 1, sticky = "E" )

    totalmarcador = Label(framemarcador, text= str(puntajetotal), font=("Arial", 10, "bold"), bg="grey")
    totalmarcador.grid(row=3, column=2, sticky="W")

    # Creacion de un Hilo para que tenga un minimo retraso entre cambio de texto
    #hilo=threading.Thread(target=mensaje, args=("Buenas, Jugadores, Vamos a empezar la Partida de BlackJack",))
    #hilo.start()
    labelentry.config(text = "Buenas, Jugadores, Vamos a empezar la Partida de BlackJack")
#----------------Metodo que contiene la funcionalidad del Hilo------------------------------
"""def mensaje(msg):
        global labelentry
        time.sleep(3)
        labelentry.config(text=msg)"""

#--------Metodo para mostrar la baraja y los componentes para Ingresar el nombre----------
def IniciarComponentes():
    global contenedor, nombrejugador, labelentry, TextoBoton
    global entrynombre, BotonOK

    DeckDir = carpetaraiz + "/Poker Cards/Images/Deck.png"
    imagendeck.append(setimagen(DeckDir,180,230))
    Decklabel = Label(contenedor, image = imagendeck[0])
    Decklabel.place(x=275,y=120)

    labelentry = Label(contenedor, text = "Ingrese el nombre del Jugador: ", font = ("Arial",10))
    labelentry.place(x=200, y=350)
    nombre = StringVar()
    entrynombre = Entry(contenedor, textvariable = nombre)
    entrynombre.place(x=200, y=380)
    entrynombre.config(width = 40, font = ("Arial",10))
    nombrejugador.set(nombre.get())
    print nombrejugador.get()

    TextoBoton = StringVar()
    TextoBoton.set("OK")
    BotonOK = Button(contenedor, textvariable = TextoBoton, font = ("Arial", 10), width = 10)
    BotonOK.place(x=489, y=376)
    #if(nombrejugador.get()!=""):
    BotonOK.config(command = lambda :Marcador(str(nombre.get())))

#----------------------Creacion de Ventana------------------------
ventana = Tk()
ventana.title("BlackJack Game v 0.1")
ventana.config(bg="grey")
ventana.iconbitmap(carpetaraiz+"\Poker Cards\Images\Poker Icon 1.ico")
contenedor = Frame(ventana, width = 720, height = 640)
contenedor.pack(fill = "y", expand = True)
"""bgimagen = Image.open(carpetaraiz + "/Poker Cards/Images/Poker Table (1).png")
ph = ImageTk.PhotoImage(bgimagen)
background_image = Label(contenedor, image = ph)
background_image.place(x=0,y=0)"""

framecartas = Frame(contenedor)
framecartas.place(width=680, height=210, x=18, y=417)
#framecartas.config(bd=3, relief="ridge")

Etitulo =Label(contenedor,text="BlackJack", font=("Arial",40,"bold"))
Etitulo.place(x=235,y=20)

BotonStart = Button(contenedor, text = "Start Game", font = ("Arial", 10), width = 30, bg = "grey",command=IniciarComponentes)
BotonStart.place(x=240, y=90)

nombrejugador= StringVar()
nombrejugador.set("")
#----------------------Metodo para saber las cordenadas de la pantalla haciendo un Click--------
def getorigin(eventorigin):
    global x0,y0
    x0 = eventorigin.x
    y0 = eventorigin.y
    print(x0,y0)
#mouseclick event
contenedor.bind("< button 1="">",getorigin)

ventana.mainloop()





Descargar: https://drive.google.com/open?id=1FF2gn_PgaQlV8JAmHtSbSyKGuZcMqrwD

Para mas información:
Link: http://graficacionitm-huerta.blogspot.com/2018/11/juego-blackjack.html

No hay comentarios:

Publicar un comentario