Jython HomeDruckenJava-Online

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.

 

 
Ausführen mit Webstart
# 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

Beispiel 2: In Entwicklung