¡Aprende a hacer un juego simple con Python!

Este es un post del Miembro del equipo de Tutorial Julian Meyer, un desarrollador de python de 13 años. Puedes encontrarlo en Google+ y Twitter.

¿alguna vez te has preguntado cómo se crean los videojuegos? ¡No es tan complicado como podrías pensar!

en este tutorial, crearás un juego simple llamado Bunnies and Badgers, donde el héroe, el conejo, tiene que defender un castillo contra una horda atacante de tejones., : O

para escribir este juego, usarás Python. No, no estoy hablando de una gran serpiente! :]

Python es un lenguaje de programación. Elegimos Python para este tutorial porque es un lenguaje simple para comenzar, y es divertido y fácil de aprender.

Si eres nuevo en Python, antes de empezar echa un vistazo a este libro: Think Python: How to Think Like A Computer Scientist. Eso debería ponerte al día.

entonces regresa aquí y prepárate – hay una guerra que se avecina entre los conejos y los tejones. Sigue leyendo para saltar a la refriega!,

Introducción: instalación de Python

Si desea probar este tutorial en un PC con Windows, debe instalar Python. Asegúrese de tomar la versión 2.7.3 y no la versión 3.3.0! Después de ejecutar el instalador, debe tener inactivo en su carpeta todos los programas en el Menú Inicio. Inicie IDLE para comenzar.

si estás en un Mac, ¡ya tienes instalado Python! Simplemente abra Terminal (/Aplicaciones/Utilidades / Terminal.app), escriba python y pulse Intro.

Nota: Si instala Python desde python.,org (y puede que tenga que hacerlo si desea que PyGame funcione), también tendrá acceso a IDLE en la Mac. Debería estar en la carpeta «/Applications / Python 2.7».

Si lo hiciste correctamente, debería ver algo como esto:

Nota: Si desea salir del prompt de Python (el triple de los paréntesis angulares, >>>), o bien puede escribir exit() en Python símbolo del sistema y presione la tecla de Retorno o pulse Control+D.,

una vez que esté en el prompt de Python, para probar si Python funciona correctamente, escriba print 1+1 y presione Enter/Return. Debería imprimir 2. ¡Acabas de escribir tu primer programa Python!

Ahora que sabes Python está funcionando correctamente, usted necesita para instalar PyGame para escribir un juego usando Python.

PyGame es una biblioteca de Python que hace que escribir Juegos sea mucho más fácil! Proporciona funcionalidades como el manejo de imágenes y la reproducción de sonido que puedes incorporar fácilmente a tu juego.,

vaya aquí y descargue el instalador de PyGame apropiado para su sistema. Asegúrese de descargar una versión de Python 2.7.

Nota: El Instalador de PyGame del enlace anterior no funcionará con el Python predeterminado de Apple que está instalado en un Mac. Tendrás que descargar Python desde python.org e instalarlo con el fin de utilizar PyGame. O bien, puede instalar Python y PyGame a través de MacPorts.

para verificar que tiene PyGame instalado correctamente, abra IDLE o ejecute Python a través de la Terminal y escriba import pygame en el símbolo de Python., Si esto no resulta en ninguna salida, entonces estás bien.

si, por otro lado, produce un error como el que se muestra a continuación, entonces PyGame no está instalado.

si obtienes un error como este, publica en los foros y te ayudaré a que funcione.

ejecutar código Python desde archivo

mientras que puede ejecutar bits cortos de código Python en el mensaje de Python, Si desea trabajar en un programa más grande (como un juego), probablemente desee guardar su código en un archivo para que no tenga que escribirlo una y otra vez.

Hay varias maneras de ejecutar un programa Python como un archivo., Una forma es usar un editor de texto plano como Bloc de Notas (Windows), o TextEdit (Mac). Abra un nuevo archivo de texto, escriba su código Python (como print 1+1). Entonces guárdalo como XXX.py (el XXX puede ser cualquier nombre de archivo descriptivo).

