Foros del Web » Programando para Internet » Python »

Pygame Dudas

Estas en el tema de Pygame Dudas en el foro de Python en Foros del Web. Buenas, he estado desarrollando cosas con pygame, pero me he visto con una duda, quiero desarrollar un sistema de chat para mi juego, pero no ...
  #1 (permalink)  
Antiguo 06/07/2009, 20:00
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 7 meses
Puntos: 14
Pygame Dudas

Buenas, he estado desarrollando cosas con pygame, pero me he visto con una duda, quiero desarrollar un sistema de chat para mi juego, pero no se como hacerlo, se supone q la ventana de pygame trabaja solo con pixels, como haria para colocar un panel de charla donde el texto se pueda seleccionar una vez escrito? y como podria incluir un sistema de ventanas tipo gtk dentro de la ventana q se abre d pygame? o como puedo incorporar todo esto en un solo espacio para q todo quede unido?


Gracias de anemano a todos :)
__________________
Juegos
Juegos iphone
  #2 (permalink)  
Antiguo 06/07/2009, 21:48
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Pygame Dudas

Depende que clase de juego sea, es como vas a implementar el chat.

Puede hacer algo simple, como al presionar la tecla "t" que el usuario pueda escribir y al pulsar enter envié el mensaje. Al usuario o los usuarios de la partida. Al puro estilo teewolrds.

O puede ser algo mas elaborado, como un chat y varios canales en una subventana y con pestañas. Al estilo tibia o algún otro MMORPG.

Pero si ya implementaste como hacer el juego en multijugador el chat no creo que sea un problema.
  #3 (permalink)  
Antiguo 07/07/2009, 07:50
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 7 meses
Puntos: 14
Respuesta: Pygame Dudas

eso eso :D, es muy similar a tibia, ellos usan DiretcX y no se en q lenguaje programaran, pero no he visto ningun ejemplo en pygame donde se pueda seleccionar el texto de la ventana d juego pues como todo son pixels, pero me tendria q desviar de python?

de verdad necesito una iluminadita :(

si python trabaja solo con pixels como hare un sistema d chat donde el texto sea seleccionable? y el sistema d ventanas como podria hacerlo?

Gracias, ando muy confundido en esa parte

Saludos :)!
__________________
Juegos
Juegos iphone
  #4 (permalink)  
Antiguo 07/07/2009, 09:13
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Pygame Dudas

Bueno tibia esta hecho en C++, usa base de datos ya sea (MySQL o sqlite o postgres), tambien usan lua y anteriormente usaban XML en lugar de base de datos.

Si bien esta hecho para que funcione con DirectX u OpenGl no utiliza el 3D :-\

Pero volviendo al tema.

Puedes hacer tu clase widget text:
Usando eventos, el alto y el ancho de la letra que uses.

O tambien puedes usar alguna otra librería como pygtk o wxpython para hacer el chat y para integrarlo al juego podrías usar hilos. Pero esto haría al juego lento.

Tambien puedes ver ejemplos aquí para inspirarte.
  #5 (permalink)  
Antiguo 07/07/2009, 13:48
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 7 meses
Puntos: 14
Respuesta: Pygame Dudas

Muchas gracias de verdad me haz orientado bastante, otra cosita, he programado todo con python y me ha ido muy bien, crees q python me de para un buen MMORPG o deberia migrar lo que llevo a c++?
__________________
Juegos
Juegos iphone
  #6 (permalink)  
Antiguo 07/07/2009, 14:35
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Pygame Dudas

Puedes hacerlo, por el momento C++ es mas rápido que python.

Pero el problema de programarlo en C++ te llevara mucho mas código del que haces con python. Te llevaría mucho tiempo. Si hacer un juego en python es algo pesado, ahora con C++ es un mucho mas pesado.

Y si programas en solitarios como yo, te llevara mucho mas tiempo.
  #7 (permalink)  
Antiguo 07/07/2009, 20:14
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 7 meses
Puntos: 14
Respuesta: Pygame Dudas

Si tienes mucha razon, bueno te cuento, logre incrustar pygame en pygtk (q labor tan terrible :() pero ahora cuando muevo la ventana de gtk la d pygame se pierde jeje, si sabes como ayudarme con eso te lo agradeceria (quizas con frames algo vi x alli)... aun q creo q desarrollare el juego solo con SDL y un GUI basico pero cute :)

Muchas gracias por todo :P
__________________
Juegos
Juegos iphone
  #8 (permalink)  
Antiguo 07/07/2009, 21:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Pygame Dudas

bueno tendria que ver como uniste pygame y la gui.

Por que no posteas parte del código, talvez así te pueda ayudar de una manera mas concreta.

Por cierto como lo "uniste" usaste hilos?
  #9 (permalink)  
Antiguo 08/07/2009, 06:38
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 7 meses
Puntos: 14
Respuesta: Pygame Dudas

