Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/05/2010, 07:24
SamuraiBlanco
 
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.