luego, en Windows, haga doble clic en este archivo para ejecutarlo. En Mac, abra Terminal y escriba python, luego arrastre el archivo que guardó a la ventana de Terminal y presione ENTRAR.

la otra forma es escribir tu código usando el editor inactivo, que es lo que vas a hacer en este tutorial. Para ejecutar idle, simplemente escriba idle desde Terminal., A continuación, elija Archivo\nueva ventana en el menú inactivo y debería tener una ventana de editor de texto donde pueda escribir código Python. Puede guardar los cambios de código a través de File \ Save e incluso ejecutar el código a través del módulo Run \ Run (F5).

tenga en cuenta que el menú Ejecutar solo está disponible si tiene un archivo abierto en una ventana del editor.

añadiendo los recursos del juego

estás casi listo para crear tu juego. Pero lo que es un juego sin algunos grandes gráficos y efectos de sonido? He reunido todos los gráficos y efectos de sonido que necesitarás para tu juego en un archivo ZIP. Puedes descargarlo aquí.,

una vez que haya descargado el archivo, cree una carpeta para su juego en su disco duro y extraiga la carpeta de recursos en esa carpeta para que su carpeta de juego tenga una subcarpeta llamada resources, con los diversos recursos agrupados en carpetas adicionales dentro de ella, como esto:

ahora está listo para comenzar a crear conejos y tejones. :]

Paso 1: Hola Bunny

ejecute IDLE y abra una nueva ventana del editor de texto, como se mencionó en la sección anterior., Escriba el siguiente código en la ventana del editor:

guarde el archivo en su carpeta de juego (la que es la subcarpeta de recursos) y asígnele un nombre game.py.

vamos a ir a través del código sección por sección:

  1. importar la biblioteca PyGame. Esto le permite utilizar funciones de la biblioteca en su programa.
  2. inicializar PyGame y configurar la ventana de visualización.
  3. carga la imagen que usarás para el conejito.
  4. siga repasando el siguiente código con sangría.,

    nota: mientras que otros lenguajes como Objective-C, Java o PHP usan llaves para mostrar un bloque de código a ser ejecutado dentro de un bucle while o una sentencia if, Python usa sangría para identificar bloques de código. Así que la sangría adecuada es muy importante en Python – tenlo en cuenta. :]

  5. llenar la pantalla con negro antes de dibujar nada.
  6. agregue la imagen del conejo que cargó en la pantalla en x=100 E y = 100.
  7. actualizar la pantalla.
  8. compruebe si hay algún evento nuevo y si hay uno, y es un comando quit, salga del programa.,

    Nota: de acuerdo con la documentación de PyGame, no debería necesitar llamar a pygame.quit() ya que el intérprete lo llamará automáticamente cuando el intérprete se apague. Sin embargo, al menos en Mac OS, el juego colgaría en la salida a menos que pygame.se llamó a quit ().

si ejecuta el código ahora (a través del módulo Run\Run en el menú Idle), debería ver una pantalla similar a la siguiente:

w00t el conejo está en la escena y listo para la acción!

pero el juego se ve aterrador y solitario con el conejito de pie sobre un fondo negro., Es hora de embellecer un poco las cosas. :]

Paso 2: Agregar paisaje

comencemos agregando un fondo a la escena del juego. Esto se puede hacer con un par más de pantalla.blit () llama.

al final de la sección #3, Después de cargar la imagen del reproductor, agregue el siguiente código:

grass = pygame.image.load("resources/images/grass.png")castle = pygame.image.load("resources/images/castle.png")

esto carga las imágenes y las coloca en variables específicas. Ahora tienen que ser dibujados en pantalla. Pero si usted comprueba la imagen de la hierba, usted notará que no cubrirá el área entera de la pantalla, que es 640 x 480., Esto significa que tienes que colocar el césped sobre el área de la pantalla para cubrirlo completamente.

agregue el siguiente código a game.py al principio de la sección #6 (antes de que el jugador sea dibujado en la pantalla):

como puedes ver, la instrucción for recorre x primero. Luego, dentro de ese bucle for, recorre y y dibuja la hierba en los valores X e y generados por los bucles for. Las siguientes líneas dibujan los Castillos en la pantalla.

