Python

Asteoroids Shooter

¿Cómo funciona un jugo?

¿Cómo funciona una filmación?

Es una colección de imágenes que se reproducen secuencialmente (usualmente 24 frames (imágenes) por segundo)

Unos 90 minutos de filmación  129,600 imágenes

(90  min son 5400 segundos * 24) 

¿Cómo funciona una filmación?

La única diferencia con las películas es cómo las imágenes son creadas

 Generadas por computadoras

Filmadas

Dibujadas a mano

¿Cómo funciona un juego?

Funcionan de la misma forma que las filmaciones. Se crean muchas imágenes por segundo, aunque tratando de tener unos 30 frames por segundos (entre más mejor)

 

La diferencia es que cada imagen no es estática, sino que es generada dinámicamente.

¿Cómo funciona un juego?

  1. Obtenemos una entrada del jugador y verificamos cualquier tipo de cambio.
  2. Se usa la entrada para mover el jugador y actualizar los otros elementos.
  3. Todas las imágenes se combinan (imagen del jugador, imágenes de enemigos, gráficos adicionales)
  4. El frame final se muestra al jugador.

Ciclo

¿Qué hace Pygame?

Muestra gráficos y reproduce sonidos

Obtiene entradas (teclado, mouse, control, etc.)

Verificar colisiones

Provee algunas herramientas como (manipulación de imágenes, timers, mostrar texto )

Instalar Pygame

pip install pygame

Display surface

Es la imagen que el usuario ve al final de cada ciclo del juego..

 

Solo hay un display surface. Una imagen fuera del mismo simplemente no se mostrará

Ciclo del juego

La lógica completa del juego estará en torno al game loop (ciclo del juego)

Agregar imágenes

Para agregar una imagen se necesita una superficie, hay dos: display surface el cual solo hay uno y siempre se muestra al usuario y surface que es básicamente uno por imagen y es ilimitado su número, será visible si está en el display surface.

Surface

Las superficies pueden ser creadas de tres maneras:

  1. Importando una imagen (jpg, png)
  2. Creando una en pygame
  3. Creando un texto

Para ubicarlo

surface_display.blit(surface, posición)

donde posición son pares de (x, y)

Colores

pygame incluye muchas opciones predeterminadas de colores.

 

También se puede especificar un color rgb en una tupla

(red, green, blue)

(0-255, 0-255, 0-255)

Ubicar objetos

Origen (0, 0)

Eje Y

Eje X

+ y mueve hacia abajo

+x mueve a la derecha

posición (x, y)

Imagen

  1. Las imágenes pueden ser importadas con pygame.image.load('tura')
  2. Para un mejor rendimiento hay que hacer una conversión de la imágen.
  3. Observe que el orden de las superficies es importante

Texto

  1. Primero se necesita la fuente
  2. La fuente renderiza un string y retorna una superficie
  3. Esta superficie se puede utilizar como cualquier otra

Movimiento

  1. Hasta este momento todo los elemento están en una sola posición.
  2. Pero puedo ser deseable mover una superficie en en cada iteración del ciclo del juego para mostrar cosas diferentes.
  3. Movimiento es solo un montón de cambios de pequeñas posiciones en una dirección.
  4. El problema del ciclo es que la velocidad de ejecución cambia según las capacidades de la computadora.

¿Cómo la cantidad de frames (framerates) influyen en el jugo? 

200

5ms -> while

1000 ms

5 ms

= 200

¿Cómo la cantidad de frames (framerates) influyen en el jugo? 

El juego correrá de forma inconsistente en diferentes sistemas

 

Una solución es limitar la cantidad de frames

Rectángulos

Hacen más fácil y preciso la ubicación de superficies

 

Son utilizados para colisiones

 

Son utilizados para dibujo 

Rectángulos

Posición en un solo eje

Rectángulos

Posición en doble eje

¿Cómo usar rectángulos?

Debe crearse la interfaz y un rectángulo: por ejemplo la superficie almacena una imagen y el rectángulo almacena la posición y el movimiento. 

 

display_surface.blit(surface,  pos or rect)

 

Sólo se mueve el rectángulo

Input

Soporte diferentes dispositivos: mouse, teclado, pantalla táctil y controles.

Se puede acceder a las entradas desde el ciclo de eventos o fuera de él, este último es el más común.

Resumen

Surface

 

Imágenes individuales (nave, fondo)

 

Puede haber un número ilimitado

rect

 

Se usan para ubicación y colisiones

 

Puede haber un número ilimitado

rect y Surface avanzado

rect puede ser usado para dibujar formas

 

pygame.draw

                 ellipse

 

Surface puede ser transformado (escalar o voltear)

 

pygame.transform.scale

                                flip

Tiempo - delta time

Tiempo - delta time

Delta time mide cuánto tiempo toma crear un marco (frame)

 

Por ejemplo, si un framerate es de 60 fps, delta time es 1s/60 = 0.0167

 

Apróx. 17 milisegundos

 

Esta información es importante para mantener la velocidad a pesar del framerate.

 

Esencialmente multiplicamos cualquier movimiento con el delta time.

Tiempo - delta time

Con el conteo delta, el juego corre a la misma velocidad en cualquier framerate

 

Problema - rect se mueven con enteros y delta time mueve con flotantes

Tiempo - delta time

Tiempo - delta time

Tiempo en pygame

pygame toma el tiempo desde que inicia la aplicación pygame.init()

 

Nosotros podemos crear nuestro temporizador

Asteroides

Funciona parecido al laser con la diferencia que se mueve hacia abajo. Aparecen de forma aleatoria.

 

Se requiere un temporizador para la aparición de los asteroides.

Asteroides

Colisiones

pygame permite detectar si dos rectángulos se superponen

 

Es posible detectar que tan cerca están dos rectángulos.

 

También permite controlar las colisiones por píxel

Sonidos

Se importa el archivo de sonido

 

Usamos un método para reproducir el sonido

 

También podemos reproducir el sonido de forma cíclica

Python Game

By Wilfredo Meneses

Python Game

  • 432