Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Tuplado en 10 de Noviembre 2012, 20:07
-
Hola chicos/as:
Estoy terminando un juego y solo me falta un detalle por hacer.
Les comento tengo un cuadrado azul que representa a una nave y meteoritos que van saliendo aleatoriamente.
Lo único que me queda es hacer que si la nave coge el espacio del meteorito, me ponga un mensaje en pantalla "Chocastes" y con la misma salga del juego.
Les facilito el código, otra cosa esto lo estoy haciendo en PythonG, se que es antiguo pero ya lo empece con este.
CÓDIGO FUENTE
===========
# EJERCICIO COMPLETO DEL LIBRO_Introducción a la programación con Python
_EJERCICIO 149
Andrés Marzal Isabel Gracia
Departamento de Lenguajes y Sistemas Informáticos
Universitat Jaume
------------------------------------------------------------------------------------------------
from modulepythong import *
from math import sin, cos, pi
import random
window_style('The Spaceship Game','white','TODO') # FONDO DE COLOR BLANCO
# Paisaje
altura_paisaje = 400
anchura_paisaje = 400
window_coordinates(0, 0, anchura_paisaje, altura_paisaje)
# Gravedad
g = 0.00001
# Nave
tamanyo_nave = 10
x = anchura_paisaje / 2
y = altura_paisaje - 100
vy = 0
impulso_y = 2*g
impulso_x = 0.00001
vx = 0
nave = create_filled_rectangle(x, y, x+tamanyo_nave, y+tamanyo_nave, 'blue')
# Plataforma
px = anchura_paisaje / 2
py = 0
vpx = .05
anchura_plataforma = 40
altura_plataforma = 3
plataforma = create_rectangle(px, py,px+anchura_plataforma, py+altura_plataforma, 'red')
# Tanque de combustible
color = "green" # combustible lleno
fuel = 1000
consumo = 0.01
create_rectangle(0,altura_paisaje, 10, altura_paisaje-100, 'black')
lleno = create_filled_rectangle(1,altura_paisaje, 9, altura_paisaje-fuel/10, color)
create_text(25, altura_paisaje-8, '0%', 10, 'W')
create_text(30, altura_paisaje-95, '100%', 10, 'W')
#---------------#
tamanyo_meteorito = 8
punto1=create_filled_circle(100,400,tamanyo_meteor ito,"red","brown")
g_m = 0.00001 #Gravedad del meteorito
vy_m = 0
y_m = 405
cord_x = 100
cord_y = 405
#----------------#
# 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 < altura_paisaje and x > 0 and x < anchura_paisaje - tamanyo_nave:
vy -= g
if keypressed(1) == 'Up' and fuel > 0:
vy += impulso_y
fuel -= consumo
if fuel < 350:
color = "red" # combustible vaciandose
elif keypressed(1) == 'Left' and fuel > 0:
vx -= impulso_x
fuel -= consumo
if fuel < 350:
color = "red" # combustible vaciandose
elif keypressed(1) == 'Right' and fuel > 0:
vx += impulso_x
fuel -= consumo
if fuel < 350:
color = "red" # combustible vaciandose
vy_m = vy_m-g_m
y_m+=vy_m
move(punto1,0,vy_m)
if y_m <= -2:
erase(punto1)
cord_x = random.randrange(0,400)
punto1 = create_filled_circle(cord_x, cord_y, 8,"red","brown")
y_m = 405
vy_m = 0
g_m = 0.00001
y += vy
x += vx
px += vpx
if px <= 0 or 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, color)
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 < -0.1:
create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
create_text(msg_x, msg_y2, 'Te has estrellado.', 12, 'CENTER')
elif y <= 0 and \
abs((px+anchura_plataforma/2)-(x+tamanyo_nave/2)) >= anchura_plataforma/2:
create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
create_text(msg_x, msg_y2, ' !Que mala puntería!', 12, 'CENTER')
elif x <= 0 or x >= anchura_paisaje - tamanyo_nave:
create_text(msg_x, msg_y1, 'Perdiste', 24, 'CENTER')
create_text(msg_x, msg_y2, 'Chocaste con la pared.', 12, 'CENTER')
else:
create_text(msg_x, msg_y1, 'Ganaste', 24, 'CENTER')
create_text(msg_x, msg_y2, ' !Enhorabuena, piloto!', 12, 'CENTER')
raw_input() # Espera a que pulses una tecla
------------------------------------------------------------------------------------------------
Muchas Gracias de antemano a todos
-
Intenté ejecutarlo pero ni siquiera he podido, por lo que he visto PythonG es un proyecto específico de la Universidad Jaume I que se abandonó en 2003, no sé si habrá gente que lo siga utilizando.
-
Hola Mastermind, y te lo agradezco, se que el programa ya esta desfazadisimo, pero lo empece con este y quiero acabarlo solo me qda ese detalle.
Mira me busque unos link para descagar el PythonG y la version de python compatible.
Aquí te los dejo:
http://www.mediafire.com/?kfonzec60va8rjr # PythonG
-----------------------------------------------------------------------------------------------------
http://www.mediafire.com/?ymay3b3bbm6uen6 # Versión de Python 2.3.2
http://www.python.org/download/releases/2.2.3/ # Página Oficial de Python
------------------------------------------------------------------------------------------------------
Y gracias por contestarme Mastermind, para mi terminar esto es todo un reto
-
Hola Mastermind, y te lo agradezco, se que el programa ya esta desfazadisimo, pero lo empece con este y quiero acabarlo solo me qda ese detalle.
Mira me busque unos link para descagar el PythonG y la version de python compatible.
Aquí te los dejo:
http://www.mediafire.com/?kfonzec60va8rjr # PythonG
http://www3.uji.es/~dllorens/downloads/pythong/ # Página Oficial de PythonG
-----------------------------------------------------------------------------------------------------
http://www.mediafire.com/?ymay3b3bbm6uen6 # Versión de Python 2.3.2
http://www.python.org/download/releases/2.2.3/ # Página Oficial de Python
------------------------------------------------------------------------------------------------------
Y gracias por contestarme Mastermind, para mi terminar esto es todo un reto
-
Yo plantearía lo siguiente: tienes una nave, y tienes un meteorito (o varios meteoritos).
Ahora lo que te hace falta es una variable (o dos, x e y ) donde en cada intervalo de tiempo del juego esté almacenada la posición de la nave, por ejemplo CoordNaveX y CoordNaveY y otra variable donde en cada momento del juego esté almacenada la posición del meteorito, por ejemplo CoordMeteoX y CoordMeteoY. Si tuvieras más de un meteorito necesitarás un array de meteoritos para almacenar la posición de cada uno de ellos.
Ahora en cada avance del intervalo de tiempo del juego tienes que comprobar mediante un condicional si la posición de la nave coincide con la posición de un meteorito. Si se cumple esa condición, deberás establecer a cero la velocidad de la nave y de los meteoritos (juego detenido) y hacer aparecer el mensaje "Chocastes" y un botón para salir del juego.
-
Gracias Mastermind, voy a intentarlo de esa manera, creo que ya lo hice una vez, pero no me coincidian bien las coordenadas, pero voy a intentarlo otra vez.
No lo hago con un array, porque solo utilizo un objeto pero bucleado aleatoriamente, por eso no lo hago con array, seme ocurre una idea tb, que se vaya imprimiendo en pantalla las coodenadas de ambas, tanto nave como meteorito y meterle una condicion if else
algo como esto:
if codenadas (coord_nave_x and coord_meteo_x) == (cood_nave_y and coord_meteo_y):
# No pasaría nada, aquí seguiría el juego
else:
print "HA CHOCADO"
erase(nave)
erase(meteorito)
exit()
¿No se podría ser un camino para hacerlo?
Un saludo Mastermind
-
Gracias Mastermind, voy a intentarlo de esa manera, creo que ya lo hice una vez, pero no me coincidian bien las coordenadas, pero voy a intentarlo otra vez.
No lo hago con un array, porque solo utilizo un objeto pero bucleado aleatoriamente, por eso no lo hago con array, seme ocurre una idea tb, que se vaya imprimiendo en pantalla las coodenadas de ambas, tanto nave como meteorito y meterle una condicion if else
algo como esto:
if codenadas (coord_nave_x and coord_meteo_x) != (cood_nave_y and coord_meteo_y):
# No pasaría nada, aquí seguiría el juego
else:
print "HA CHOCADO"
erase(nave)
erase(meteorito)
exit()
¿No se podría ser un camino para hacerlo?
Un saludo Mastermind
-
Tal y como yo lo veo la condición sería:
if coordenadas (coord_nave_x ) == coordenadas (coord_meteo_x) and coordenadas (coord_nave_y) == coordenadas (coord_meteo_y) :
print "HA CHOCADO"
erase(nave)
erase(meteorito)
exit()
else:
# No pasaría nada, aquí seguiría el juego
Es decir, si las coordenadas x de la nave coinciden con las coordenadas x del meteorito y las coordenadas y de la nave coinciden con las coordenadas y del meteorito, mostrar que ha chocado y salir. En caso contrario el juego continua.