si ejecuta el programa ahora, debería obtener algo como esto:

mucho mejor – esto está empezando a verse bien!, :]

Paso 3: Haz que el conejito se mueva

a continuación debes agregar algunos elementos de juego reales, como hacer que el conejito responda a las pulsaciones de teclas.

para hacer eso, primero implementará un buen método para realizar un seguimiento de qué teclas se están presionando en un momento dado. Usted puede hacer esto simplemente haciendo una matriz de Estados clave que contiene el estado de cada clave que desea utilizar para el juego.

agregue el siguiente código a game.py al final de la sección #2 (Después de configurar la altura y el ancho de la pantalla):

keys = playerpos=

Este código se explica por sí mismo., El array keys realiza un seguimiento de las teclas presionadas en el siguiente orden: WASD. Cada elemento de la matriz corresponde a una clave – la Primera A W, la Segunda A A y así sucesivamente.

la variable playerpos es donde el programa dibuja el reproductor. Dado que el juego moverá al jugador a diferentes posiciones, es más fácil tener una variable que contenga la posición del jugador y luego simplemente dibujar al jugador en esa posición.

ahora necesita modificar el código existente para dibujar el reproductor para usar la nueva variable playerpos., Cambie la siguiente línea en la sección #6:

 screen.blit(player, (100,100))

a:

 screen.blit(player, playerpos)

a continuación, actualice la matriz de teclas según la cual se presionan las teclas. PyGame facilita la detección de pulsaciones de teclas mediante la adición de eventos.funciones clave.

al final de la sección #8, justo después de la comprobación de bloque para el evento.tipo==pygame.Salir, poner este código (al mismo nivel de sangría que el pygame.Salir si bloquear):

Wow! Esas son muchas líneas de código. Si lo descompones en las declaraciones if, sin embargo, no es tan complicado.,

primero comprueba si se está presionando o soltando una tecla. Luego verifica qué Tecla se está presionando o soltando, y si la tecla que se presiona o solta es una de las teclas que está utilizando, actualiza la variable keys en consecuencia.

finalmente, debe actualizar la variable playerpos en respuesta a las pulsaciones de teclas. Esto es realmente muy simple.

añade el siguiente código al final del juego.,py (con un nivel de sangría, poniéndolo al mismo nivel que el bucle for):

 # 9 - Move player if keys: playerpos-=5 elif keys: playerpos+=5 if keys: playerpos-=5 elif keys: playerpos+=5

este código simplemente comprueba cuáles de las teclas se están presionando y añade o resta de la posición x O y del reproductor (dependiendo de la tecla presionada) para mover el reproductor.

ejecutar el juego y usted debe conseguir un jugador como antes. Intenta presionar WASD. Yay! Funciona.,

Paso 4: girando el conejito

Sí, tu conejito ahora se mueve cuando presionas las teclas, pero ¿no sería aún más genial si pudieras usar tu ratón para girar el conejito para que se dirija hacia una dirección de tu elección, por lo que no está mirando hacia la misma dirección todo el tiempo? Es bastante simple de implementar usando trigonometría.,

eche un vistazo a la siguiente ilustración:

en la imagen de arriba, si (5,3) es la posición del conejo y (2,4) es la posición actual del ratón, puede encontrar el ángulo de rotación (z) aplicando la función trigonométrica atan2 a la diferencia de distancias entre los dos puntos. Por supuesto, una vez que conozca el ángulo de rotación, simplemente puede girar el conejo en consecuencia. :]

si estás un poco confundido acerca de esta parte, no te preocupes – puedes continuar de todos modos. Pero esta es la razón por la que debe prestar atención en la clase de matemáticas!, :] Usarás estas cosas todo el tiempo en la programación de juegos.

ahora necesitas aplicar este concepto a tu juego. Para ello, puede utilizar la superficie PyGame.función Rotar (grados). Por cierto, tenga en cuenta que el valor Z está en radianes. : ¿Qué tal dejar que el conejo disparar a los enemigos con flechas? ¡Este no es un conejo de modales suaves!

