SPIELBESCHREIBUNG |
Damit die Marke nach jedem Klick umschaltet, führst du eine Variable player ein, die zwischen dem Wert 1 und 2 umschaltet. Im Hauptprogramm ordnest du dem player zuerst den Wert 1 zu. Damit du den Wert der Variable in der Calbackfunktion verändern kannst, musst du sie als global bezeichnen (global player). In der einfachsten Version des Spieles setzen die Spieler abwechslungsweise ihre Marken und kontrollieren selbst das Ergebnis. Programm: #TicTacToe.py from gamegrid import * def onMousePressed(e): global player loc = toLocationInGrid(e.getX(), e.getY()) if getOneActorAt(loc) != None: return mark = Actor("sprites/mark.gif", 2) addActor(mark, loc) if player == 1: mark.show(0) player = 2 elif player == 2: mark.show(1) player = 1 makeGameGrid(3, 3, 70, Color.black, False, mousePressed = onMousePressed) setBgColor(makeColor("yellow")) show() doRun() player = 1 |
ZUSATZSTOFF |
Die Überprüfung der Spielsituation kann zum Beispiel nach jedem Zug mit folgendem Trick erfolgen: Die horizontale, vertikale und diagonale Belegung des Spielbretts wird in einem kommagetrennten Stringmuster der Form XOX,XX- ,O-O, ... dargestellt (leere Zellen erhalten das Zeichen '-'). Wenn XXX bzw. OOO in diesem String vorkommen, hat ein Spieler gewonnen. Programm: #TicTacToe2.py from gamegrid import * def onMousePressed(e): global player loc = toLocationInGrid(e.getX(), e.getY()) if getOneActorAt(loc) != None: return mark = Actor("sprites/mark.gif", 2) addActor(mark, loc) if player == 1: mark.show(0) player = 2 elif player == 2: mark.show(1) player = 1 checkGameState() refresh() def setPattern(x, y): global pattern location = Location(x, y) a = getOneActorAt(location) if a == None: pattern += '-' elif a.getIdVisible() == 0: pattern += 'O' elif a.getIdVisible() == 1: pattern += 'X' def checkGameState(): # Convert board state into string pattern global pattern pattern = "" # Horizontal for y in range(3): for x in range(3): setPattern(x, y) pattern += ',' # Separator # Vertical for x in range(3): for y in range(3): setPattern(x, y) pattern += ',' # Diagonal for x in range(3): setPattern(x, x); pattern += ',' for x in range(3): setPattern(x, 2 - x); if "XXX" in pattern: setTitle("X won") elif "OOO" in pattern: setTitle("O won") elif not "-" in pattern: setTitle("Board full") makeGameGrid(3, 3, 70, Color.black, False, mousePressed = onMousePressed) setBgColor(makeColor("yellow")) player = 1 show() doRun() |
![]() |
![]() |
![]() |