Figuren verfolgen


Die Verfolgung von Spielfiguren wird bei der Spielprogrammierung oft verwendet. Dabei können sich die Figuren im Gitter, d.h.. von Zelle zur Zelle (Beispiel 1) oder auf dem geraden Weg zum verfolgten Objekt bewegen (Beispiel 2).

Beispiel 1: Ein Hai verfolgt Nemo

Der Nemo schwimmt horizontal hin und her und wird vom Hai verfolgt. Der Hai bewegt sich von Zelle zur Zelle jeweils in Richtung der aktuellen Nemo-Position.

  Der Hai kann bei jedem Schritt eine der 8 möglichen benachbarten Zellen wählen. Die optimale Richtung wird mit der Methode
getCompassDirectionTo() bestimmt.

Als Parameter erhält diese Methode die Position des verfolgten Objekts.
Damit der Hai den Nemo nicht sofort packt, bewegen wir den Hai nur jeden fünften Simulationszyklus.

 
# Gg7.py

from gamegrid import *


# --------------------- class Fish ---------------------
class Fish(Actor):
    def __init__(self):
        Actor.__init__(self, "sprites/snemo.gif")
 
    def act(self):
        self.move()
        if self.getX() == 9:
            self.turn(180)
            self.setHorzMirror(True)
        if self.getX() == 0:
            self.turn(180)
            self.setHorzMirror(False)


# --------------------- class Shark ---------------------
class Shark(Actor):
    def __init__(self):
        Actor.__init__(self, True, "sprites/shark.gif")
 
    def act(self):
        if self.nbCycles % 5 == 0 and not nemo.isRemoved():
            self.setDirection(self.getLocation().
                  getCompassDirectionTo(nemo.getLocation()))
            self.move()
        aNemo = getOneActorAt(self.getLocation(), Fish)
        if aNemo != None:
            aNemo.removeSelf()


makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif")
nemo = Fish()
addActor(nemo, Location(0, 1))
shark = Shark()
addActor(shark, Location(7, 9))
show()
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Erklärungen zum Programmcode:

if self.nbCykles % 5 == 0 : Der Hai bewegt sich nur jeden 5. Simulationszyklus
setDirection(self.getLocation().getCompassDirectionTo(nemo.getLocation())) Die Richtung des Hais wird auf eine der Kompass-Richtungen zum Nemo gesetzt

 


Aufgaben:

1)

Erzeuge einen Actor Fly() (fly.gif ), welcher mit den Cursortasten bewegt werden kann. Die Fliege wird durch den Actor Frog (frog.gif) verfolgt. Erzeuge ein Spielfeld mit 20 horizontalen und 20 vertikalen Zellen der Grösse 30 und grauen Gitterliniern.
Für die Verfolgung kannst du als Vorlage den Programmcode aus dem Beispiel 1 verwenden. Wenn der Frosch die Zelle, in der sich die Fliege befindet, erreicht hat, wird die Fliege gefressen.