Este paso es un poco más complicado porque tienes que hacer un seguimiento de todas las flechas, actualizarlas, rotarlas y eliminarlas cuando salgan de la pantalla.,

En primer lugar, agregue las variables necesarias al final de la sección de inicialización, Sección #2:

acc=arrows=

la primera variable realiza un seguimiento de la precisión del reproductor y la segunda matriz rastrea todas las flechas. La variable de precisión es esencialmente una lista del número de disparos y el número de tejones golpeados. Más tarde, utilizaremos esta información para calcular un porcentaje de precisión.

a continuación, cargue la imagen de la flecha al final de la sección # 3:

arrow = pygame.image.load("resources/images/bullet.png")

ahora, cuando un usuario hace clic en el ratón, una flecha tiene que disparar., Agregue lo siguiente al final de la sección #8 como un nuevo controlador de eventos:

este código comprueba si se hizo clic en el mouse y si lo fue, obtiene la posición del mouse y calcula la rotación de la flecha en función de la posición del jugador girada y la posición del cursor. Este valor de rotación se almacena en el array arrows.

a continuación, tienes que dibujar las flechas en la pantalla. Agregue el siguiente código justo después de la sección # 6.1:

los valores de vely y velx se calculan utilizando trigonometría básica. 10 es la velocidad de las flechas., La instrucción if solo comprueba si la viñeta está fuera de los límites y si lo está, elimina la flecha. El segundo for statement recorre las flechas y las dibuja con la rotación correcta.

intente ejecutar el programa. Usted debe tener un conejo que dispara flechas al hacer clic en el ratón! 😀

Paso 6: Tomar las Armas! Tejones!

OK, tienes un castillo y tienes un héroe que puede moverse y disparar. Entonces, ¿qué falta? Enemigos que atacan el castillo que el héroe puede disparar!,

En este paso, creará generado aleatoriamente tejones que se ejecutan en el castillo. Habrá más y más tejones a medida que avance el juego. Entonces, hagamos una lista de lo que necesitarás hacer.

  1. Añadir chicos malos a una lista y una matriz.
  2. actualice la matriz bad guy cada fotograma y compruebe si están fuera de pantalla.
  3. mostrar a los malos.

fácil, ¿verdad?, :]

primero, agregue el siguiente código al final de la sección #2:

badtimer=100badtimer1=0badguys=]healthvalue=194

lo anterior establece un temporizador (así como algunos otros valores) para que el juego agregue un nuevo tejón después de que haya transcurrido algún tiempo. Disminuyes el badtimer cada fotograma hasta que es cero y luego generas un nuevo tejón.

Ahora agregue lo siguiente al final de la sección #3:

badguyimg1 = pygame.image.load("resources/images/badguy.png")badguyimg=badguyimg1

la primera línea de arriba es similar a todo el código de carga de imagen anterior. La segunda línea configura una copia de la imagen para que puedas animar al malo mucho más fácilmente.,

a continuación, tienes que actualizar y mostrar a los malos. Agregue este código justo después de la sección # 6.2:

mucho código para revisar. : ] La primera línea comprueba si badtimer es cero y si lo es, crea un badger y configura badtimer de nuevo basado en cuántas veces badtimer se ha ejecutado hasta ahora. El primer bucle for actualiza la posición x del tejón, comprueba si el tejón está fuera de la pantalla y elimina el tejón si está fuera de la pantalla. El segundo bucle for atrae a todos los tejones.

para usar la función aleatoria en el código anterior, también debe importar la biblioteca aleatoria., Por lo tanto, agregue lo siguiente al final de la Sección #1:

import random

