Creando botones y asignando acciones

Consulte acerca de programas, técnicas, algoritmos etc.

Creando botones y asignando acciones

Notapor fedek_7 » Mié May 25, 2011 2:21 am

Hola soy nuevo en el foro y actualmete me encuentro estudiando acerca de pygame para un proyecto de la universidad,
Primero que nada agradecer por todo lo que pude aprender de los comentarios que he leido y de las preguntas de otros usuarios.
He leido bastante pero no logro terminar de entenderlo...
Necesito hacer un ahorcado. Ya lo realice pero sin interfaz grafica y lo quiero mejorar.
No me puedo hacer idea de como asignarle una accion a una imagen...por ejemplo yo cargo una imagen (que es un boton que dice "Jugar Ahora") lo que yo precisaria es que al clickear esa imagen cominese el juego obviamente. Lo de cargar una imagen lo hago porque no se crear botones y no encontre documentacion de eso.
Lo otro que no me doy cuenta es de como poder hacer algo asi como un Label para que el usuario ingrese las letras...

Bueno si alguien me pudiese ayudar muchas gracias!
fedek_7
 
Mensajes: 4
Registrado: Mar May 24, 2011 8:21 pm

Re: Creando botones y asignando acciones

Notapor Aborgna » Mié May 25, 2011 5:30 pm

Hola, lo que podrias hacer sería, en el bucle del juego, captar el evento MOUSEBUTTONDOWN y luego fijarte si posicion del mouse coincide con el boton, algo asi:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygame
from pygame.locals import *
pygame.init()

screen = pygame.display.set_mode((600,400),0,32)

while True:
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN:
x_mouse, y_mouse = pygame.mouse.get_pos()
if x_mouse <= 100 and y_mouse <= 100:
quit()


Y despues, para lo de ingresar texto, podes usar el evento KEYDOWN, algo asi:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygame
from pygame.locals import *
pygame.init()

screen = pygame.display.set_mode((600,400),0,32)
fondo = pygame.Surface((600,400))
fuente = pygame.font.Font(None, 20)
cadena=""

while True:
screen.blit(fondo,(0,0))
screen.blit(fuente.render(cadena + "_", True, (255,255,255)),(200,300))
pygame.display.update()
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
if len(cadena)>0:
cadena = cadena[0:len(cadena)-1]
else:
cadena = cadena + event.unicode


Espero que te sirva. :)
Avatar de Usuario
Aborgna
 
Mensajes: 11
Registrado: Lun May 23, 2011 4:08 pm
Ubicación: Buenos Aires, Argentina

Re: Creando botones y asignando acciones

Notapor fedek_7 » Jue May 26, 2011 1:35 am

Me sirvio muchisimo lo que me decis! lo unico q no logro hacer es que funcione con las funciones que yo ya tengo.
Mi codigo es el siguiente :

# -*- coding: cp1252 -*-
#Imprtamos el módulo random, para poder utilizarlo luego
import random, sys



#Definimos una función que será algo asi como el "menú" del juego
def menu():

#Establecemos e imprimimos las opciones del menú
print "---------JUEGO DEL AHORCADO---------"
print "1=Jugar"
print "2=Salir"
print "3=Instrucciones"


#Por ejemplo, el usuario quiere jugar y en vez de introducir "1" introduce "jugar", el raw_input es para que no le de error del programa
opcion=input("Ingrese la opcion deseada: ")

#While que entra si y sólo si la opcion del usuario no es "2" que significaría "salir"
while opcion!=2:

#Los print "" son unicamente para dejar espacios entre los textos, ya que si no queda muy confuso
print ""
print ""

#Si el usuario decide jugar, es decir marca "1", entonces llamamos a la funcion palabra (que es la que contiene el juego)
if opcion==1:
juego()

#Si se digita el número "2", o sea el usuario no quiere jugar, entonces establecemos un "break" que nos saca del juego
elif opcion==2:
sys.exit()

#Si el usuario no conoces el juego, al digitar la opción "3" se le dará un muy breve instructivo del juego, ya que el mismo es casi intuitivo
elif opcion==3:
print "INSTRUCCIONES DE JUEGO"
print ""
print ""

print "El juego del ahorcado consiste en adivinar una palabra escondida bajo guiones bajos."
print "Para jugar, simplemente debemos ingresar las letras que creamos que la palabra escondida tiene"
print "Si en determinado momento decides que ya sabes cual es esa palabra, puedes introducirla, pero cuidado,"
print "sólo tienes seis vidas!"
print "MUCHA SUERTE"
print ""
print ""
juego()
print ""
print ""


