• Jueves 27 de Enero de 2022, 16:01

Autor Tema:  Duda_Python_Juego  (Leído 1380 veces)

Tuplado

  • Visitante
Duda_Python_Juego
« en: Sábado 10 de Noviembre de 2012, 20:02 »
0
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: Sábado 10 de Noviembre de 2012, 20:23 por Tuplado »

ibito

  • Miembro HIPER activo
  • ****
  • Mensajes: 552
  • Nacionalidad: mx
  • Se mas de C++ que lo que se de ese CSS
    • Ver Perfil
    • http://www.ibquezada.com
Re:Duda_Python_Juego
« Respuesta #1 en: Domingo 11 de Noviembre de 2012, 04:19 »
0
Lo que pides es colisiones, debes verificar en cada fase del ciclo si cualquiera de los meteoritos está en el área de tu nave, esto lo logras con un loop.

Busca mas al respecto sobre detección de colisiones, no se si exista mucha información al respecto en python, pero como quiera lo traduces.

Sugerencia: POO  :suerte:
______________________________________
www.hazjuegos.com Una comunidad dedicada al desarrollo de videojuegos.

Tuplado

  • Visitante
Re:Duda_Python_Juego
« Respuesta #2 en: Domingo 11 de Noviembre de 2012, 13:38 »
0
Nooo, que va con loop no, estoy empezando, además quiero terminarlo con PythonG, pero de todos modos muchas gracias