finalmente, agregue esta línea justo después de la instrucción while (sección #4) para disminuir el valor de badtimer para cada fotograma:

badtimer-=1

Pruebe todo este código ejecutando el juego. Ahora deberías empezar a ver un juego real: puedes disparar, moverte, girar y los tejones intentan correr hacia ti.

Pero espera! ¿Por qué los tejones no están volando el castillo? Vamos a añadir rápidamente en…

agregue este código justo antes del índice+ = 1 en el primer bucle for en la sección #6.,3:

Este código es bastante simple. Si el valor x del tejón es menor que 64 a la derecha, entonces borra a ese malo y disminuye el valor de vida del juego por un valor aleatorio entre 5 y 20. (Más tarde, mostrará el valor de mantenimiento actual en la pantalla.)

si construyes y ejecutas el programa, deberías conseguir un montón de tejones atacantes que desaparecen cuando golpean el castillo. Aunque no se puede ver, los tejones en realidad están bajando su salud.,

Paso 7: colisiones con tejones y Flechas

¡los tejones están atacando tu castillo pero tus flechas no tienen ningún efecto sobre ellos! ¿Cómo se supone que un conejo defiende su casa?

Tiempo para establecer las flechas para matar a los tejones para que pueda salvaguardar su castillo y ganar el juego! Básicamente, tienes que recorrer todos los malos y dentro de cada uno de esos bucles, tienes que recorrer todas las flechas y comprobar si chocan. Si lo hacen, borra el tejón, borra la flecha y añade uno a tu relación de precisión.

justo después de la Sección # 6.3.,1, agregue esto:

solo hay una cosa importante a tener en cuenta en este código. La instrucción if es una función PyGame integrada que comprueba si dos rectángulos se cruzan. El otro par de líneas solo hacen lo que he explicado anteriormente.

si ejecuta el programa, finalmente debería ser capaz de disparar y matar a los tejones.

Paso 8: Agregue un HUD con medidor de Salud y reloj

El juego progresa bastante bien. Tienes a tus atacantes, y tienes a tu defensor. Ahora todo lo que necesita es una manera de mantener la puntuación y para mostrar lo bien que el conejo está haciendo.,

la forma más fácil de hacer esto es agregar un HUD (Heads Up Display) que muestra el nivel de salud actual del castillo. También puedes añadir un reloj para mostrar cuánto tiempo ha sobrevivido el castillo.

primero agregue el reloj. Agregue el siguiente código justo antes del comienzo de la sección # 7:

el código anterior simplemente crea una nueva fuente usando la fuente predeterminada de PyGame establecida en tamaño 24. A continuación, esa fuente se utiliza para representar el texto de la hora en una superficie. Después de eso, el texto se coloca y se dibuja en pantalla.

a continuación, agregue la barra de salud., Pero antes de dibujar la barra de salud, debe cargar las imágenes para la barra. Agregue el siguiente código al final de la sección #3:

healthbar = pygame.image.load("resources/images/healthbar.png")health = pygame.image.load("resources/images/health.png")

la primera es la imagen roja utilizada para la barra de salud completa. La segunda es la imagen verde utilizada para mostrar el nivel de salud actual.

Ahora agregue el siguiente código justo después de la Sección #6.4 (que acaba de Agregar) para dibujar la barra de salud en la pantalla:

 # 6.5 - Draw health bar screen.blit(healthbar, (5,5)) for health1 in range(healthvalue): screen.blit(health, (health1+8,8))

el código primero dibuja la barra de salud totalmente roja. Luego dibuja una cierta cantidad de verde sobre la barra, de acuerdo con cuánta vida le queda al castillo.,

si compila y ejecuta el programa, debe tener un temporizador y una barra de salud.

Paso 9: Ganar o Perder

Pero ¿qué es esto? Si juegas durante el tiempo suficiente, incluso si tu salud se reduce a cero, ¡el juego continúa! No solo eso, también puedes seguir disparando a los tejones. Eso no va a funcionar, ¿verdad? Necesitas algún tipo de escenario de ganar / perder para que el juego valga la pena jugar.

así que vamos a añadir la condición de ganar y perder, así como la pantalla de ganar o perder. :] Lo haces saliendo del bucle principal y entrando en un bucle de ganar / perder., En el bucle de ganar / perder, tienes que averiguar si el usuario ganó o perdió y mostrar la pantalla en consecuencia.

