71 lines
1.8 KiB
PHP
71 lines
1.8 KiB
PHP
<?php
|
|
session_start();
|
|
|
|
include_once 'helpers.php';
|
|
|
|
// Si on demande une nouvelle partie, on réinitialise l'état stocké
|
|
// en session puis on recharge la page sans paramètre.
|
|
if (isset($_GET['reset'])) {
|
|
initializeGame();
|
|
header('Location: .');
|
|
exit;
|
|
}
|
|
|
|
if (!isset($_SESSION['grid']) || !isset($_SESSION['playerTurn'])) {
|
|
initializeGame();
|
|
}
|
|
|
|
// Variables transmises à la vue.
|
|
$message = '';
|
|
$grid = $_SESSION['grid'];
|
|
$playerTurn = (int) $_SESSION['playerTurn'];
|
|
|
|
$winner = getWinner($grid);
|
|
$isGameOver = $winner !== 0 || noWinner($grid);
|
|
|
|
// On joue uniquement si la partie est encore en cours.
|
|
if (!$isGameOver && isset($_GET['pos'])) {
|
|
$pos = filter_input(
|
|
INPUT_GET,
|
|
'pos',
|
|
FILTER_VALIDATE_INT,
|
|
array('options' => array('min_range' => 0, 'max_range' => 8))
|
|
);
|
|
|
|
if ($pos === false || $pos === null) {
|
|
$message = 'Coup invalide.';
|
|
} elseif ($grid[$pos] !== 0) {
|
|
$message = 'Cette case est déjà occupée.';
|
|
} else {
|
|
// On enregistre le coup du joueur courant dans la grille.
|
|
$grid[$pos] = $playerTurn;
|
|
|
|
if (isWinner($grid, $playerTurn)) {
|
|
$message = "Le joueur $playerTurn gagne la partie.";
|
|
} elseif (noWinner($grid)) {
|
|
$message = 'Match nul.';
|
|
} else {
|
|
$playerTurn = nextPlayer($playerTurn);
|
|
}
|
|
|
|
$_SESSION['grid'] = $grid;
|
|
$_SESSION['playerTurn'] = $playerTurn;
|
|
}
|
|
|
|
$winner = getWinner($grid);
|
|
$isGameOver = $winner !== 0 || noWinner($grid);
|
|
}
|
|
|
|
// Si la page est simplement rafraîchie, on recalcule un message cohérent
|
|
// à partir de l'état stocké en session.
|
|
if ($message === '') {
|
|
if ($winner !== 0) {
|
|
$message = "Le joueur $winner gagne la partie.";
|
|
} elseif (noWinner($grid)) {
|
|
$message = 'Match nul.';
|
|
}
|
|
}
|
|
|
|
include_once './views/tictactoe.php';
|
|
|