El juego de aterrizar la nave :D

El juego de aterrizar la nave :D

Notapor algarafa » Sab Ene 10, 2009 11:38 am

Bueno, pues como en el tema de Animación de un cuadrado, había dicho, habro un post para este "juego". Les pongo el código actual, y al final mi duda.
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. :D
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España

Notapor endaramiz » Lun Ene 12, 2009 10:00 pm

Podrías mirar si la distancia de la nave a la plataforma es menor que la velocidad de la nave. Y además, que, como mínimo, haya uno lado de la nave entre los lados de la plataforma.

Ya has utilizado bottom, top, left, y right. Para hacer esto, tienes que restar, comparar... No dudes en coger lápiz y papel.

No son necesarias clases ni funciones pero son aconsejables. Aunque los comentarios que haces ayudan mucho :wink:

Saludos.
Avatar de Usuario
endaramiz
 
Mensajes: 283
Registrado: Vie Ago 31, 2007 9:25 am
Ubicación: Barcelona

Muchas gracias

Notapor algarafa » Mar Ene 13, 2009 7:38 pm

¡Muchas gracias! Ya voy consiguiendo que me salga, cuando lo tenga le doy un repaso al código para retocarlo y ver si hay cosas sin usar. Cuando tenga esto hecho, ya os pondré el nuevo código.
¡Muchas gracias dvd! ¡Siempre me ayudas! :D
http://liberatumundo.wordpress.com/
Avatar de Usuario
algarafa
 
Mensajes: 135
Registrado: Lun Oct 27, 2008 6:12 pm
Ubicación: España


Volver a Videojuegos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron