Foros del Web » Programando para Internet » Python »

Ayuda con un juego en python trutle

Estas en el tema de Ayuda con un juego en python trutle en el foro de Python en Foros del Web. Buenos dias a todos los foristas. Actualmente estoy ayudando a realizar un juego en python turtle para enseñar a programar a los niños. Tengo un ...
  #1 (permalink)  
Antiguo 21/05/2010, 07:24
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años, 7 meses
Puntos: 0
Ayuda con un juego en python trutle

Buenos dias a todos los foristas. Actualmente estoy ayudando a realizar un juego en python turtle para enseñar a programar a los niños. Tengo un cierto dolor de cabeza teorico dado que no tengo clara la manera en que se pasan los parametros entre los metodos de una clase en Python. Por otro lado desconosco algunos metodos para poder validar las ejecuciones de funciones, en las llamadas onkey(funcion, "letra") Aqui dejo el codigo del programa y explico lo que quisiera hacer.


Código Python:
Ver original
  1. #Por Victor Teran
  2. from turtle import *
  3. import time
  4. FORCE_UNIT = 0.1
  5. class entorno(Turtle):
  6.    
  7.     def __init__(self, pantalla):
  8.         #Turtle.__init__(self)
  9.         self.pantalla = Screen()
  10.         self.writer = Turtle()
  11.         #self.tiempo = time()      
  12.     def cargar_principal(self):
  13.         self.pantalla.setup(250,500)
  14.         self.pantalla.bgpic("cancha.gif")
  15.    
  16.     def decision(self):
  17.         ht()
  18.         self.writer.write("Presione 1 'modo vs PC' y 2 'modo vs amigo'", move=False, align='center', font=("Arial",8,"normal"))
  19.         self.writer.ht()
  20.         moduno = self.pantalla.onkey(self.modo1,"1")               
  21.         moddos = self.pantalla.onkey(self.modo2,"2")
  22.         If moduno = True
  23.             return "Hello world"
  24.         elif moddos = True:
  25.             return "Hello w2"
  26.         listen()
  27.        
  28.     def modo1(self):
  29.         self.writer.up()
  30.         self.writer.goto (0,-50)
  31.         self.writer.hideturtle()
  32.         self.writer.write("Modo 1 seleccionado", move=False, align='center', font=("Arial",8,"normal"))
  33.         #self.tiempo.sleep(0.5)
  34.         self.writer.reset()
  35.         self.writer.hideturtle()
  36.         self.writer.up()
  37.         self.writer.goto (0,-50)
  38.         self.writer.write("Juega con Derecha e izquierda", move=False, align='center', font=("Arial",8,"normal"))
  39.        
  40.     def modo2(self):
  41.         self.writer.up()
  42.         self.writer.goto (0,50)
  43.         self.writer.hideturtle()
  44.         self.writer.write("Modo dos seleccionado", move=False, align='center', font=("Arial",8,"normal"))
  45.         #self.tiempo.sleep(0.5)
  46.         self.writer.reset()
  47.         self.writer.hideturtle()
  48.         self.writer.up()
  49.         self.writer.goto (0,-70)
  50.         self.writer.write("Juegador1 = Derecha e izquierda", move=False, align='center', font=("Arial",8,"normal"))
  51.         self.writer.goto (0,-80)
  52.         self.writer.write("Jugador2 = A y D", move=False, align='center', font=("Arial",8,"normal"))
  53.         #self.tiempo.sleep(0.5)
  54.        
  55. class jugador(Turtle):
  56.    
  57.     def __init__(self,):
  58.         #self.p = Pen()
  59.         self.player = Turtle() 
  60.        
  61.     def ubicarse_abajo(self):  
  62.         #ubicarse
  63.         self.player.up()
  64.         #self.player1.shape("square")      
  65.         self.player.goto(0,-180)
  66.         #fin de ubicacion      
  67.        
  68.     def ubicarse_arriba(self):
  69.         #moviendo pincel
  70.         self.player.up()
  71.         #self.player2.shape("square")
  72.         self.player.goto(0, 180)
  73.        
  74.     def izquierda(self,vx,vy):
  75.         vista1 = self.player.heading()
  76.         if not(vista1 == 180.0):
  77.             self.player.setheading(180)
  78.  
  79.         x,y=pos()
  80.         from math import sin, cos, pi
  81.         alpha = self.player.heading() * pi / 180.0
  82.         vx += FORCE_UNIT * cos(alpha)
  83.         vy += FORCE_UNIT * sin(alpha)
  84.        
  85.        
  86.     def derecha(self):
  87.         vista2 = self.player.heading()
  88.         if not (vista1 == 0.0):
  89.             self.player.setheading(0.0)
  90.         global vx, vy
  91.         from math import sin, cos, pi
  92.         alpha = heading() * pi / 180.0
  93.         vx += FORCE_UNIT * cos(alpha)
  94.         vy += FORCE_UNIT * sin(alpha)  
  95.        
  96.  
  97.  
  98. def main():
  99.    
  100.     V=entorno(Turtle)
  101.     V.decision()
  102.     V.cargar_principal()
  103.     J1=jugador()
  104.     J2=jugador()
  105.     J1.ubicarse_abajo()
  106.     J2.ubicarse_arriba()
  107.     onkey(J2.izquierda(vx,vy),"A")
  108.    
  109.     return True
  110. if __name__=='__main__':
  111.     main()
  112.     mainloop()
  113.     pass

La idea es que cuando la persona presione en 1 o 2, selecione un modo de juego. Y inmediatamente se bloquee el 1, lo ideal es hacerlo con un "If", pero ando con la duda de como evaluar si uno de los eventos ya ocurrio, para poder desencadenar sus tareas. Por otro lado, quisiera introducir un retardo de 3 seg entre cada mensaje para que quede vacia la cancha, estaba tratando de utilizar la funcion sleep, pero no se me ha ocurrido la manera de pasarla a la clase entorno cuando la vaya a usar y en cuanto a la parte de las variables vx, vy ; no entiendo bien como pasarlas al metodo correctamente.Espero sepan disculpar mi ignorancia, pero estoy aprendiendo y agradezco la colaboracion de la comunidad en esta labor. De antemano gracias.
  #2 (permalink)  
Antiguo 23/05/2010, 16:45
Avatar de Bosc  
Fecha de Ingreso: marzo-2010
Mensajes: 43
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Ayuda con un juego en python trutle

¿ Como vas a enseñar a los niños algo que no sabes ?
  #3 (permalink)  
Antiguo 24/05/2010, 07:46
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con un juego en python trutle

Creo haber dicho que soy ignorante con respecto a muchos de los métodos de Python. Básicamente, estoy aprendiendo este lenguaje a los golpes.

Se que tengo que declarar los métodos y propiedades de cada clase que luego heredaran sus objetos. A partir de estos métodos el jugador o los jugadores se moverán de derecha a izquierda, o viceversa, se les colocara el color especifico del modo de juego y se podrá saber su posición en todo momento en el campo de juego.

Turtle por lo menos tiene un método que permite obtener la posicion de la tortuga en un momento determinado. Si no me equivoco es pos(), a partir de alli puedo realizar una validación de posición para detectar las colisiones. Algo como

if pos.jugador1 = ball.pos:
colisión existente
tarea de movimiento.

Por otro lado, ya tengo listos los controles horizontales de la tortuga para el jueguito, pero el detalle viene al insertarlo en el código que mostré anteriormente. Las pruebas aisladas funcionan pero aun no entiendo como realizar la invocación de ciertas variables o parámetros. De todas maneras gracias por el golpe a mi ego Bosc. No hay rencor.
  #4 (permalink)  
Antiguo 24/05/2010, 20:34
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Ayuda con un juego en python trutle

