Cambios de pantalla en pygame [PYTHON] Algunas dudas...

Foro dedicado a la programación en todo tipo de sistemas clásicos.
Spectro
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 46
Registrado: 11 May 2015, 11:49
Sistema Favorito: PC
primer_sistema: Spectrum +2
consola_favorita: Sony PSP
Primera consola: (Otro)
Gracias dadas: 2 veces
Gracias recibidas: 2 veces

Cambios de pantalla en pygame [PYTHON] Algunas dudas...

Mensajepor Spectro » 12 Sep 2018, 21:01

Hola de nuevo! Aunque hacia tiempo que no posteaba, suelo visitar el foro bastante a menudo. Como buen amante del ZX Spectrum :D

Bueno...tengo en mente crear un pequeño videojuego usando el modulo pygame de Python. En su dia ya comente un poco el tema en el foro, pero tuve que dejar apartado el asunto. Probe algun software de creacion de juegos, pero el lenguaje que se utilizaba no me gustaba. Y tambien pocos usan Python en sus motores. Busco hacer algo sencillo y me encanta este lenguaje. Por eso he vuelto de nuevo a pygame.

Como es normal se empieza en el tema de la creacion de la ventana de juego, el bucle de juego, los eventos, el dibujado en pantalla y cosas de ese tipo. Y el problema viene ahí...que en pocos sitios se enseña una clase de tipo director para manejar el cambio de pantallas. Es decir, las que visita nuestro jugador. Y cuando explican estas clases son temas tan avanzados que uno se pierde.

Cabe decir que uso la programacion orientada a objetos. Creo que la forma de plantearlo seria crear una clase llamada escena o pantalla base y de ahi ir instanciando las nuevas pantallas. Pero claro, dentro de esas pantallas nuevas que se fueran recorriendo se deberia actualizar todo. Sin mencionar la programacion de nuevos enemigos, decorados, eventos, etc...y ahi es donde me pierdo. Crear todo esto en una sola pantalla es facil, ya que el bucle del juego funciona en ella. Pero al crear nuevas ¿Como se pasa todo eso a las mismas?

En el siguiente enlace se crea algo parecido a lo que me refiero. Pero desde mi punto de vista no es correcto. Cada cuarto hereda de la clase Cuarto. Cuando son pocos puede ser viable ¿Pero que pasa si son 200 cuartos? ¿200 clases? :shock:

A mi modo de ver se deberia instanciar cuartos de una clase Cuarto y no crear tantas clases. Y claro, lo complicado es dar logica a todo este viaje entre pantallas o cuartos.

Supongo que hay muchas maneras de hacer esto. Pero por lo que he visto por la web, o son muy chusqueras o la gente pone implementaciones muy avanzadas.

Este es el enlace donde no lo veo del todo correcto. Aunque funcionar, funciona. Eso si, para dos o tres pantallas. Y con excesos de IFs.

http://programarcadegames.com/python_examples/show_file.php?lang=es&file=maze_runner.py

Venga, un saludo! :D

Avatar de Usuario
robcfg
Amiga 1200
Amiga 1200
Mensajes: 1938
Registrado: 07 May 2009, 15:34
Sistema Favorito: Amstrad CPC
primer_sistema: Atari 800XL/600XL
Ubicación: Estocolmo
Gracias dadas: 299 veces
Gracias recibidas: 89 veces

Re: Cambios de pantalla en pygame [PYTHON] Algunas dudas...

Mensajepor robcfg » 12 Sep 2018, 21:38

Buenas,

Creo que está hecho un poco a lo bruto para dejar claros algunos conceptos en el tutorial.

Para mi, lo ideal es tener una clase habitación y tener un array con los datos de las habitaciones, para poder inicializar las instancias.

Por supuesto, puedes tenerlo en un archivo de texto, como json o csv para que sean fáciles de editar, y cargarlo al iniciar el programa.

Entre los datos de las habitaciones, puedes tener con que otras habitaciones conecta cuando sales por alguna de las direcciones, con lo que la lógica de pasar de habitación es tan sencilla como actualizar la posición del personaje y 'pintar' la nueva habitación en pantalla.

Avatar de Usuario
explorer
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 240
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias recibidas: 49 veces
Contactar:

Re: Cambios de pantalla en pygame [PYTHON] Algunas dudas...

Mensajepor explorer » 12 Sep 2018, 22:24

El crear las 200 habitaciones puede ser necesario si en ellas se encuentran enemigos/objetos, porque querrás que el juego recuerde en qué estado estaba la habitación cuando la dejaste. Si acabaste con todos los enemigos, no deberían "regenerarse" cuando vuelvas a entrar (o quizás sí, como hacen algunos juegos). Lo mismo para los objetos transportables.

Lo que se suele hacer es tener un mapa con el esquema de conexión entre habitaciones para saber cómo es el recorrido completo. Luego, a medida que vamos entrando en nuevas habitaciones, si la habitación no fue visitada, la mandamos crear con los decorados, objetos y enemigos y la presentamos. Pero si es una habitación que ya existe (la instancia de la habitación para esas coordenadas existe), entonces la mandamos presentar tal y como esté.

Puedes guardar las instancias (objetos) de las habitaciones en una estructura en árbol o en una cuadrícula o incluso en un array asociativo. Lo más fácil que te sea posible para guardar/recuperar esa instancia.

Esto tiene ventajas... permite tener en marcha (animaciones) habitaciones en donde no está el protagonista, pero se "ven" en los márgenes de la habitación actual, al estilo de los juegos que permiten visualizar territorio a medida que vas avanzando en el mapa.

Otra opción... en vez de guardar instancias de las habitaciones guardas el estado en que están cuando sales de ellas (objetos, animaciones y enemigos) y lo recuperas cuando vuelves. Pero bueno, si quieres programar OO lo ideal es que ese estado esté en la instancia de habitación, ¿no?
Última edición por explorer el 13 Sep 2018, 21:55, editado 1 vez en total.

Spectro
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 46
Registrado: 11 May 2015, 11:49
Sistema Favorito: PC
primer_sistema: Spectrum +2
consola_favorita: Sony PSP
Primera consola: (Otro)
Gracias dadas: 2 veces
Gracias recibidas: 2 veces

Re: Cambios de pantalla en pygame [PYTHON] Algunas dudas...

Mensajepor Spectro » 13 Sep 2018, 18:49

Gracias a los dos por las ideas. Algo asi me imaginaba yo. En python los arrays asociativos son diccionarios. En este caso, supongo, se debera pasar la habitacion actual por medio de su indice o clave. Y luego acceder a los atributos o metodos de dicha habitacion. Lo seguire estudiando. Un saludo! :D


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: Bubu y 6 invitados