#Si el usuario no igresa una opción valida, le advertimos que esa opción no es valida y le damos a elegir nuevamente
else:
print "Esa no es una opción correcta"
print""
print""
menu()


#Definimos una funcion que contenga la mayor parte del juego
def juego():
print ""
print ""
print ""
print "Bienvenido al juego del ahorcado"
print ""

#Abrimos el archivo que contiene las palabras del juego
origen = open ("C:\Users\Jorge Kleinman\Desktop\Obligatorio\Palabras.txt","r")

palabrasdeljuego= []


#Recorre el archivo
for linea in origen:
palabrasdeljuego.append(linea.strip())

#Selecciona una palabra de la lista al azar
palabra=random.choice(palabrasdeljuego)


#Convierte la palabra en una lista
palabra=list (palabra)



#esto desp lo saco, es pa ver yo no mas
print palabra

#Ponemos tantos guiones como letras haya
guiones= "_"*len(palabra)
guiones=list (guiones)
print guiones
print ""
print ""


#Nos dice la cantidad de letras que tiene la palabra (es solo para facilitar el conteo de guiones)
print "La palabra que debes adivinar tiene", len(palabra), "letras"


#Hacemos una variable de lista, pero sin nada aún, la misma contendrá las letras erradas.
letraserradas=[]




#Definimos la cantidad de vidas que tiene el usuario al comenzar la partida
vidas=6


#Hacemos una condicion para que cuando la vida llegue a 0 el juego se corte y el jugador pierda
while vidas>0:
#Le damos la posibilidad al usuario de que ingrese por teclado una letra
a=raw_input("Ingrese la letra que usted cree se encuentra en la palabra o la palabra completa si cree conocerla: ")
print ""

#Si el usuario ingresa la palabra entera:
if len(a)>1:
if a=="".join(palabra):
print ""
print ""
print "PERFECTO HAS GANADO!!!"
print ""
print ""

#Ademas también se le dice cuantas vidas le quedaban
print "A demas te quedaron", vidas, "vidas"
vidas=0

else:
print ""
print "No, esa no era la palabra.Prueba otra!"
print ""
print ""
vidas=vidas-1
#Ademas también se le dice cuantas vidas le quedan, para que lo tenga en cuenta al planear su próxima letra
print "Te quedan", vidas ,"vidas restantes"
print ""

#Si el usuario decide ingresar sólo una letra a la vez:
elif len(a)==1:
#Si la letra que ingresa se encuentra en la palabra, la cambiamos por el o los guiones correspondientes
if a in palabra:
for i in range(len(palabra)):
if a == palabra [i]:
guiones [i]= a
print guiones


elif "_" not in guiones:
print "GANASTE! LA PALABRA ERA", palabra
print ""
print ""
print "Ademas te quedaron", vidas ,"vidas"
vidas=0

#Si la letra no esta en la palabra, se avisa y se resta una vida. Y tambien se agrega esa letra a "letraserradas"
else:
if a in letraserradas:
print "Ya has puesto esa letra, prueba con otra"
print ""
print ""
print "Letras ingresadas que no se encuentran en la palabra:", "".join(letraserradas)
if a not in palabra:
if a not in letraserradas:
print ""
print ""
print "Esa letra no se encuentra en la palabra, has perdido una vida"
vidas=vidas-1
letraserradas.append(a)
print ""
print "Te quedan", vidas ,"vidas restantes"
print ""
print ""


if vidas==0:
print "+------+"
print "| |"
print "| O"
print "| /|\\"
print "| / \\"
print "|"
print "========="
print "Desea volover a jugar(si/no)?"
respuesta=raw_input("Ingrese la una opcion: ")
if respuesta=="si":
juego()
elif respuesta=="no":
sys.exit()
else:
print "Esa no es una respuesta correcta, pruebe con si o no"
if vidas == 5:
print "+------+"
print "| |"
print "| O"
print "|"
print "|"
print "|"
print "========="
elif vidas == 4:
print "+------+"
print "| |"
print "| O"
print "| |"
print "|"
print "|"
print "========="
elif vidas== 3:
print "+------+"
print "| |"
print "| O"
print "| /|"
print "|"
print "|"
print "========="
elif vidas== 2:
print "+------+"
print "| |"
print "| O"
print "| /|\\"
print "|"
print "|"
print "========="
elif vidas== 1:
print "+------+"
print "| |"
print "| O"
print "| /|\\"
print "| /"
print "|"
print "========="

