Ein Frosch soll die beiden Strassen überqueren, ohne überfahren zu werden. In unserer Implementierung wird der Frosch bei Kollision mit einem Auto nicht "richtig" überfahren, sondern jeweils an die Startposition am unteren Rand des Fensters zurückversetzt, wo er einen neuen Versuch starten kann. Wenn er den grünen Streifen am oberen Rand des Fensters erreicht hat, hat er das Ziel erreicht.
Die Geschwindigkeit kann angepasst werden, indem man die Simulationsperiode (50) ändert. | ![]() |
| Die Sprites "lane.gif" (Hintergrund), "frog.gif", "car1.gif" , "car2.gif", .... "car19.gif", sowie die Sounddatei "frog.wav" stehen im TigerJython zur Verfügung. |
from gamegrid import * import random from soundsystem import * # ------------- class Car ------------------------------- class Car(Actor): def __init__(self, carNb): Actor.__init__(self, ["sprites/car" + str(carNb) + ".gif"]) def act(self): self.move() if self.getLocation().x < -100: self.setLocation(Location(1650, self.getLocation().y)) if self.getLocation().x > 1650: self.setLocation(Location(-100, self.getLocation().y)) # --------------------- class Frogg --------------------- class Frog(Actor): def __init__(self): Actor.__init__(self, True, "sprites/frog.gif") def act(self): if self.getY() > 10 and self.getY() < 25: play() def collide(self, actor1, actor2): play() actor1.setLocation(Location(400, 560)) return 0 # ------------- key ------------------------------- def keyCallback(e): keyCode = e.getKeyCode() if keyCode == 37: # left frog.setLocation(Location(frog.getLocation().x - 5, frog.getLocation().y)) elif keyCode == 38: # up frog.setLocation(Location(frog.getLocation().x, frog.getLocation().y - 5)) elif keyCode == 39: # right frog.setLocation(Location(frog.getLocation().x + 5, frog.getLocation().y)) elif keyCode == 40: # down frog.setLocation(Location(frog.getLocation().x, frog.getLocation().y + 5)) # ------------- main ------------------------------- makeGameGrid(800, 600, 1, None,"sprites/lane.gif", False, keyPressed = keyCallback) frog = Frog() addActor(frog, Location(400, 560)) cars = [] for i in range(20): cars.append(Car(i)) for i in range(1, 5): cars[i].setHorzMirror(True) frog.addCollisionActor(cars[i]) addActor(cars[i], Location(350 * i, 90), Location.WEST) for i in range(5, 10): frog.addCollisionActor(cars[i]) addActor(cars[i], Location(350 * (i - 5), 350), Location.WEST); for i in range(10, 15): frog.addCollisionActor(cars[i]) addActor(cars[i], Location(350 * (i - 10), 220), Location.EAST); for i in range(15, 20): cars[i].setHorzMirror(True) frog.addCollisionActor(cars[i]) addActor(cars[i], Location(350 * (i - 15), 480), Location.EAST); show() setSimulationPeriod(50) openSoundPlayer("wav/frog.wav") doRun() |
Erklärungen zum Programmcode:
| class Car(Actor) definiert Autos, die sich vom linken zum rechten Rand oder umgekehrt bewegen. Bei Autos, die von rechts nach links fahren, muss das Spritebild gespiegelt werden | |
| Die Kollision wird in der Klasse Frog definiert. Bei einer Kollision wird der Frog an die Position (400, 560) zurückversetzt, die Autos bewegen sich weiter. | |
| keyCallback(): definiert die Bewegung des Frogs, wenn eine der Cursortaste gedrückt wurde. KeyCallback wird in makeGameGrid() registriert. | |
| setSimulationPeriod(50): die Geschwindigkeit der fahrenden Autos kann angepasst werden | |
| Wenn der Frog mit einem Car kollidiert sowie wenn er das Ziel erreicht hat, wird der Sound frow.wav abgespielt |
Aufgaben:
| Ändere die Bewegungsrichtung der Autos so, dass sich diese wie auf einer zweispurigen Autobahn bewegen | |
| Die Lastwaren und Cars sollen auf der rechten Spur fahren, die übrigen Autos links. |