Pygame: videoxogos

Pygame é a biblioteca de referencia para moita xente que comenza Python. A razón é que é moito máis divertido programar videoxogos que bases de datos ou resolver algorítmos matemático-aritméticos. Pero tendemos a esquecer que para programar videoxogos temos que facer cousas variadas e complexas, como xestionar pequenas bases de datos ou resolver algoritmos.

O que é indudable é que programar videoxogos é unha tarefa ou proxecto ideal para facer en grupo (pola extensión, complexidade e diversidade de tarefas a desenvolver).

Como curiosidade informática, e para valorar a potencia de Pygame, indicar que é un port de SDL, biblioteca multiplataforma que se emprega para desenvolver xogos comerciais que podes atopar en páxinas como Steam. Podes comprobalo na súa páxina oficial.

Na nosa páxina imos utilizar Pygame só para falar de como ler e modificar programas xa feitos. Se queres programar videoxogos dende cero tes a opción de utilizar TkInter (máis limitada que Pygame) ou ver os titoriais na páxina de Pygame. Dous recomendados, en inglés, poden ser Python game book e Dr0id.

INSTALAR

Dependendo da versión que teñas de Python terás pygame instalada ou non. Se non a tes podes instalala con PIP dende a terminal, en Linux:

python3 -m pip install -U pygame --user #isto de user é para instalar só no teu usuario

Para outros sistemas operativos podes consultar na páxina oficial.

PROBAR

Moi importante: en Pygame veñen instalados varios programas de exemplo. Poden variar dependendo da versión que teñas. En calquera caso podes baixalos desta páxina de Github.

Se queres abrir un, chamado aliens, dende a terminal escribimos:

python3 -m pygame.examples.aliens

Ollo: se o abres dende o IDE podes ter problemas, dependendo da versión de Python para o que se teña escrito, e do código, en especial polos módulos (bibliotecas) que utilice.

Terías que ver o típico xogo baseado en Space Invaders:

LER

Se queres probar a programar un xogo deste tipo perfecto. É con diferencia unha das mellores cousas que podes facer para demostrar(te) que sabes programar. Pero se aínda o ves difícil, imos polo camiño lento. Imos utilizar o xogo de aliens para ver a estrutura do programa.

Se entraste aquí sen ter programado moito en Python, podes ler primeiro o que escribimos sobre o problema da concorrencia, para ver unha estrutura básica de programa en Python de complexidade media, coma por exemplo este de aliens.

O xogo de aliens, coma calquera programa ben feito, está comentado para facilitarnos a súa lectura e reutilización.

Partes do programa de aliens Liñas de exemplo

Importar módulos (bibliotecas)

import random, os.path

Contantes xerais

# se modificar isto modificas o comportamento do programa

MAX_SHOTS      = 2
ALIEN_ODDS     = 22

Configuración xeral do programa:

cargar módulos, avisos en caso de erro...

if not pygame.image.get_extended():
    raise SystemExit, "Sorry, extended image module required"

Clases:

definir os obxectos a utilizar e as interacións entre eles (xogador, aliens, disparo, puntuación...)

class Shot(pygame.sprite.Sprite):
    speed = -11
    images = []
    def __init__(self, pos):
        pygame.sprite.Sprite.__init__(self, self.containers)
        self.image = self.images[0]
        self.rect = self.image.get_rect()
        self.rect.midbottom = pos

    def update(self):
        self.rect.move_ip(0, self.speed)
        if self.rect.top <= 0:
            self.kill()

Función principal (main()):

viría a ser o xogo en sí, o seu esqueleto. Son "só" ordes secuenciais, condicionais ou en bucle.

def main(winstyle = 0):
    # Initialize pygame
    pygame.init()
    if pygame.mixer and not pygame.mixer.get_init():
        print 'Warning, no sound'
        pygame.mixer = None

Executar Programa:

só ten unha liña, chamar á función principal, main()

if __name__ == '__main__': main()

MODIFICAR

Para empezar a traballar podes modificar xogos da seguinte páxina web: Programar xogos de arcade en Python empregando Pygame

 

Pygal: gráficas sexys TkInter: xanelas e botóns TkInter 2: debuxar e animar Pygame: videoxogos