menu()

yo al hacer un boton quisiera por ejemplo q llame a la funcion menu, y obviamente q esta funcion se "imprima en la pantalla de pygame"
y tambien necesito q la letra q el usuario ingrese se "chequee" en la palabra random y vea si esta en la palabra o no
fedek_7
 
Mensajes: 4
Registrado: Mar May 24, 2011 8:21 pm

Re: Creando botones y asignando acciones

Notapor Aborgna » Jue May 26, 2011 8:39 pm

La parte del menu, por ejemplo, se podría poner así:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygame, random
from pygame.locals import *
pygame.init()

screen = pygame.display.set_mode((600,400),0,32)
fondo = pygame.Surface((600,400))
boton = pygame.Surface((100,25))
boton.fill((100,100,255))
fuente = pygame.font.Font(None, 20)





cadena=""

def menu():
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == MOUSEBUTTONDOWN:
x_mouse, y_mouse = pygame.mouse.get_pos()
if 250 <= x_mouse <= 350 and 200 <= y_mouse <= 225:
jugar()
elif 250 <= x_mouse <= 350 and 275 <= y_mouse <= 300:
instrucciones()
elif 250 <= x_mouse <= 350 and 350 <= y_mouse <= 375:
exit()

screen.blit(fondo,(0,0))
screen.blit(boton,(250,200))
screen.blit(boton,(250,275))
screen.blit(boton,(250,350))
pygame.display.update()

while True:
screen.blit(fondo,(0,0))
screen.blit(fuente.render(cadena + "_", True, (255,255,255)),(200,300))
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
cadena = cadena + event.unicode

def instrucciones():

instrucciones = ["INSTRUCCIONES DE JUEGO"]
instrucciones.append("")
instrucciones.append("")
instrucciones.append("El juego del ahorcado consiste en adivinar una palabra escondida bajo guiones bajos.")
instrucciones.append("Para jugar, simplemente debemos ingresar las")
instrucciones.append("letras que creamos que la palabra escondida tiene")
instrucciones.append("Si en determinado momento decides que ya sabes cual es esa palabra, ")
instrucciones.append("puedes introducirla, pero cuidado, solo tienes seis vidas!")
instrucciones.append("MUCHA SUERTE")

while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == MOUSEBUTTONDOWN or event.type == KEYDOWN:
jugar()

screen.blit(fondo,(0,0))
for a in range(len(instrucciones)):
tamano = fuente.size(instrucciones[a])
linea = fuente.render(instrucciones[a], True, (255,255,255))
screen.blit(linea,(300-tamano[0]/2,100+tamano[1]*a))
pygame.display.update()

def juego():
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()

menu()


Eso es sin la parte del juego,

para eso lo que podrias hacer sería, en vez de la linea que dice

a=raw_input("Ingrese la letra que usted cree se encuentra en la palabra o la palabra completa si cree conocerla: ")


poner algo como

a=""
loop = True
texto = "Ingrese la letra que usted cree se encuentra en la palabra o la palabra completa si cree conocerla: "
while loop == True:
screen.blit(fondo,(0,0))
screen.blit(fuente.render(texto, True, (255,255,255)),(50,250))
screen.blit(fuente.render(a + "_", True, (255,255,255)),(200,300))
pygame.display.update()
for event in pygame.event.get():
if event.type == QUIT:
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
if len(a)>0:
a = a[0:len(a)-1]
if event.key == pygame.K_RETURN:
loop = False
else:
a = a + event.unicode


y despues seguiria con tu codigo, solo habria que cambiarle la forma de imprimir.
Avatar de Usuario
Aborgna
 
Mensajes: 11
Registrado: Lun May 23, 2011 4:08 pm
Ubicación: Buenos Aires, Argentina

Re: Creando botones y asignando acciones

Notapor fedek_7 » Mié Jun 01, 2011 12:59 am

Gracias!
Ya me voy haciendo una idea de como funciona.
A penas tenga un tiempo me voy a poner a terminarlo en pygame!
Saludos
fedek_7
 
Mensajes: 4
Registrado: Mar May 24, 2011 8:21 pm


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron