verfolgung

7. VERFOLGUNG

 

 

DU LERNST HIER...

 

wie sich Figuren im Gitter, d.h.. von Zelle zur Zelle zum verfolgten Objekt bewegen können.

 

 

MUSTERBEISPIELE

 

 

Beispiel1: 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.

Programm:

# 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()
doRun()
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Der Verfolger kann bei jedem Schritt eine der 8 möglichen benachbarten Zellen wählen. Die optimale Richtung wird mit der Methode getCompassDirectionTo() bestimmt. Um den Verfolger lansamer zu bewegen, kannst du in seiner Methode act() die Bewegung nur in jedem fünften Simulationszyklus ausführen.

 

 

ZUM SELBST LÖSEN

 

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.