TigerJython xx
für Gymnasien

Labyrinth


Der Käfer kann mit den Cursortasten durch das Labyrinth gesteuert werden. Bei jedem Tastendruck bewegt er sich in die benachbarte Zelle in der entsprechenden Richtung. Das Ziel ist es, den Ausgang unten rechts zu erreichen.
 

Die Labyrinth-Vorlage wird als Objekt der Klasse GGMaze aus der Klassenbibliothek JGameGrid erzeugt. Das Labyrinth wird bei jedem Programmstart zufällig erstellt. Die Parameter nbHorzCell und nbVertCells bestimmen den Schwierigkeitsgrad des Spieles und können gewählt werden, wobei nur ungerade Zahlen erlaubt sind.

 

 

# Labyrinth.py

from gamegrid import *

def keyCallback(e):
    global isGameOver
    if isGameOver:
        return
    next = None
    keyCode = e.getKeyCode()
    if keyCode == KeyEvent.VK_LEFT:
        if bug.getLocation() == startLocation:
            return True
        next = bug.getLocation().getNeighbourLocation(180)
        bug.setDirection(180)
    if keyCode == KeyEvent.VK_UP:
        next = bug.getLocation().getNeighbourLocation(270)
        bug.setDirection(270)
    if keyCode == KeyEvent.VK_RIGHT:
        next = bug.getLocation().getNeighbourLocation(0)
        bug.setDirection(0)
    if keyCode == KeyEvent.VK_DOWN:
        next = bug.getLocation().getNeighbourLocation(90)
        bug.setDirection(90)

    if next != None and canMove(next):
        bug.setLocation(next)
        refresh()
    if next != None and next == exitLocation:
        isGameOver = True
        addActor(Actor("sprites/gameover.gif"), Location(15, 15))
        refresh()

def canMove(location):
    c = bg.getColor(location)
    return c != makeColor("black")

def drawMaze():
    for x in range(nbHorzCells):
        for y in range(nbVertCells):
            location = Location(x, y)
            if maze.isWall(location):
                bg.fillCell(location, Color.black)
            else:
                bg.fillCell(location, Color.white)
    return maze
    
# --------------------- main -----------------------------------------
nbHorzCells = 31  # must be odd
nbVertCells = 31  # ditto
cellSize = 18
isGameOver = False
 
makeGameGrid(nbHorzCells, nbVertCells, cellSize, False, keyPressed = keyCallback)
bg = getBg()
exitLocation = Location(nbHorzCells - 1, nbVertCells - 2)
maze = GGMaze(nbHorzCells, nbVertCells)
startLocation = maze.getStartLocation()
drawMaze()
bug = Actor(True, "sprites/ladybug.gif")
addActor(bug, startLocation)
show()  
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Erklärungen zum Programmcode:

Die Grösse des GameGrids wird durch die Wahl der Anzahl horizontalen und vertikalen Zellen festgelegt
Bei jedem Zug muss überprüft werden, ob sich der Käfer auf einem weissen Feld befindet, schwarze Felder sind Wände
Game Over wird angezeigt, wenn der Käfer die ExitLocation erreicht hat. Diese kann aus der Anzahl der vertikalen und horizontalen Zellen berechnet werden