Videojuego Python

abril 29, 2010 at 3:59 pm (Programación, Python)

Pues como bien dice el título hoy os voy a presentar un par de videojuegos creados por mí, uno de ellos basado en los modelos de un texto. El primero es un juego bien sencillo en el que una nave cae por la acción de la gravedad y nosotros debemos conducirla hasta una plataforma móvil, podemos contrarrestar el efecto de la gravedad pulsado la flecha de arriba (activa un propulsor) y ocurrirá lo mismo con las flechas de los lados. =). Además el juego muestra una amplia gama de información, muestra el combustible, velocidad de caída.. Espero que os guste, es una gilipollez, pero me ayuda mucho hacer este tipo de aplicaciones.

from math import pi, cos, sin

#Escogemos dificultad
print 'Escoge dificultad:'
print 'a) Facil'
print 'b) Medio'
print 'c) Dificil'
dif = raw_input('Introduce la letra de tu opcion: ')

#Definimos el paisaje

altura_paisaje = 400
anchura_paisaje = 400

window_coordinates(0, 0, anchura_paisaje, altura_paisaje)
create_filled_rectangle(0, 0, 400, 400, 'black')

#Gravedad
if dif == 'a':
g = 0.001
elif dif == 'b':
g = 0.01
elif dif == 'c':
g = 0.1

#Definimos la nave

tamanyo_nave = 10
x = anchura_paisaje/2
y = altura_paisaje - 100
vy = 0
impulso_y = 2*g
impuslo_x = 0.001
vx = 0
nave = create_filled_rectangle(x, y, x+tamanyo_nave, y+tamanyo_nave, 'blue')

#Plataforma
px = anchura_paisaje / 2
py = 75
if dif == 'a':
vpx = 0.05
anchura_plataforma = 40
altura_plataforma = 3
elif dif == 'b':
vpx = 0.1
anchura_plataforma = 30
altura_plataforma = 3
elif dif == 'c':
vpx = 1.15
anchura_plataforma = 25
altura_plataforma = 3

plataforma = create_filled_rectangle(px, py, px+anchura_plataforma, py+altura_plataforma, 'red')

#Tanque de combustible
fuel = 1000
consumo = 0.1
create_rectangle(0,altura_paisaje, 10, altura_paisaje-100, 'black')
if fuel >= 250:
lleno = create_filled_rectangle(1,altura_paisaje, 9, altura_paisaje-fuel/10, 'green')
else:
lleno = create_filled_rectangle(1,altura_paisaje, 9, altura_paisaje-fuel/10, 'red')

create_text(25, altura_paisaje-8, '0%', 10, 'W')
create_text(30, altura_paisaje-95, '100%', 10, 'W')

#Dial de velocidad
create_circle(anchura_paisaje-50, altura_paisaje-50, 50, 'black')
for i in range(0, 360, 10):
create_line(anchura_paisaje-50 + 40 * sin(i*pi/180), \
altura_paisaje-50 + 40 * cos(i*pi/180), \
anchura_paisaje-50 + 50 * sin(i*pi/180), \
altura_paisaje-50 + 50 * cos(i*pi/180))
if i % 30 == 0:
create_text(anchura_paisaje-50 + 30 * sin(i*pi/180), \
altura_paisaje-50 + 30 * cos(i*pi/180), str(i), 5, 'CENTER')

aguja = create_line(anchura_paisaje-50, altura_paisaje-50, \
anchura_paisaje-50 + 50 * sin(0*pi/180), \
altura_paisaje-50 + 50 * cos(0*pi/180), 'blue')

# Simulacion
while y > 0 and y 0 and x 0:
vy += impulso_y
fuel -= consumo
create_line(anchura_paisaje-x+tamanyo_nave/2, altura_paisaje-y, x+tamanyo_nave/2, y)
elif keypressed(1) == 'Left' and fuel > 0:
vx -= impulso_x
fuel -= consumo
create_line(anchura_paisaje-x, altura_paisaje-y-tamanyo_nave/2, x, y-tamanyo_nave/2)
elif keypressed(1) == 'Right' and fuel > 0:
vx += impulso_x
fuel -= consumo
create_line(x, y-tamanyo_nave/2, anchura_paisaje-x, altura_paisaje-y-tamanyo_nave/2)
y += vy
px += vpx
if px = anchura_paisaje - anchura_plataforma:
vpx = -vpx

