Autor Tema: Duda PythonG Juego naves y meteoritos  (Leído 8629 veces)

Tuplado

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Duda PythonG Juego naves y meteoritos
« 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

------------------------------------------------------------------------------------------------

Código: [Seleccionar]
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
« Última modificación: 20 de Septiembre 2014, 18:43 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Duda_Python_Juego
« Respuesta #1 en: 10 de Noviembre 2012, 20:59 »
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.

Tuplado

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Re:Duda_Python_Juego
« Respuesta #2 en: 11 de Noviembre 2012, 01:06 »
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
« Última modificación: 11 de Noviembre 2012, 01:27 por Tuplado »

Tuplado

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Re:Duda_Python_Juego
« Respuesta #3 en: 11 de Noviembre 2012, 13:35 »
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

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Duda_Python_Juego
« Respuesta #4 en: 11 de Noviembre 2012, 21:11 »
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.

Tuplado

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Re:Duda_Python_Juego
« Respuesta #5 en: 12 de Noviembre 2012, 01:25 »
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:

Código: [Seleccionar]
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

Tuplado

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Re:Duda_Python_Juego
« Respuesta #6 en: 12 de Noviembre 2012, 14:58 »
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:

Código: [Seleccionar]
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

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Duda_Python_Juego
« Respuesta #7 en: 12 de Noviembre 2012, 21:27 »
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.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".