pilas.actores.tortuga

Package pilas :: Package actores :: Module tortuga |
[hide private]
[frames] | no frames]

# Source Code for Module pilas.actores.tortuga

      1  # -*- encoding: utf-8 -*-
      2  # Pilas engine - A video game framework.
      3  #
      4  # Copyright 2010 - Hugo Ruscitti
      5  # License: LGPLv3 (see http://www.gnu.org/licenses/lgpl.html)
      6  #
      7  # Website - http://www.pilas-engine.com.ar
      8
      9  import pilas
     10  from pilas.actores import Actor
     11
     12
     13 -class Tortuga(Actor):
     14      """Representa una tortuga que se puede mover por la pantalla.
     15
     16      Este actor está profundamente inspirado por la tortuga de Logo, creada
     17      por Seymour Papert en el año 1967.
     18      """
     19
     20 -    def __init__(self, x=0, y=0, dibuja=True):
     21          """Inicializa la tortuga.
     22
     23          :param x: Posición horizontal inicial.
     24          :param y: Posición vertical inicial.
     25          :param dibuja: Indica si a tortuga dejará marcada una linea al moverse.
     26          """
     27          self.pizarra = pilas.actores.Pizarra()
     28
     29          imagen = pilas.imagenes.cargar('tortuga.png')
     30          Actor.__init__(self, imagen, x=x, y=y)
     31
     32          self.rotacion = 0
     33          self.velocidad = 6
     34
     35          self.anterior_x = x
     36          self.anterior_y = y
     37
     38          if dibuja:
     39              self.bajalapiz()
     40          else:
     41              self.subelapiz()
     42
     43          self.color = pilas.colores.negro
     44
     45 -    def avanzar(self, pasos):
     46          """Se mueve hacia adelante la cantidad de pasos indicada.
     47
     48          :param pasos: Los pasos que debe avanzar.
     49          """
     50          self.hacer_luego(pilas.comportamientos.Avanzar(pasos, self.velocidad))
     51
     52 -    def giraderecha(self, delta):
     53          """Da un giro hacia la derecha de la tortuga.
     54
     55          :param delta: Los grados que digará en ese sentido.
     56          """
     57          self.hacer_luego(pilas.comportamientos.Girar(abs(delta), self.velocidad))
     58
     59 -    def giraizquierda(self, delta):
     60          """Realiza un giro hacia la izquierda.
     61
     62          :param delta: Los grados que digará en ese sentido.
     63          """
     64          self.hacer_luego(pilas.comportamientos.Girar(-abs(delta), self.velocidad))
     65
     66 -    def actualizar(self):
     67          """Actualiza su estado interno."""
     68          if self.anterior_x != self.x or self.anterior_y != self.y:
     69              self.dibujar_linea_desde_el_punto_anterior()
     70              self.anterior_x = self.x
     71              self.anterior_y = self.y
     72
     73 -    def dibujar_linea_desde_el_punto_anterior(self):
     74          """Realiza el trazado de una linea desde su posición actual hacia la anterior."""
     75          self.pizarra.linea(self.anterior_x, self.anterior_y, self.x, self.y, self.color, grosor=4)
     76
     77 -    def bajalapiz(self):
     78          """Le indica a la tortuga si debe comenzar a dibujar con cada movimiento."""
     79          self.lapiz_bajo = True
     80
     81 -    def subelapiz(self):
     82          """Le indica a la tortuga que deje de dibujar con cada movimiento."""
     83          self.lapiz_bajo = False
     84
     85 -    def pon_color(self, color):
     86          """Define el color de trazado cuando comienza a moverse."""
     87          self.color = color
     88
     89 -    def crear_poligono(self, lados=4, escala=100, sentido=-1):
     90          """dibuja un poligono de lados de los lados indicados.
     91
     92          :param lados: La cantidad de lados a dibujar.
     93          :param escala: El tamaño del polígono a dibujar.
     94          :param sentido: El sentido de dibujado, -1 indica hacia la izquierda y 1 hacia la derecha.
     95          """
     96
     97          for i in range(lados):
     98              rotacion = 360 / lados
     99              self.avanzar(escala)
    100              if sentido == 1:
    101                  self.giraderecha(rotacion)
    102              else:
    103                  self.giraizquierda(rotacion)
    104
    105 -    def crear_circulo(self, radio=30, sentido=-1):
    106          """Dibuja un circulo.
    107
    108          :param radio: El radio que deberá tener el circulo.
    109          :param sentido: El sentido de dibujado, -1 indica hacia la izquierda y 1 hacia la derecha.
    110          """
    111          for i in range(36):
    112              self.avanzar(radio)
    113              if sentido == 1:
    114                  self.giraderecha(10)
    115              else:
    116                  self.giraizquierda(10)
    117
    118      # Alias de metodos
    119      av = avanzar
    120      gd = giraderecha
    121      gi = giraizquierda
    122      bl = bajalapiz
    123      sl = subelapiz
    124      pc = pon_color
    125
    126 -    def get_color(self):
    127          """Retorna el color que se utilizará para trazar."""
    128          return self._color
    129
    130 -    def set_color(self, color):
    131          """Define el color que se utilizará para trazar.
    132
    133          :param color: El color a utilizar.
    134          """
    135          self._color = color
    136
    137      color = property(get_color, set_color)
    138
    139 -    def pintar(self, color=None):
    140          """Pinta todo el fondo de un solo color.
    141
    142          :param color: El color que se utilizará para pintar el fondo.
    143          """
    144          self.pizarra.pintar(color)
    145