HomeTortue graphiqueGPanelRobotique WebTigerPython
 Python - Online
tictactoe
Deutsch   English   Français   

TIC TAC TOE

 

 

DESCRIPTION DU JEU

 

Tic-Tac-Toe est un jeu bien connu dans lequel deux joueurs placent à tour de rôle des croix ou des cercles dans les cases d'une grille de 3 × 3. Le but est d'être le premier à aligner trois de ses symboles horizontalement, verticalement ou en diagonale.

Pour marquer les cases, tu utilises les sprites mark_0.gif et mark_1.gif.
mark = Actor("sprites/mark.gif", 2)

 

Pour que le symbole change après chaque clic, tu introduis une variable player qui prend alternativement les valeurs 1 et 2. Dans le programme principal, tu attribues d'abord la valeur 1 à player. Pour pouvoir modifier la valeur de cette variable dans la fonction de rappel (callback), tu dois la déclarer comme variable globale (global player).

Dans la version la plus simple du jeu, les joueurs placent leurs symboles à tour de rôle et vérifient eux-mêmes le résultat.

Programme:

#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
► Copy to clipboard

 

 

POUR ALLER PLUS LOIN

 

Complète le jeu Tic-Tac-Toe en ajoutant une vérification de l'état du jeu. Ton programme doit annoncer lorsqu'un joueur a réussi à aligner trois de ses symboles sur une ligne, une colonne ou une diagonale. Si la partie se termine par un match nul, le titre de la fenêtre doit afficher « Board full ».

La vérification de l'état du jeu peut, par exemple, être effectuée après chaque coup à l'aide de l'astuce suivante :

 

L'occupation horizontale, verticale et diagonale du plateau de jeu est représentée par une chaîne de caractères contenant des groupes séparés par des virgules, sous la forme XOX,XX-,O-O,.... Les cases vides sont représentées par le caractère -.

Si la chaîne contient XXX ou OOO, cela signifie qu'un joueur a gagné.

Programme:

#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()
► Copy to clipboard