Por el momento solo se ha implementado para 1 Jugador, pero en la siguiente actualización, volverá la modalidad de 3 Jugadores.
Pueden probar este juego y comentar sus experiencias, algún fallo en la misma, etc...
Disfrutenla!
-Si quieres ir a checar el Juego en Consola Da click aqui
-Para descargar todos los archivos necesarios para jugarlo y el archivo .py, Da click aquí
Código:
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()
Comments
Post a Comment