Aquí hay un esquema básico de los escenarios de ganar/perder:

Si se acaba el tiempo (90000 ms o 90 segundos) entonces:

  • dejar de ejecutar el juego
  • Establecer el resultado del juego a 1 o ganar

si el castillo es destruido entonces:

  • dejar de ejecutar el juego
  • Establecer el resultado del juego a 1 o ganar

calcule la precisión de cualquier manera.

Nota: El acc * 1.0 solo está convirtiendo acc a un flotador., Si no hace esto, el operando de división devolverá un entero como 1 o 2 en lugar de un flotador como 1.5

añadir estas líneas al final de game.py:

Este es el bit de código más largo hasta ahora! Pero no es tan complicado.

la primera instrucción if comprueba si el tiempo ha terminado. El segundo comprueba si el castillo está destruido. El tercero calcula su relación de precisión. Después de eso, una instrucción quick if comprueba si has ganado o perdido y muestra la imagen correcta.

Por supuesto, si desea mostrar imágenes para las pantallas de ganar y perder, entonces esas imágenes deben cargarse primero., Así que agregue el siguiente código al final de la sección #3:

gameover = pygame.image.load("resources/images/gameover.png")youwin = pygame.image.load("resources/images/youwin.png")

Una cosa más rápida. Cambie la sección # 4 de:

# 4 - keep looping throughwhile 1: badtimer-=1

a:

# 4 - keep looping throughrunning = 1exitcode = 0while running: badtimer-=1

la variable en ejecución realiza un seguimiento de si el juego ha terminado y la variable de código de salida realiza un seguimiento de si el jugador ganó o perdió.

ejecuta el juego de nuevo y ahora puedes triunfar o morir en el intento! Fresco. :]

Paso 10: música gratuita y efectos de sonido!

El juego se ve bastante bien, pero ¿cómo suena? Es un poco tranquilo, ¿no?, Añadir algunos efectos de sonido puede cambiar toda la sensación de un juego.

PyGame hace que cargar y reproducir sonidos sea súper simple. Primero, debe inicializar el mezclador agregando esto al final de la sección #2:

pygame.mixer.init()

luego cargue los sonidos y establezca el nivel de volumen al final de la sección #3:

La mayor parte del código anterior es simplemente cargar los archivos de audio y configurar los niveles de volumen de audio. Pero presta atención al pygame.mezclador.sica.línea de carga: esa línea carga la música de fondo para el juego y la siguiente línea establece que la música de fondo se repita para siempre.,

Que se encarga de la configuración de audio. :] Ahora todo lo que necesita hacer es reproducir los diversos efectos de sonido según sea necesario. Haga eso según las instrucciones en los comentarios del código a continuación:

ejecute el juego una vez más y notará que ahora tiene música de fondo y efectos de sonido para colisiones y disparos. El juego se siente mucho más vivo! :]

¿a dónde ir desde aquí?

deberías estar orgulloso de ti mismo: acabas de crear un divertido juego repleto de música, efectos de sonido, un conejo asesino, tejones kamikazes y más. Te dije que podías hacerlo!, :]

puedes descargar el código fuente final del juego aquí.

en este punto, siéntase libre de extender este juego a su propia creación! Tal vez tratar de reemplazar el arte con sus propios dibujos, o la adición de diferentes armas o tipos de monstruos en el juego!

¿Tienes alguna pregunta o comentario sobre lo que has hecho en este tutorial? Si es así, únete a la discusión en los foros! Me encantaría saber de ti.


Esta es una publicación del Miembro del equipo de Tutorial Julian Meyer, un desarrollador de python de 13 años.

raywenderlich.,com Weekly

raywenderlich.com el boletín informativo es la forma más fácil de mantenerse al día sobre todo lo que necesita saber como desarrollador móvil.

obtenga un resumen semanal de nuestros tutoriales y cursos, y reciba un curso gratuito en profundidad por correo electrónico como un bono!

puntuación Media

4.1/5

Añadir una clasificación para este contenido

iniciar sesión para añadir una clasificación

15 calificaciones

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *