Seuraava koodi, vaikkei aivan toimikaan, tekee kohdistinolion, jolle annetaan siirtymiskäskyt numeronäppiksellä. Painettaessa numeroa kohdistin siirtyy aina kohdealueen siihen yhdeksänteen mihin numero osoittaa ja valitsee uuden alueen uudeksi kohdealueeksi. Alue on jaettu yhdeksään osaan kuten numeronäppäimistö:
789
456
123
ja nolla palauttaa alkuperäisen alueen ja kohdistimen sen keskelle (sekä tulostaa koordinaatit ennen palautusta, debuggaustietoa, juu).

Kaipaa PyGamen (http://www.pygame.org/) alleen.

    1 class Kohdistin(pygame.sprite.Sprite):
    2         def __init__(self, area=None):

    3                 pygame.sprite.Sprite.__init__(self)
    4                 self.image, self.rect = load_image('kohdistin.png', -1)

    5                 self.rect.center = area.center
    6                 self.area = area

    7                 self.effective_area = pygame.Rect(area)
    8                 self.x, self.y = area.center

    9         def update(self):
   10                 pass

   11         def siirry(self, i):

   12                 if i<0 or i>9: return self.effective_area

   13                 if i==0:
   14                         # nolla palauttaa kohdistimen keskelle ja
   15                         # vaikutusalueen koko alueeksi

   16                         print self.x, self.y
   17                         self.x, self.y = self.area.center

   18                         self.effective_area = pygame.Rect(self.area)

   19                         self.rect.center = self.effective_area.center

   20                         return self.effective_area
   21                 # jaetaan komponentteihin ix ja iy
   22                 iy=(i-1)/3

   23                 ix=i-iy*3
   24                 iy+=1

   25 
   26                 # jaetaan nykyinen alue 3*3-ruudukkoon
   27                 new_width=self.effective_area.width/3

   28                 new_height=self.effective_area.height/3
   29 
   30                 # siirretään vaikutusalue haluttuun osa-alueeseen

   31                 self.effective_area.move_ip(new_width*(ix-2), new_height*-(iy-2))

   32                 self.effective_area.inflate_ip(new_width*-2, new_height*-2)

   33 
   34                 # siirrytään uuden alueen keskelle
   35                 self.x, self.y = self.effective_area.center

   36                 self.rect.center=self.effective_area.center
   37 

   38                 return self.effective_area

Kuinkahan monta kertaa tämä on jo keksitty? :-)


(last modified 2003-06-12 16:12:36)