Podrías hacer el menú con tkinter y después mandar a llamar tu código.
  #5 (permalink)  
Antiguo 25/05/2010, 07:30
 
Fecha de Ingreso: marzo-2010
Ubicación: Mérida, Venezula
Mensajes: 73
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ayuda con un juego en python trutle

Gracias razpetia. Muy amable en contestar. Al fin resolví con una caja de entrada y manejando los eventos de la misma con los métodos set y get. Ya resolví también el problema de movimiento de los jugadores. Aquí dejo el código. Ahorita estoy agregando las colisiones y los limites de la cacha.
Código Python:
Ver original
  1. #Pong por Francisco Palm y Victor Teran
  2. from turtle import *
  3. import time
  4.  
  5. class entorno(Turtle):
  6.     def __init__(self, pantalla, modo=None):
  7.         self.pantalla = Screen()
  8.         self.pelota = Turtle()
  9.         self.set_modo(modo)
  10.        
  11.        
  12.     def set_modo(self, value):
  13.         self._modo = int(numinput("Modo de Juego", "Presione 1 'modo vs PC' y 2 'modo vs amigo", 1, 1, 2)) 
  14.        
  15.     def get_modo(self):
  16.         return self._modo  
  17.    
  18.     def cargar_principal(self):
  19.         self.pantalla.setup(250,500)
  20.         self.pantalla.bgpic("cancha.gif")
  21.    
  22. class jugador(Turtle):
  23.    
  24.     def __init__(self, posi=None):
  25.         self.player = Turtle() 
  26.         self.set_posi(position)
  27.    
  28.     def set_posi(self, value):
  29.         self._position = self.player.pos() 
  30.    
  31.     def get_posi(self):
  32.         return self._position
  33.        
  34.     def ubicarse_abajo(self):  
  35.         #ubicarse
  36.         self.player.up()
  37.         self.player.shape("square")    
  38.         self.player.goto(0,-180)
  39.         #fin de ubicacion      
  40.        
  41.     def ubicarse_arriba(self):
  42.         #ubicarse
  43.         self.player.up()
  44.         self.player.shape("square")
  45.         self.player.goto(-80, 180)
  46.         #fin de ubicacion
  47.        
  48.     def izquierda(self):
  49.         vista = self.player.heading()
  50.         if not(vista == 180.0):
  51.             self.player.ht()
  52.             self.player.setheading(180)
  53.             self.player.st()
  54.             self.player.fd(8)      
  55.         else:
  56.             self.player.fd(8)  
  57.    
  58.        
  59.     def derecha(self):
  60.         vista = self.player.heading()
  61.         if not (vista == 0.0):
  62.             self.player.ht()
  63.             self.player.setheading(0.0)
  64.             self.player.st()
  65.             self.player.fd(8)
  66.         else:
  67.             self.player.fd(8)
  68.    
  69. def main():
  70.     V=entorno(Turtle)
  71.     V.cargar_principal()
  72.     J1=jugador()
  73.     J2=jugador()
  74.     J1.ubicarse_abajo()
  75.     J2.ubicarse_arriba()
  76.    
  77.        
  78.     if V.get_modo() == 1:
  79.        
  80.         onkey(J1.derecha,"Right")
  81.         onkey(J1.izquierda, "Left")
  82.         if J1.get_posi()==():
  83.         V.pantalla.listen()
  84.        
  85.     elif V.get_modo() == 2:
  86.        
  87.         onkey(J1.derecha,"Right")
  88.         onkey(J1.izquierda, "Left")
  89.         onkey(J2.derecha, "d")
  90.         onkey(J2.izquierda,"a")
  91.         V.pantalla.listen()
  92.                
  93.     return "EVENTLOOP"
  94.    
  95. if __name__=='__main__':
  96.     main()
  97.     mainloop()
  98.     pass

En caso de que lo quiera probar, comenten los set y get "posi" y la linea de la imagen posterior bgpic.

Etiquetas: juegos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:47.