Contribuyentes

miércoles, 19 de enero de 2011

Python (programación de videojuegos con pygame IV)

Esta será la entrada en la que terminemos nuestro pequeño juego, nuestro remake de Pong, en esta ocasión le añadiremos texto para poner el sistema de puntuación de nuestro juego así como mostraré de manera sencilla la forma de introducir sonido en nuestro juego. Comencemos!!!
Para poder tener un marcador de puntos de nuestro juego, es necesario que modifiquemos nuestra clase Pala que teníamos anteriormente, el método que modificaremos será el método actualizar, al cual le modificaremos su firma de la función para que acepte un parámetro más, el parámetro puntos, el cual nos permitirá poder modificar en pantalla el marcador, así como introducir unas cuantas lineas de código para modificar el valor de la variable puntos, lo cual es muy bueno, ya que no será necesario modificar de manera abrupta el código que ya teníamos, solo modificaremos la firma de la función y añadiremos las siguientes líneas de código:

#cambiamos los parametros del metodo para anadirle los puntos
def actualizar ( self,time,pala ,pala_cpu,puntos):
    #cuando pase de largo aumentamos un punto como corresponda
    if self.rect.left <= 0:
        puntos[1]+=1
    if self.rect.right >= ANCHO:
        puntos[0]+=1
    return puntos
Las líneas anteriores solo las añadimos en la parte intermedia de nuestro método, así como la simple modificación de la firma del método y al final del mismo le añadimos la sentencia "return". 
Ahora crearemos otro método que nos permita manipular el texto que mostraremos en pantalla, así que el código es el siguiente:

#Metodo para manipular el texto que queremos mostrar en pantalla
#el cual creara un sprite y la regresara junto con su imagen recien 
#creada
def texto(texto, posicion_x, posicion_y, color=(255,255,255)):
    #Cargamos la fuente para mostrar en pantalla
    fuente = pygame.font.Font('images/17-years-ago.ttf',25)
    #el texto lo pasamos por la fuente elegida
    salida = pygame.font.Font.render(fuente,texto,1,color)
    #creamos un sprite para mostrarlo en pantalla
    salida_rect = salida.get_rect()
    #al sprite con el texto lo ponemos en una posicion 
    #dentro de la pantalla
    salida_rect.centerx = posicion_x
    salida_rect.centery = posicion_y
    return salida,salida_rect

Este código nos sirve para poder insertar texto en nuestro juego de manera sencilla.
Ahora, procederemos a modificar nuestro Game Loop, el cual nos servirá para poder actualizar en cada momento de la partida nuestra puntuación y así mostrarla en pantalla. Lo que haremos, será crear una lista que nos permitirá almacenar los puntos del jugador, así como el de la máquina, además de crear los sprites necesarios para mostrarlos en pantalla durante cada ciclo del juego, la modificación es muy sencilla, la cual es la siguiente (si quieren ver de manera completa el código, junto con los archivos de la fuente y el sonido,  click aquí):

#anadimos las siguientes lineas al metodo
def game_loop ():
    
    #creamos una lista para almacenar los puntos
 #de ambos jugadores
    puntos = [0,0]
    while True:  
        puntos = bola.actualizar(time,pala,pala_cpu,puntos)
        #creamos los sprites de los puntos del jugador
        puntos_jug, puntos_jug_rect = texto("Jugador Puntos: "+str(puntos[0]), 140, 40)
        #creamos los sprites de los puntos del cpu
        puntos_cpu, puntos_cpu_rect = texto("Maquina Puntos: "+str(puntos[1]), ANCHO-ANCHO/4,40)
        
        #actualizamos los puntos en pantalla
        pantalla.blit(puntos_jug,puntos_jug_rect)
        pantalla.blit(puntos_cpu,puntos_cpu_rect)


y así de sencillo hemos añadido nuestro marcador a pantalla. Ahora solo falta añadir el audio a nuestro juego, este audio será el que suene cuando la bola choque contra alguna de las paletas del juego, la modificación será en la clase Bola, está modificación es muy sencilla, la cual será ilustrada a continuación:

#modificar en las secciones indicadas
class Bola(pygame.sprite.Sprite) :
    def __init__ ( self ):
        #cargamos el audio de choque contra una pared o raqueta
        self.sound = pygame.mixer.Sound('audios/rebote.wav')        
    def actualizar ( self,time,pala ,pala_cpu,puntos):
        if pygame.sprite.collide_rect(self,pala) :
            self.speed[0] = -self.speed[0]
            self.rect.centerx += self.speed[0]*time
            #al chocar con las palas generar sonido
            self.sound.play()
        if pygame.sprite.collide_rect(self,pala_cpu) :
            self.speed[0] = -self.speed[0]
            self.rect.centerx += self.speed[0]*time
            #al chocar con las palas generar sonido
            self.sound.play()

Y así hemos añadido de manera sencilla el audio en nuestro juego, el cual no es fue muy difícil ¿verdad?
Entonces con esto hemos terminado nuestro pequeño remake del Pong, el cual se ve así:

Fue divertido hacer nuestro primer videojuego con python, y muy sencillo, con esto hemos terminado y como en el post anterior, el código desarrollado esta aquí.
¡Hasta la próxima!

1 comentario:

  1. Genial, esta muy bueno y me funciono perfect y que el primer juego que programe sea el primer juego que existio suena apropiado, lo unico es que la ia es perfecta, no se puede vencer porque se mueve junto con la pelota, lo solucione asginandole una velocidad fija a la paleta de la cpu.

    ResponderEliminar