APPLICATION WEB EN TEMPS REEL

Thème d'étude

Objectif à atteindre

Le but est de créer une application web en temps réel. On se propose de programmer, à titre d'exercice, un jeu basique dans sa version la plus simple. Le jeu du morpion, par exemple, correspond à ce critère.

Ce TP invite à développer une solution sans chercher à l'imposer, sachant qu'il en existe d'autres.

Régles du jeu

Le jeu du morpion est un jeu de réflexion se pratiquant à deux joueurs au tour par tour. Le premier joueur parvenant à aligner trois pions sur une grille de neuf cases gagne la partie.

Déroulement du jeu

  1. Deux joueurs, chacun devant leur ordinateur, se connectent au même serveur. Un plateau vide de neuf cases s'affiche dans les fenêtres des navigateurs. La partie peut alors débuter.
  2. Un premier joueur choisit de commencer. Il clique sur l'une des neuf cases pour placer un pion rouge. L'affichage se met à jour dans les deux fenêtres.
  3. Le deuxième joueur joue à son tour un pion jaune. De même, l'affichage se met à jour dans les deux fenêtres.
  4. Lorsque la partie est terminée, un des joueurs clique sur le bouton "Rejouer une nouvelle partie" pour recommencer.

Ebauche de code

Le code proposé ci-dessous est très simplifié. S'il est retenu, il doit être à sauvegardé sous le nom "index.html". Il sera possible, par la suite, de l'améliorer.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <script>
      var jeu={};
      jeu.tour=1;
      jeu.numcoup=0;
      jeu.case=[];
      for (var i=1; i<=9; i++) jeu.case[i]="libre";
      function jouer(n) {
        if (jeu.case[n]=="libre") {
          if (jeu.tour==1) {
            document.getElementById("case"+n).src="pionrouge.gif";
            document.getElementById("tour").innerHTML="jaune";
            jeu.tour=2;
          }
          else {
            document.getElementById("case"+n).src="pionjaune.gif";
            document.getElementById("tour").innerHTML="rouge";
            jeu.tour=1;
          }
          jeu.case[n]="prise";
          jeu.numcoup++;
        }
        document.getElementById("numcoup").innerHTML=jeu.numcoup;
      }
      function raz() {
        jeu.tour=1;
        jeu.numcoup=0;
        for (var i=1; i<=9; i++) {
          jeu.case[i]="libre";
          document.getElementById("case"+i).src="pasdepion.gif";
        }
        document.getElementById("tour").innerHTML="rouge";
        document.getElementById("numcoup").innerHTML=0;
      }
      function razEtatJeu() {

      }
      function majEtatJeu() {

      }
      function voirEtatJeu() {

      }
    </script>
  </head>
  <body>
    <h1>Jeu du Morpion</h1>
    <p>Au tour du joueur au pion <span id="tour">rouge</span> de jouer.
    Cliquez sur l'une des cases libres.</p>
    <p>Coup numéro <span id="numcoup">0</span></p>
    <p>
      <img id="case1" onclick="jouer(1);" src="pasdepion.gif">
      <img id="case2" onclick="jouer(2);" src="pasdepion.gif">
      <img id="case3" onclick="jouer(3);" src="pasdepion.gif"><br>
      <img id="case4" onclick="jouer(4);" src="pasdepion.gif">
      <img id="case5" onclick="jouer(5);" src="pasdepion.gif">
      <img id="case6" onclick="jouer(6);" src="pasdepion.gif"><br>
      <img id="case7" onclick="jouer(7);" src="pasdepion.gif">
      <img id="case8" onclick="jouer(8);" src="pasdepion.gif">
      <img id="case9" onclick="jouer(9);" src="pasdepion.gif">
    </p>
    <p><button type="button" onclick="raz();">Rejouer une nouvelle partie</button></p>
  </body>
</html>

Résultat obtenu :

Il est possible de récupérer les images ci-dessous (clic droit, enregistrer l'image sous...).

       

Construction de l'application

Sauvegarde de l'état du jeu

Quelle que soit la solution retenue pour construire cette application web, le serveur doit enregistrer l'état dans lequel se trouve le jeu. La case 3 est-elle libre ou pas? Combien de coups ont été joués?

L'état du jeu peut être sauvegardé :

Dans le cas où cette dernière solution est retenue, la table de cette base, à moins qu'il n'y en ait plusieurs, peut être définie de diverses manières.

On propose de créer la table "jeu" :

Liste des champs :

Pour gagner du temps et éviter de créer manuellement cette table, vous pouvez utiliser le fichier jeu.sql.

Mettre le jeu à son état initial

Le client doit pouvoir remettre le jeu à l'état initial, lorsqu'un joueur clique sur le bouton "Rejouer une nouvelle partie". On conseille donc d'écrire la fonction razEtatJeu() associée au fichier razEtatJeu.php.

Le fichier razEtatJeu.php :

La fonction razEtatJeu() :

Récupérer l'état du jeu

Le client doit pouvoir, à tout moment, connaître l'état du jeu sauvegardé sur le serveur. Il pourra ainsi, le cas échéant, mettre à jour l'affichage. On conseille donc d'écrire la fonction voirEtatJeu() associée au fichier voirEtatJeu.php.

Le fichier voirEtatJeu.php :

La fonction voirEtatJeu() :

Mettre à jour l'état du jeu

Le client doit pouvoir mettre à jour l'état du jeu sur le serveur, lorsqu'un joueur vient de jouer. On conseille donc d'écrire la fonction majEtatJeu() associée au fichier majEtatJeu.php.

Le fichier majEtatJeu.php :

La fonction majEtatJeu() :

Réalisation

Adapter l'ébauche de code afin d'atteindre l'objectif visé.

On pourra utiliser "window.setInterval()" pour appeller une fonction de manière répétée, avec un certain délai fixé entre chaque appel.