Claro, no no use hilos, aun no los manejo bien, me ayude con un script q andaba rodando x la internet look


Código Python:
Ver original
  1. # Proof of concept for PyGTK+Pygame
  2. # Seo Sanghyeon
  3.  
  4. import os, pygame, gtk
  5. import random
  6.  
  7. def pygame_hack(widget):
  8.     def callback(widget, *args):
  9.         handle = widget.window.handle
  10.         size = widget.size_request()
  11.         os.environ['SDL_WINDOWID'] = str(handle)
  12.         pygame.display.init()
  13.         pygame.display.set_mode(size)
  14.     widget.connect('map-event', callback)
  15.  
  16. def fill_random(widget):
  17.     screen = pygame.display.get_surface()
  18.     r = random.randrange(255)
  19.     g = random.randrange(255)
  20.     b = random.randrange(255)
  21.     screen.fill((r, g, b))
  22.     pygame.display.flip()
  23.  
  24. def main():
  25.     win = gtk.Window()
  26.     win.connect('destroy', gtk.main_quit)
  27.  
  28.     box = gtk.VBox()
  29.     win.add(box)
  30.  
  31.     custom = gtk.DrawingArea()
  32.     custom.set_size_request(300, 200)
  33.     pygame_hack(custom)
  34.     box.pack_start(custom)
  35.  
  36.     button = gtk.Button('Random fill')
  37.     button.connect('clicked', fill_random)
  38.     box.pack_start(button)
  39.  
  40.     win.show_all()
  41.     gtk.main()
  42.  
  43. if __name__ == '__main__':
  44.     main()

Basicamente encapsula un area de dibujo en una vbox y con esto

os.environ['SDL_WINDOWID'] = str(handle)

obliga a pygame a ejecutarce en la ventana del widget de dibujo, pero si lo ejecutas fijate q el area de SDL se queda suspendida arriba y si se mueve la ventana de PyGtk la de SDL continua suspendida y no se mueve con la ventana PyGtk(a no ser q lo amplies a pantalla completa)

pero estoy seguro q tibia utiliza algun tipo de GUI propia para su chat pues no tiene apariencia de textbox, simplemente al hacer select con el mouse deben obtener d alguna manera el texto dibujado

Saludos ;)
__________________
Juegos
Juegos iphone
  #10 (permalink)  
Antiguo 13/07/2009, 19:40
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Pygame Dudas

Ya probe el script, nose si funcione el windows, lo probe en "linux" y simplemente sin resultados.

Lo mejor que es hagas tu propia clase TextBox, con pygame y que la integres al proyecto.

Puede ser también algo simple, manejando eventos. Sin seleccionar o tener un cursos ni nada por el estilo.

Todo depende del tiempo que le dediques.

PD: Perdon por tardar pero es que estoy en escuela de verano.
  #11 (permalink)  
Antiguo 13/07/2009, 21:20
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Pygame Dudas

Encontre un codigo que habia hecho hace tiempo. Espero que te sirva

Código python:
Ver original
  1. #!/usr/bin/env python
  2. #coding: UTF-8
  3.  
  4. import pygame
  5. from string import letters
  6. from string import whitespace
  7.  
  8. pygame.init()
  9. size = width, height = 640, 480
  10.  
  11. #Colors
  12. black = (0, 0, 0)
  13. white = (255, 255, 255)
  14. green = (0, 255, 0)
  15. blue = (0, 0, 255)
  16. red = (255, 0, 0)
  17.  
  18. class Text:
  19.     def __init__(self, FontName = None, FontSize = 20):
  20.         pygame.font.init()
  21.         self.font = pygame.font.Font(FontName, FontSize)
  22.         self.size = FontSize
  23.  
  24.     def render(self, surface, text, color, position):
  25.         text = unicode(text, "UTF-8")
  26.         x, y = position
  27.         for i in text.split("\r"):
  28.             surface.blit(self.font.render(i, 1, color), (x, y))
  29.             y += self.size
  30.  
  31. screen = pygame.display.set_mode(size)
  32. pygame.display.set_caption("UTF-8 con pygame")
  33. text = Text("font.ttf", 30)
  34. s = ""
  35. pygame.key.set_repeat(100)
  36. while True:
  37.     for event in pygame.event.get():
  38.         if event.type == pygame.QUIT:
  39.             exit()
  40.         if event.type == pygame.KEYDOWN:
  41.            if event.unicode in letters or event.unicode in whitespace:
  42.                s += str(event.unicode)
  43.            if event.key == pygame.K_BACKSPACE and len(s) > 0:
  44.                s = s[:-1]
  45.            if event.key == pygame.K_ESCAPE:
  46.             exit()
  47.  
  48.     screen.fill(white)
  49.     text.render(screen, s, black, (0, 0))
  50.     pygame.display.flip()
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:53.