- Código: Seleccionar todo
# -*- coding: iso-8859-1 -*-
import pygame
import sys
# Hasta aquí lo que hemos hecho ha sido importar algunas funciones y
# poner una codificación de caracteres compatible con el castellano.
# Paisaje
altura_paisaje = 400
anchura_paisaje = 400
screen = pygame.display.set_mode((anchura_paisaje, altura_paisaje))
pygame.display.set_caption('Galactic')
# Gravedad
g = 0.1
# Tanque de combustible
fuel = 10
consumo = 1
tanque_viejo = pygame.Rect(10, 10, 10, 100)
tanque_viejo_color = (0, 255, 0)
lleno = pygame.Rect(10, 10, 10, 100 - fuel * 10)
lleno_color = (0, 0, 0)
# Nave
tamanyo_nave = 15
x = anchura_paisaje / 2
y = altura_paisaje - 350
vy = 0
vx = 0
nave = pygame.Rect(x, y, tamanyo_nave, tamanyo_nave)
nave_color = (0, 255, 0)
# Plataforma
px = anchura_paisaje / 2
py = 395
vpx = 2
anchura_plataforma = 60
altura_plataforma = 5
plataforma = pygame.Rect(px, py, anchura_plataforma, altura_plataforma)
plataforma_color = (255, 0, 0)
# Vamos a darle valor a una variable que nos servira más adelante.
esperar = True
# Simulación
while True:
# Con esto vamos a controlar los eventos del juego.
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit(0)
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and fuel > 0:
vy = -5
fuel -= consumo
if event.key == pygame.K_DOWN and vy < 0:
vy = +2
if event.key == pygame.K_LEFT and fuel > 0:
vx = -5
fuel -= consumo
if event.key == pygame.K_RIGHT and fuel > 0:
vx = +5
fuel -= consumo
if event.key == pygame.K_ESCAPE or event.key == pygame.K_q or event.key == pygame.K_s:
sys.exit(0)
# Ahora pintemos el fondo de la pantalla
background_color = (255, 255, 255)
screen.fill(background_color)
# Ahora rellenaremos la nave, la plataforma y otros objetos
# de un color.
screen.fill(nave_color, nave)
screen.fill(plataforma_color, plataforma)
screen.fill(tanque_viejo_color, tanque_viejo)
screen.fill(lleno_color, lleno)
# Creemos la sensación de movimiento de la nave y la plataforma.
vy += g
if vx < 0:
vx += 0.1
if vx > 0:
vx -= 0.1
px += vpx
if px <= 0 or px >= anchura_paisaje - anchura_plataforma:
vpx = -vpx
nave.move_ip(vx, vy)
plataforma.move_ip(vpx, 0)
# Ahora vamos a hacer que cuando la partida acabe, la plataforma se
# pare
if fuel == 0:
vpx = 0
# Si la nave llega a algún límite detiene el movimiento.
if nave.bottom > altura_paisaje:
nave.bottom = altura_paisaje
vy = 0
if nave.top < 0:
nave.top = 0
vy = 0
# Si la nave sale por un lado, emtra por el otro.
if nave.left < 0:
nave.left = 384
if nave.right > 400:
nave.right = 16
# Redibujaremos el combustible restante.
if fuel * 10 <= 50 and fuel * 10 > 30:
tanque_viejo_color = (255, 165, 0)
if fuel * 10 <= 30:
tanque_viejo_color = (255, 0, 0)
lleno = pygame.Rect(10, 10, 10, 100 - fuel * 10)
screen.fill(lleno_color, lleno)
# Muestra los cambios en pantalla y espera.
pygame.display.flip()
pygame.time.delay(10)
# Haremos que el juego espere un tiempo antes de empezar.
if esperar:
pygame.time.delay(2000)
esperar = False
Mi duda, es como gestionar las colisiones, de tal manera que cuando la parte de abajo de la nave, colisione con la parte de arriba de la plataforma, hacer que nave.bottom valga 5. He intentado hacerlo con la guía de ejemplos sobre pygamme, pero no soy capaz. Muchas gracias.
P.D.: Aún no se usar las clases, no se si necesitare saber usarlas para esto. Muchas gracias a todos.