move(nave, vx, vy)
move(plataforma, vpx, 0)
viejo_lleno = lleno
lleno = create_filled_rectangle(1, altura_paisaje, 9, altura_paisaje-fuel/10, 'green')
erase(viejo_lleno)
vieja_aguja = aguja
aguja = create_line(anchura_paisaje-50, altura_paisaje-50, \
anchura_paisaje-50 + 50 * sin(1000*vy*pi/180), \
altura_paisaje-50 + 50 * cos(1000*vy*pi/180), 'blue')
erase(vieja_aguja)

msg_x = anchura_paisaje / 2
msg_y1 = altura_paisaje / 2
msg_y2 = altura_paisaje / 3
if y >= altura_paisaje:
create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
create_text(msg_x, msg_y2, 'Rumbo a las estrellas?', 12, 'CENTER')
elif y <= 0 and vy = anchura_paisaje - tamanyo_anve or x <= 0:
create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
create_text(msg_x, msg_y2, 'Te has estrellado contra la pared', 12, 'CENTER')
elif x == plataforma_x and y == plataforma_y:
create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
create_text(msg_x, msg_y2, 'Te has estrellado contra la plataforma por debajo', 12, 'CENTER')
else:
create_text(msg_x, msg_y1, 'Ganaste', 24, 'CENTER')
create_text(msg_x, msg_y2, 'Enhorabuena piloto!', 12, 'CENTER')

Para obtener el juego es tan simple como copiar esto en un bloc de notas, guardarlo con la extensión ".py" y tener python instalado, luego lo ejecutas y debería salir, si no sólo os servirá para leer el código xD. El otro juego lo posteo esta noche.

Ahora el segundo juego, es una especie de Frontón electrónico, el jugador dispone de una pala en el inferior del plano y una pelota azul en la parte superior de la pantalla, la pelota baja con un movimiento diagonal, y cuando choca con las paredes la velocidad cambia de dirección, el objetivo es darle con la pala a la pelota el tiempo que seas capaz de aguantar.


#Fronton electrico

altura = 400
anchura = 400
window_coordinates(0, 0, altura, anchura)

#Definimos la pala
pala_x = 175
pala_y = 0
pala_altura = 3
pala_anchura = 50
vx = 0.1
impulso_px = 0.3
pala = create_filled_rectangle(pala_x, pala_y, pala_x+pala_anchura, pala_y+pala_altura, 'red')

#Definimos la pelota
pelota_x = 200
pelota_y = 350
vpx = -0.07
vpy = -0.09
impulso_y = 0.006
impulso_x = 0.006

pelota = create_filled_circle(pelota_x, pelota_y, 8, 'blue')

#Simulacion
while pelota_y > 0 and pelota_y = 0 and pelota_x <= 400:
pelota_y += vpy
pelota_x -= vpx
vieja_pelota = pelota
pelota = create_filled_circle(pelota_x, pelota_y, 8, 'blue')
erase(vieja_pelota)

if keypressed(1) == 'Left':
vx = -vx-impulso_px
elif keypressed(1) == 'Right':
vx += impulso_px

pala_x += vx
vieja_pala = pala
pala = create_filled_rectangle(pala_x, pala_y, pala_x+pala_anchura, pala_y+pala_altura, 'red')
erase(pala)

if pala_x == 400 or pala_x == 0:
vpx = -vpx
if pelota_x == 400 or pelota_x == 0:
vpx = -vpx
if pelota_y == 400:
vpy = -vpy
elif pelota_y == pala_y and pelota_x == pala_x:
vpy = -vpy+impulso_y
vpx += impulso_x

if pelota_y == 0:
create_text(350, 350, 'Perdiste', 24, 'CENTER')
create_text(300, 300, 'Tu pelota se colo por debajo', 12, 'CENTER')

About these ads

2 comentarios

  1. David Cantador said,

    tio!!! no me entero de na XD :P haber si algun dia me podrias explicar un poco :P jajajaj

    • Alex said,

      Jajajajaja, es cierto, no expliqué nada de ese código, pero hay varios comentarios a lo largo del programa, puedes leerlos para ir haciéndote una idea, o si quieres te lo cuento por msn o algo.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.