elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Simular la salida de un ciclo FOR con pygame [PYTHON]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Simular la salida de un ciclo FOR con pygame [PYTHON]  (Leído 3,107 veces)
Yidu

Desconectado Desconectado

Mensajes: 133


Ver Perfil
Simular la salida de un ciclo FOR con pygame [PYTHON]
« en: 5 Junio 2017, 13:50 pm »

Hola de nuevo!

Quizás recomendaríais otro tipo de modulo para este tipo de impresiones. Bueno, me refiero a mostrar gráficas y salida de datos. Pygame se suele utilizar para el tema de videojuegos y multimedia. Algo tan simple como mostrar la salida de un ciclo FOR (u otras salidas de datos) no  me llegaba a aclarar. En todo caso, me gustaría saber vuestra opinión, si es la forma correcta de hacer esta implementación.

Creo un ciclo para mostrar 40 números. Pero como llega un momento que la ventana definida en pygame se queda pequeña, hemos de crear otra columna para que se muestre el resto de números. Lo ideal seria que se creasen tantas columnas como números del ciclo. Claro esta que llegaría un momento que también se llegaría al limite de esa misma ventana ¿Se debería crear una nueva ventana y perderíamos la anterior? ¿Pygame no tiene la barra de desplazamiento como las ventanas de windows?

Os dejo el código que he creado:
(Es un esquema básico o plantilla para mostrar el ejemplo)

Código
  1. import pygame
  2. import sys
  3. pygame.init()
  4.  
  5. pantalla = pygame.display.set_mode((800, 600))
  6. fuente = pygame.font.SysFont('Comic Sans MS', 20, True, False)
  7.  
  8. while True:
  9.  
  10.    for evento in pygame.event.get():
  11.        if evento.type == pygame.QUIT:
  12.            pygame.quit()
  13.            sys.exit()            
  14.  
  15.    pantalla.fill((255, 255, 255))
  16.  
  17.    # Coordenadas iniciales impresion de columnas
  18.    y = 0
  19.    x = 0
  20.    for numero in range(1, 41):        
  21.        imprime_numero = fuente.render(str(numero), True, (0, 0, 0))
  22.        pantalla.blit(imprime_numero, (x, y))
  23.        y += 20
  24.        # Si la coordenada 'y' llega a 400 se crea una nueva columna
  25.        if y == 400:
  26.            x = 40
  27.            y = 0                  
  28.  
  29.    pygame.display.flip()


Si lo ejecutáis se crea una columna del 1 al 20 y otra del 21 al 40.
¿Es la forma correcta de imprimir un ciclo FOR en pygame?

Saludos!

EDITO:

Con esta modificación en la linea 26 se crean mas columnas en base a mas números en el ciclo:
Código
  1. x += 40


« Última modificación: 5 Junio 2017, 14:20 pm por Yidu » En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Simular la salida de un ciclo FOR con pygame [PYTHON]
« Respuesta #1 en: 11 Junio 2017, 19:21 pm »

Como ya hay muchas vistas y los que más saben no te han contestado, me tomo el atrevimiento de hacerlo:
1)
Citar
Quizás recomendaríais otro tipo de modulo para este tipo de impresiones
Efectivamente,pygame está pensado para otras cosas, es como querer cocinar sobre un motor de auto porque este se calienta.
2)
Citar
¿Pygame no tiene la barra de desplazamiento como las ventanas de windows?
pygame no tiene ni la ventana! por eso la definis cuando la creas, de la misma forma podés implementar una barra de desplazamiento, creándola!
3)
Citar
Si lo ejecutáis se crea una columna del 1 al 20 y otra del 21 al 40.
¿Es la forma correcta de imprimir un ciclo FOR en pygame?
no existen formas correctas o incorrectas, solo distintas
4)
Citar
Claro esta que llegaría un momento que también se llegaría al limite de esa misma ventana ¿Se debería crear una nueva ventana y perderíamos la anterior? 
Siempre podrías guardar los datos y si cambias de ventanas(o redibujar) poner lo que quieras.
5)en lo particular redibujaría la pantalla con los datos y columnas que quiera para que no se llene y simular un desplazamiento, algo así:
Código
  1. #-*- coding:utf -8 -*-
  2. import pygame
  3. class Lugar:
  4.    total_lugares = 20
  5.    numeros=list(range(1,51))
  6.    inicio=0
  7.    final=total_lugares
  8.    maximo=len(numeros) -total_lugares +1
  9.  
  10.    def lista(self):
  11.        x=0
  12.        y=0        
  13.        for i in range(Lugar.total_lugares):
  14.            texto = fuente.render(str(Lugar.numeros[i]), 0, (255,255,255 ))
  15.            pantalla.blit(texto,(x,y))
  16.            y+=20
  17.    def arriba(self):
  18.        x=0
  19.        y=0
  20.        if Lugar.inicio < Lugar.maximo - 1:
  21.            Lugar.inicio+=1
  22.            Lugar.final+=1
  23.            parcial=Lugar.numeros[Lugar.inicio:Lugar.final]
  24.            pantalla.fill((0,0,0))
  25.            for i in range(Lugar.total_lugares):
  26.                texto = fuente.render(str(parcial[i]), 0, (255,255,255 ))
  27.                pantalla.blit(texto,(x,y))
  28.                y+=20
  29.  
  30.  
  31.    def abajo(self):
  32.        x=0
  33.        y=0        
  34.  
  35.        if Lugar.inicio > 0 :
  36.            Lugar.inicio-=1
  37.            Lugar.final-=1
  38.            parcial=Lugar.numeros[Lugar.inicio:Lugar.final]
  39.            pantalla.fill((0,0,0))
  40.            for i in range(Lugar.total_lugares):
  41.                texto = fuente.render(str(parcial[i]), 0, (255,255,255 ))
  42.                pantalla.blit(texto,(x,y))
  43.                y+=20
  44.  
  45. pygame.init()
  46. dimension=(800,600)
  47. pantalla = pygame.display.set_mode(dimension)
  48. fuente = pygame.font.SysFont('Comic Sans MS', 20, True, False)
  49. salir=False
  50. reloj=pygame.time.Clock()
  51.  
  52. lugar1=Lugar()
  53. lugar1.lista()
  54. while salir != True :
  55.    for evento in pygame.event.get():
  56.        if evento.type == pygame.KEYDOWN:
  57.            if evento.key == pygame.K_DOWN:
  58.                lugar1.arriba()
  59.            if evento.key == pygame.K_UP:
  60.                lugar1.abajo()
  61.  
  62.        if evento.type == pygame.QUIT:
  63.            salir=True
  64.    reloj.tick(20)
  65.  
  66.    pygame.display.update()
  67.  

por supuesto hay muchas otras formas de hacerlo
6)como dije antes se puede hacer con gráficos, no solo con las teclas de arriba y abajo, pero ese sería otro tutorial o te toca realizarlo solo.
Saludos


En línea

Yidu

Desconectado Desconectado

Mensajes: 133


Ver Perfil
Re: Simular la salida de un ciclo FOR con pygame [PYTHON]
« Respuesta #2 en: 12 Junio 2017, 19:20 pm »

Pues muchas gracias por todas las explicaciones. La verdad es que escogí Pygame para practicar un poco la POO. Aunque claro, también se puede practicar este paradigma con la consola o un editor.

Supongo que para iniciarse con una GUI recomendarías tkinter ¿No? Mas que nada por el ejemplo con el que abrí el post. 

De todas formas estudiare el código que has posteado. Que seguro me servirá para seguir aprendiendo. Un saludo!
En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Simular la salida de un ciclo FOR con pygame [PYTHON]
« Respuesta #3 en: 12 Junio 2017, 23:40 pm »

si vas a hacer gui simples, para empezar tkinter está bien, pero si tu idea es ahcer algo mejor, más profesional, ni pierdas tiempo con esa huevada y comenzá directamente aprendiendo pyqt
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pygame(python)
Scripting
desnight 0 2,552 Último mensaje 29 Febrero 2008, 15:25 pm
por desnight
[Python] Ayuda con pygame
Scripting
zZznewbiezZz 2 3,228 Último mensaje 16 Noviembre 2010, 12:53 pm
por Gabriela
[python] algún tutorial pygame?
Scripting
zZznewbiezZz 6 6,141 Último mensaje 4 Marzo 2012, 23:22 pm
por UnboundDarkness
[python] menu pygame aporte
Scripting
daryo 0 4,043 Último mensaje 2 Mayo 2013, 02:45 am
por daryo
[Python-Pygame] E.T Must Die 0.3
Scripting
BigBear 0 3,337 Último mensaje 1 Enero 2015, 15:46 pm
por BigBear
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines