Introducción a Pygame
Por Nacho Cabanes, versión 0.10

8. Pantalla de presentación

Vamos a añadir una pantalla de presentación, de modo que antes de empezar para partida (y tras terminarla), se muestre una cierta imagen y se espere hasta que pulsemos una tecla.

Ya sabemos cómo cargar esa imagen y cómo mostrarla, así que hay pocas novedades:

Podría ser algo como:

# Mini-invaders, version 0.08
# (Pantalla de presentac.)
# Parte de la intro a Pygame, por Nacho Cabanes
 
import pygame
from pygame.locals import *
import random
 
pygame.init()
 
ancho = 800
alto = 600
cantidadMarcianos = 10
 
pantalla = pygame.display.set_mode( (ancho, alto) )
pygame.key.set_repeat(1,25)
reloj = pygame.time.Clock()
 
imagenNave = pygame.image.load("nave.png")
rectanguloNave = imagenNave.get_rect()
imagenUfo = pygame.image.load("ufo.png")
rectanguloUfo = imagenUfo.get_rect()
imagenMarciano = pygame.image.load("spaceinvader.png")
rectangulosMarcianos = { }
marcianosVisibles = { }
velocidadesX = { }
velocidadesY = { }
imagenDisparo = pygame.image.load("disparo.png")
rectanguloDisparo = imagenDisparo.get_rect()
imagenPresent = pygame.image.load("invadersIntro.png")
rectanguloPresent = imagenPresent.get_rect()
rectanguloPresent.top = 60
rectanguloPresent.left = 80
 
partidaEnMarcha = True                              # Nuevo en 0.08
 
while partidaEnMarcha:                              # Nuevo en 0.08
 
    # ---- Presentacion ----
    pantalla.fill( (0,0,0) )                        # Nuevo en 0.08
    pantalla.blit(imagenPresent, rectanguloPresent) # Nuevo en 0.08
    pygame.display.flip()                           # Nuevo en 0.08
 
    entrarAlJuego = False                           # Nuevo en 0.08
    while not entrarAlJuego:                        # Nuevo en 0.08
        pygame.time.wait(100)                       # Nuevo en 0.08
        for event in pygame.event.get(KEYUP):       # Nuevo en 0.08
            if event.key == K_SPACE:                # Nuevo en 0.08
                entrarAlJuego = True                # Nuevo en 0.08
 
    # ---- Comienzo de una sesion de juego ----
    rectanguloNave.left = ancho/2                   # Movido en 0.08
    rectanguloNave.top = alto-50                    # Movido en 0.08
    rectanguloUfo.top = 20                          # Movido en 0.08
 
    for i in range(0,cantidadMarcianos+1):
        rectangulosMarcianos[i] = imagenMarciano.get_rect()
        rectangulosMarcianos[i].left = random.randrange(50,751)
        rectangulosMarcianos[i].top = random.randrange(10,301)
        marcianosVisibles[i] = True
        velocidadesX[i] = 3
        velocidadesY[i] = 3
 
    disparoActivo = False
    ufoVisible = True
    terminado = False                   # Movido en 0.08
 
    while not terminado:
        # ---- Comprobar acciones del usuario ----
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                terminado = True
                partidaEnMarcha = False
 
        keys = pygame.key.get_pressed()
        if keys[K_LEFT]:
            rectanguloNave.left -= 8
        if keys[K_RIGHT]:
            rectanguloNave.left += 8
        if keys[K_SPACE] and not disparoActivo:
            disparoActivo = True
            rectanguloDisparo.left = rectanguloNave.left + 18
            rectanguloDisparo.top = rectanguloNave.top - 25
 
        # ---- Actualizar estado ----
        for i in range(0,cantidadMarcianos+1):
            rectangulosMarcianos[i].left += velocidadesX[i]
            rectangulosMarcianos[i].top += velocidadesY[i]
            if rectangulosMarcianos[i].left < 0 or rectangulosMarcianos[i].right > ancho:
                velocidadesX[i] = -velocidadesX[i]
            if rectangulosMarcianos[i].top < 0 or rectangulosMarcianos[i].bottom > alto:
                velocidadesY[i] = -velocidadesY[i]
 
        rectanguloUfo.left += 2
        if rectanguloUfo.right > ancho:
            rectanguloUfo.left = 0
 
        if disparoActivo:
            rectanguloDisparo.top -= 6
            if rectanguloDisparo.top <= 0:
                disparoActivo = False
 
        # ---- Comprobar colisiones ----
        for i in range(0,cantidadMarcianos+1):
            if marcianosVisibles[i]:
                if rectanguloNave.colliderect( rectangulosMarcianos[i] ):
                    terminado = True
 
                if disparoActivo:
                    if rectanguloDisparo.colliderect( rectangulosMarcianos[i]) :
                        marcianosVisibles[i] = False
                        disparoActivo = False
 
        if disparoActivo:
            if rectanguloDisparo.colliderect( rectanguloUfo) :
                ufoVisible = False
                disparoActivo = False
 
        cantidadMarcianosVisibles = 0
        for i in range(0,cantidadMarcianos+1):
            if marcianosVisibles[i]:
                cantidadMarcianosVisibles = cantidadMarcianosVisibles + 1
 
        if not ufoVisible and cantidadMarcianosVisibles == 0:
            terminado = True
 
        # ---- Dibujar elementos en pantalla ----
        pantalla.fill( (0,0,0) )
        for i in range(0,cantidadMarcianos+1):
            if marcianosVisibles[i]:
                pantalla.blit(imagenMarciano, rectangulosMarcianos[i])
        if ufoVisible:
            pantalla.blit(imagenUfo, rectanguloUfo)
        if disparoActivo:
            pantalla.blit(imagenDisparo, rectanguloDisparo)
        pantalla.blit(imagenNave, rectanguloNave)
        pygame.display.flip()
 
        # ---- Ralentizar hasta 40 fotogramas por segundo  ----
        reloj.tick(40)
 
# ---- Final de partida ----
pygame.quit()
 


El aspecto de esta presentación podría ser cualquiera. Yo he optado por una que no "pese" mucho, aunque tampoco sea especialmente vistosa:

pygame - presentacion de 008