HomeTurtlegrafikGPanelRobotikGameGrid WebTigerPython
 Python - Online
tictactoe

TIC TAC TOE

 

 

SPIELBESCHREIBUNG

 

Tic-Tac-Toe ist ein bekanntes Spiel, bei dem zwei Spieler abwechslungsweise Kreuze oder Kringel in die Felder eines 3x3-Gitters setzen mit dem Ziel, als erster drei eigene Zeichen in einer horizontalen, vertikalen Linie oder einer der Diagonalen zu haben.

Für die Markierung der Felder verwendest du die Sprites mark_0.gif und mark_1.gif.
mark = Actor("sprites/mark.gif", 2)

 

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
► In Zwischenablage kopieren

 

 

ZUSATZSTOFF

 

Ergänze das Tic-Tac-Toe-Spiel mit einer Überprüfung der Spielsituation, d.h. dein Programm muss melden, wenn ein Spieler in einer Zeile, Spalte oder Diagonale drei seine Marken platzieren konnte. Wenn das Spiel unentschieden endet, sollte im Titel "Board full" erscheinen.

 

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