begin process at 2010 03 21 13:25:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > JEU DU MORPION INTELLIGENT: HUMAIN VERSUS PHP

JEU DU MORPION INTELLIGENT: HUMAIN VERSUS PHP


 Information sur la source

Note :
7,86 / 10 - par 7 personnes
7,86 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Classé sous :morpion, jeu, ia Niveau :Débutant Date de création :30/10/2005 Date de mise à jour :17/12/2005 14:38:08 Vu / téléchargé :8 240 / 742

Auteur : grandvizir

Ecrire un message privé
Site perso
Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

 Description

Jouez en ligne au jeu du morpion contre l'ordinateur.
Personnalisez le niveau.
Présence d'un mode invincible (corrigé 1 fois).
Gestion des points.

Mais surtout, amusez-vous bien !

Source

  • <?php
  • //======================================= http://altert.family.free.fr/ ========
  • $BackGroundColor = "#F8F8F8";
  • $ActiveCellColor = "yellow";
  • //------------------------------------------------------------------------------
  • function GetGet($Value,$DefaultValue) {
  • //INFO: l'utilisation de HTMLSPECIALCHARS évite les trous de sécurité du type
  • // http://localhost/morpion.php?game=100020010&level=2&serverpts=<script>alert("Salut");</script>&playerpts=0
  • if (isset($_GET[$Value])) {
  • if ($_GET[$Value]=='')
  • return $DefaultValue;
  • else
  • return htmlspecialchars($_GET[$Value]);
  • } else
  • return $DefaultValue;
  • }
  • function HasChar($Text,$Char) {
  • $HasC = false;
  • for ($i=0 ; $i<strlen($Text) ; $i++)
  • if ($Text[$i]==$Char) {
  • $HasC = true;
  • break;
  • }
  • return $HasC;
  • }
  • //------------------------------------------------------------------------------
  • $DisallowLinks = false;
  • $WinningPosition = -1;
  • $ServerPoints = GetGet('serverpts',0);
  • $PlayerPoints = GetGet('playerpts',0);
  • $Grid = GetGet('game','000000000');
  • $Level = GetGet('level','1'); //par défaut, le moteur est "Intermédiaire"
  • //------------------------------------------------------------------------------
  • function Full3($P1,$P2,$P3) {
  • //Indique si 3 cases spécifiées sont occupées par le même signe
  • global $Grid;
  • return ($Grid[$P1]!='0' && $Grid[$P1]==$Grid[$P2] && $Grid[$P2]==$Grid[$P3]);
  • }
  • function CheckWin() {
  • //0-1-2
  • //3-4-5
  • //6-7-8
  • global $Grid;
  • return ( Full3(0,3,6) || Full3(1,4,7) || Full3(2,5,8) || //Verticales
  • Full3(0,1,2) || Full3(3,4,5) || Full3(6,7,8) || //Horizontales
  • Full3(0,4,8) || Full3(2,4,6) ); //Diagonales
  • }
  • function EchoTab($Index) {
  • global $Grid, $DisallowLinks, $Level, $ServerPoints, $PlayerPoints;
  • if (!HasChar($Grid,'0')) {
  • echo '<a class=link href="morpion.php?level='.$Level.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints.'">';
  • if ($Grid[$Index]=='1')
  • echo '<img src="croix.gif" alt="Cliquez pour recommencer">';
  • else
  • echo '<img src="cercle.gif" alt="Cliquez pour recommencer">';
  • echo '</a>';
  • } else {
  • switch ($Grid[$Index]) {
  • case '0':
  • $CurGrid = $Grid;
  • $CurGrid[$Index] = '1';
  • if ($DisallowLinks)
  • echo '<img src="blank.gif" border="0">';
  • else
  • echo '<a href="morpion.php?game='.$CurGrid.'&level='.$Level.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints.'"><img src="blank.gif" border="0"></a>';
  • break;
  • case '1':
  • echo '<img src="croix.gif">';
  • break;
  • case '2':
  • echo '<img src="cercle.gif">';
  • break;
  • }
  • }
  • }
  • function GetCellColor($Cell,$EchoSth) {
  • //0-1-2
  • //3-4-5
  • //6-7-8
  • global $BackGroundColor, $ActiveCellColor, $WinningPosition;
  • //Recherche de la condition de coloration
  • switch ($Cell) {
  • case 0: $CellBG = Full3(0,1,2) || Full3(0,3,6) || Full3(0,4,8); break;
  • case 1: $CellBG = Full3(0,1,2) || Full3(1,4,7); break;
  • case 2: $CellBG = Full3(0,1,2) || Full3(2,5,8) || Full3(2,4,6); break;
  • case 3: $CellBG = Full3(3,4,5) || Full3(0,3,6); break;
  • case 4: $CellBG = Full3(3,4,5) || Full3(1,4,7) || Full3(0,4,8) || Full3(2,4,6); break;
  • case 5: $CellBG = Full3(3,4,5) || Full3(2,5,8); break;
  • case 6: $CellBG = Full3(6,7,8) || Full3(0,3,6) || Full3(2,4,6); break;
  • case 7: $CellBG = Full3(6,7,8) || Full3(1,4,7); break;
  • case 8: $CellBG = Full3(6,7,8) || Full3(2,5,8) || Full3(0,4,8); break;
  • }
  • //Application de la couleur
  • if ($CellBG) {
  • $WinningPosition = $Cell;
  • if ($EchoSth)
  • echo $ActiveCellColor;
  • } else
  • if ($EchoSth)
  • echo $BackGroundColor;
  • }
  • //------------------------------------------------------------------------------
  • /*
  • INFORMATIONS GENERALES
  • Joueur '0' = personne
  • Joueur '1' = internaute
  • Joueur '2' = serveur
  • */
  • function Computing() {
  • global $Grid, $Level;
  • $Buffer = $Grid;
  • $Choix = -1;
  • $Symetrical = (($Level>=2) && ($Grid=='100010002' || $Grid=='200010001' || $Grid=='001010200' || $Grid=='002010100'));
  • //Recherche d'une position immédiatement gagnante
  • for ($i=0 ; $i<9 ; $i++) {
  • $Grid = $Buffer;
  • if ($Grid[$i]=='0') {
  • $Grid[$i] = '2';
  • if (CheckWin()) {
  • $Choix = $i;
  • break;
  • }
  • }
  • }
  • //Recherche d'une position qui contre l'adversaire
  • if ($Choix==-1)
  • for ($i=0 ; $i<9 ; $i++) {
  • $Grid = $Buffer;
  • if ($Grid[$i]=='0') {
  • $Grid[$i] = '1';
  • if (CheckWin()) {
  • $Choix = $i;
  • break;
  • }
  • }
  • }
  • //Recherche d'une position qui dispense 2 positions gagnantes
  • if ($Choix==-1 && $Level>=1)
  • for ($i=0 ; $i<9 ; $i++) {
  • $Grid = $Buffer;
  • if ($Grid[$i]=='0') {
  • $Grid[$i] = '2';
  • $Buffer2 = $Grid;
  • $WinCount = 0;
  • for ($j=0 ; $j<9 ; $j++) {
  • $Grid = $Buffer2;
  • if ($Grid[$j]=='0') {
  • $Grid[$j] = '2';
  • if (CheckWin())
  • $WinCount++;
  • }
  • }
  • if ($WinCount>=2) {
  • $Choix = $i;
  • break;
  • }
  • }
  • }
  • $Grid = $Buffer;
  • //Recherche d'une position adverse qui force 2 positions gagnantes
  • if ($Choix==-1 && $Grid!='100020001' && $Grid!='001020100' && !$Symetrical && $Level>=1)
  • for ($i=0 ; $i<9 ; $i++) {
  • $Grid = $Buffer;
  • if ($Grid[$i]=='0') {
  • $Grid[$i] = '1';
  • $Buffer2 = $Grid;
  • $WinCount = 0;
  • for ($j=0 ; $j<9 ; $j++) {
  • $Grid = $Buffer2;
  • if ($Grid[$j]=='0') {
  • $Grid[$j] = '1';
  • if (CheckWin())
  • $WinCount++;
  • }
  • }
  • if ($WinCount>=2) {
  • $Choix = $i;
  • break;
  • }
  • }
  • }
  • $Grid = $Buffer;
  • //Petit remède d'invincibilité complémentaire
  • if ($Level>=1)
  • $NoCorner = ($Grid=='100020001' || $Grid=='001020100');
  • else
  • $NoCorner = false;
  • //Choix de la case centrale si disponible
  • if ($Choix==-1 && $Grid[4]=='0')
  • if ($Level>=1 || ($Level==0 && rand(0,5)!=4))
  • $Choix = 4;
  • //En mode de jeu le plus grand, il est interdit pour l'ordinateur de jouer sur les points cardinaux au second tour (sinon il perd à coup sûr)
  • //D'après une situation particulière de symétrie, on exploite cette même interdiction mais pour des raisons différentes
  • if (($Choix==-1 && $Level>=2 && $Grid=='000010000') || $Symetrical) {
  • $_choice = -1;
  • while ($_choice==-1)
  • switch(rand(1,4)) {
  • case 1: if ($Grid[6]=='0') $_choice=6; break;
  • case 2: if ($Grid[8]=='0') $_choice=8; break;
  • case 3: if ($Grid[0]=='0') $_choice=0; break;
  • case 4: if ($Grid[2]=='0') $_choice=2; break;
  • }
  • $Choix = $_choice;
  • }
  • //Choix d'une case au pif...
  • if ($Choix==-1) {
  • $Case = rand(0,8);
  • while ($Grid[$Case]!='0') {
  • $Case++;
  • if ($Case>8)
  • $Case = 0;
  • }
  • //...on ne doit pas jouer pas au pif dans les coins quand c'est stratégiquement suicidaire
  • if ($NoCorner) {
  • if ($Case==0 || $Case==2 || $Case==6 || $Case==8)
  • $Case++;
  • if ($Case>8)
  • $Case = 1;
  • }
  • $Choix = $Case;
  • }
  • //Restauration des données
  • $Grid = $Buffer;
  • return $Choix;
  • }
  • if (($Grid!='000000000' || isset($_GET['serverbegins'])) && !CheckWin() && HasChar($Grid,'0')) {
  • $Index = Computing();
  • if ($Index!= -1)
  • $Grid[$Index]='2';
  • else {
  • echo '<b>Une erreur fatale est survenue.';
  • echo '<br/><br/>Cliquez <a href="morpion.php">ici</a> pour faire une nouvelle partie.';
  • return 0;
  • }
  • }
  • //Traitement des points: pour pouvoir transmettre efficacement les scores, il est nécessaire
  • //d'appeler 9 fois dans le vide la fonction GetCellColor. Cela permet d'initialiser correctement
  • //la variable $WinningPosition et donc de rendre les scores transmissibles via la fonction
  • //EchoTbl qui est chargée d'afficher les nouveaux scores.
  • for ($i=0 ; $i<9 ; $i++)
  • GetCellColor($i,false);
  • if ($WinningPosition>=0 && $WinningPosition<9)
  • switch ($Grid[$WinningPosition]) {
  • case '1': $PlayerPoints++; break;
  • case '2': $ServerPoints++; break;
  • }
  • ?>
  • <html>
  • <head>
  • <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  • <title>Le jeu du morpion</title>
  • <style>
  • A.link { color: #8080FF; text-decoration: none }
  • A.link:hover { color: blue; text-decoration: underline overline }
  • TD.gameboard { border: 2px solid maroon }
  • IMG { border: 0 }
  • </style>
  • </head>
  • <body bgcolor="<?php echo $BackGroundColor; ?>">
  • <table width="35%" cellspacing="0" border="0" align="center">
  • <tr>
  • <td colspan="2" height="50px" align="center" style="border: 1px solid #996600">
  • <?php
  • if ($DisallowLinks=CheckWin())
  • echo '<b><font face="Verdana" color="#996600">La partie est terminée !</font></b>';
  • else
  • if (!HasChar($Grid,'0')) {
  • echo '<b><font face="Verdana" color="#996600">Match nul !</font></b>';
  • $DisallowLinks=true;
  • } else
  • echo '&nbsp;';
  • ?>
  • </td>
  • </tr>
  • <tr>
  • <td valign="center" width="35%" style="border-right: 1px solid navy">
  • <font size="4" color="green"><b>Actions :</b></font>
  • <br/>&nbsp;
  • <?php
  • if ($Grid=='000000000')
  • echo '<br/><a class=link href="morpion.php?game='.$Grid.'&serverbegins&level='.$Level.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints.'">Laisser la main</a>';
  • else
  • echo '<br/>&nbsp;';
  • ?>
  • <?php
  • if ($ServerPoints!=0 || $PlayerPoints!=0)
  • echo '<br/><a class=link href="morpion.php?game=000000000&level='.$Level.'">RAZ</a>';
  • else
  • echo '<br/>&nbsp;';
  • ?>
  • <br/><a class=link href="morpion.php?level=<?php echo $Level.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints; ?>">Recommencer</a>
  • </td>
  • <td rowspan="2">
  • <br/>&nbsp;
  • <table width="156" border="3" cellspacing="3" align="center" style="border: none">
  • <tr>
  • <td bgcolor="<?php GetCellColor(0,true); ?>" class=gameboard style="border-top:none; border-left:none"><?php EchoTab(0); ?></td>
  • <td bgcolor="<?php GetCellColor(1,true); ?>" class=gameboard style="border-top:none"><?php EchoTab(1); ?></td>
  • <td bgcolor="<?php GetCellColor(2,true); ?>" class=gameboard style="border-top:none; border-right:none"><?php EchoTab(2); ?></td>
  • </tr>
  • <tr>
  • <td bgcolor="<?php GetCellColor(3,true); ?>" class=gameboard style="border-left:none"><?php EchoTab(3); ?></td>
  • <td bgcolor="<?php GetCellColor(4,true); ?>" class=gameboard><?php EchoTab(4); ?></td>
  • <td bgcolor="<?php GetCellColor(5,true); ?>" class=gameboard style="border-right:none"><?php EchoTab(5); ?></td>
  • </tr>
  • <tr>
  • <td bgcolor="<?php GetCellColor(6,true); ?>" class=gameboard style="border-bottom:none; border-left:none"><?php EchoTab(6); ?></td>
  • <td bgcolor="<?php GetCellColor(7,true); ?>" class=gameboard style="border-bottom:none"><?php EchoTab(7); ?></td>
  • <td bgcolor="<?php GetCellColor(8,true); ?>" class=gameboard style="border-bottom:none; border-right:none"><?php EchoTab(8); ?></td>
  • </tr>
  • </table>
  • <br/>&nbsp;
  • </td>
  • </tr>
  • <tr>
  • <td valign="center" width="35%" style="border-right: 1px solid navy; border-top: 1px solid navy">
  • <font size="4" color="green"><b>Options:</b></font>
  • <br/>&nbsp;
  • <?php
  • function EchoLevelList($Lvl,$Caption) {
  • global $Grid, $Level, $ServerPoints, $PlayerPoints;
  • echo '<br/>';
  • if ($Level==$Lvl)
  • echo '<img src="tic.gif" align="absmiddle">&nbsp;';
  • if ($Grid=='000000000')
  • echo '<a class=link href="morpion.php?game='.$Grid.'&level='.$Lvl.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints.'">'.$Caption.'</a>';
  • else
  • echo $Caption;
  • }
  • EchoLevelList(0,'Faible');
  • EchoLevelList(1,'Intermédiaire');
  • EchoLevelList(2,'Invincible');
  • ?>
  • </td>
  • </tr>
  • <tr>
  • <td colspan="2" align="center">
  • <font size="2" color="navy">Serveur : <?php echo $ServerPoints; ?>&nbsp;&nbsp;&nbsp;<b>..::..</b>&nbsp;&nbsp;&nbsp;Joueur : <?php echo $PlayerPoints; ?></font>
  • </td>
  • </tr>
  • <tr>
  • <td colspan="2" align="center" style="border: 2px solid #996600">
  • <font size="2" color="maroon">Jeu du morpion <b>©</b> septembre 2005</font>
  • </td>
  • </tr>
  • </table>
  • </body>
  • </html>
<?php

//======================================= http://altert.family.free.fr/ ========

  $BackGroundColor = "#F8F8F8";
  $ActiveCellColor = "yellow";

//------------------------------------------------------------------------------

  function GetGet($Value,$DefaultValue) {
  //INFO: l'utilisation de HTMLSPECIALCHARS évite les trous de sécurité du type
  //      http://localhost/morpion.php?game=100020010&level=2&serverpts=<script>alert("Salut");</script>&playerpts=0
    if (isset($_GET[$Value])) {
      if ($_GET[$Value]=='')
        return $DefaultValue;
      else
        return htmlspecialchars($_GET[$Value]);
    } else
      return $DefaultValue;
  }

  function HasChar($Text,$Char) {
    $HasC = false;
    for ($i=0 ; $i<strlen($Text) ; $i++)
      if ($Text[$i]==$Char) {
        $HasC = true;
        break;
      }
    return $HasC;
  }

//------------------------------------------------------------------------------

  $DisallowLinks = false;
  $WinningPosition = -1;
  $ServerPoints = GetGet('serverpts',0);
  $PlayerPoints = GetGet('playerpts',0);
  $Grid = GetGet('game','000000000');
  $Level = GetGet('level','1');              //par défaut, le moteur est "Intermédiaire"

//------------------------------------------------------------------------------

  function Full3($P1,$P2,$P3) {
  //Indique si 3 cases spécifiées sont occupées par le même signe
    global $Grid;
    return ($Grid[$P1]!='0' && $Grid[$P1]==$Grid[$P2] && $Grid[$P2]==$Grid[$P3]);
  }

  function CheckWin() {
  //0-1-2
  //3-4-5
  //6-7-8
    global $Grid;
    return ( Full3(0,3,6) || Full3(1,4,7) || Full3(2,5,8) ||     //Verticales
             Full3(0,1,2) || Full3(3,4,5) || Full3(6,7,8) ||     //Horizontales
             Full3(0,4,8) || Full3(2,4,6)      );                //Diagonales
  }

  function EchoTab($Index) {
    global $Grid, $DisallowLinks, $Level, $ServerPoints, $PlayerPoints;
    if (!HasChar($Grid,'0')) {
      echo '<a class=link href="morpion.php?level='.$Level.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints.'">';
      if ($Grid[$Index]=='1')
        echo '<img src="croix.gif" alt="Cliquez pour recommencer">';
      else
        echo '<img src="cercle.gif" alt="Cliquez pour recommencer">';
      echo '</a>';
    } else {
      switch ($Grid[$Index]) {
        case '0':
            $CurGrid = $Grid;
            $CurGrid[$Index] = '1';
            if ($DisallowLinks)
              echo '<img src="blank.gif" border="0">';
            else
              echo '<a href="morpion.php?game='.$CurGrid.'&level='.$Level.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints.'"><img src="blank.gif" border="0"></a>';
          break;
        case '1':
            echo '<img src="croix.gif">';
          break;
        case '2':
            echo '<img src="cercle.gif">';
          break;
      }
    }
  }

  function GetCellColor($Cell,$EchoSth) {
  //0-1-2
  //3-4-5
  //6-7-8
    global $BackGroundColor, $ActiveCellColor, $WinningPosition;

  //Recherche de la condition de coloration
    switch ($Cell) {
      case 0: $CellBG = Full3(0,1,2) || Full3(0,3,6) || Full3(0,4,8);                  break;
      case 1: $CellBG = Full3(0,1,2) || Full3(1,4,7);                                  break;
      case 2: $CellBG = Full3(0,1,2) || Full3(2,5,8) || Full3(2,4,6);                  break;
      case 3: $CellBG = Full3(3,4,5) || Full3(0,3,6);                                  break;
      case 4: $CellBG = Full3(3,4,5) || Full3(1,4,7) || Full3(0,4,8) || Full3(2,4,6);  break;
      case 5: $CellBG = Full3(3,4,5) || Full3(2,5,8);                                  break;
      case 6: $CellBG = Full3(6,7,8) || Full3(0,3,6) || Full3(2,4,6);                  break;
      case 7: $CellBG = Full3(6,7,8) || Full3(1,4,7);                                  break;
      case 8: $CellBG = Full3(6,7,8) || Full3(2,5,8) || Full3(0,4,8);                  break;
    }

  //Application de la couleur
    if ($CellBG) {
      $WinningPosition = $Cell;
      if ($EchoSth)
        echo $ActiveCellColor;
    } else
      if ($EchoSth)
        echo $BackGroundColor;
  }

//------------------------------------------------------------------------------

/*
  INFORMATIONS GENERALES
     Joueur '0' = personne
     Joueur '1' = internaute
     Joueur '2' = serveur
*/

  function Computing() {
    global $Grid, $Level;
    $Buffer = $Grid;
    $Choix = -1;
    $Symetrical = (($Level>=2) && ($Grid=='100010002' || $Grid=='200010001' || $Grid=='001010200' || $Grid=='002010100'));

    //Recherche d'une position immédiatement gagnante
      for ($i=0 ; $i<9 ; $i++) {
        $Grid = $Buffer;
        if ($Grid[$i]=='0') {
          $Grid[$i] = '2';
          if (CheckWin()) {
            $Choix = $i;
            break;
          }
        }
      }

    //Recherche d'une position qui contre l'adversaire
      if ($Choix==-1)
        for ($i=0 ; $i<9 ; $i++) {
          $Grid = $Buffer;
          if ($Grid[$i]=='0') {
            $Grid[$i] = '1';
            if (CheckWin()) {
              $Choix = $i;
              break;
            }
          }
        }

    //Recherche d'une position qui dispense 2 positions gagnantes
      if ($Choix==-1 && $Level>=1)
        for ($i=0 ; $i<9 ; $i++) {
          $Grid = $Buffer;
          if ($Grid[$i]=='0') {
            $Grid[$i] = '2';
            $Buffer2 = $Grid;
            $WinCount = 0;
            for ($j=0 ; $j<9 ; $j++) {
              $Grid = $Buffer2;
              if ($Grid[$j]=='0') {
                $Grid[$j] = '2';
                if (CheckWin())
                  $WinCount++;
              }
            }
            if ($WinCount>=2) {
              $Choix = $i;
              break;
            }
          }
        }
      $Grid = $Buffer;

    //Recherche d'une position adverse qui force 2 positions gagnantes
      if ($Choix==-1 && $Grid!='100020001' && $Grid!='001020100' && !$Symetrical && $Level>=1)
        for ($i=0 ; $i<9 ; $i++) {
          $Grid = $Buffer;
          if ($Grid[$i]=='0') {
            $Grid[$i] = '1';
            $Buffer2 = $Grid;
            $WinCount = 0;
            for ($j=0 ; $j<9 ; $j++) {
              $Grid = $Buffer2;
              if ($Grid[$j]=='0') {
                $Grid[$j] = '1';
                if (CheckWin())
                  $WinCount++;
              }
            }
            if ($WinCount>=2) {
              $Choix = $i;
              break;
            }
          }
        }
      $Grid = $Buffer;

    //Petit remède d'invincibilité complémentaire
      if ($Level>=1)
        $NoCorner = ($Grid=='100020001' || $Grid=='001020100');
      else
        $NoCorner = false;


    //Choix de la case centrale si disponible
      if ($Choix==-1 && $Grid[4]=='0')
        if ($Level>=1 || ($Level==0 && rand(0,5)!=4))
          $Choix = 4;

    //En mode de jeu le plus grand, il est interdit pour l'ordinateur de jouer sur les points cardinaux au second tour (sinon il perd à coup sûr)
    //D'après une situation particulière de symétrie, on exploite cette même interdiction mais pour des raisons différentes
      if (($Choix==-1 && $Level>=2 && $Grid=='000010000') || $Symetrical) {
        $_choice = -1;
        while ($_choice==-1)
          switch(rand(1,4)) {
            case 1: if ($Grid[6]=='0') $_choice=6; break;
            case 2: if ($Grid[8]=='0') $_choice=8; break;
            case 3: if ($Grid[0]=='0') $_choice=0; break;
            case 4: if ($Grid[2]=='0') $_choice=2; break;
          }
        $Choix = $_choice;
      }

    //Choix d'une case au pif...
      if ($Choix==-1) {
        $Case = rand(0,8);
        while ($Grid[$Case]!='0') {
          $Case++;
          if ($Case>8)
            $Case = 0;
        }
      //...on ne doit pas jouer pas au pif dans les coins quand c'est stratégiquement suicidaire
        if ($NoCorner) {
          if ($Case==0 || $Case==2 || $Case==6 || $Case==8)
            $Case++;
          if ($Case>8)
            $Case = 1;
        }
        $Choix = $Case;
      }

    //Restauration des données
      $Grid = $Buffer;
      return $Choix;
  }

  if (($Grid!='000000000' || isset($_GET['serverbegins'])) && !CheckWin() && HasChar($Grid,'0')) {
    $Index = Computing();
    if ($Index!= -1)
      $Grid[$Index]='2';
    else {
      echo '<b>Une erreur fatale est survenue.';
      echo '<br/><br/>Cliquez <a href="morpion.php">ici</a> pour faire une nouvelle partie.';
      return 0;
    }
  }

//Traitement des points: pour pouvoir transmettre efficacement les scores, il est nécessaire
//d'appeler 9 fois dans le vide la fonction GetCellColor. Cela permet d'initialiser correctement
//la variable $WinningPosition et donc de rendre les scores transmissibles via la fonction
//EchoTbl qui est chargée d'afficher les nouveaux scores.
  for ($i=0 ; $i<9 ; $i++)
    GetCellColor($i,false);
  if ($WinningPosition>=0 && $WinningPosition<9)
    switch ($Grid[$WinningPosition]) {
      case '1': $PlayerPoints++; break;
      case '2': $ServerPoints++; break;
    }
?>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <title>Le jeu du morpion</title>
  <style>
    A.link		{ color: #8080FF; text-decoration: none }
    A.link:hover	{ color: blue; text-decoration: underline overline }
    TD.gameboard	{ border: 2px solid maroon }
    IMG			{ border: 0 }
  </style>
</head>
<body bgcolor="<?php echo $BackGroundColor; ?>">
  <table width="35%" cellspacing="0" border="0" align="center">
    <tr> 
      <td colspan="2" height="50px" align="center" style="border: 1px solid #996600">
        <?php
          if ($DisallowLinks=CheckWin())
            echo '<b><font face="Verdana" color="#996600">La partie est terminée !</font></b>';
          else
            if (!HasChar($Grid,'0')) {
              echo '<b><font face="Verdana" color="#996600">Match nul !</font></b>';
              $DisallowLinks=true;
            } else
              echo '&nbsp;';
        ?>
      </td>
    </tr>

    <tr> 
      <td valign="center" width="35%" style="border-right: 1px solid navy">
        <font size="4" color="green"><b>Actions :</b></font>
        <br/>&nbsp;
        <?php
          if ($Grid=='000000000')
            echo '<br/><a class=link href="morpion.php?game='.$Grid.'&serverbegins&level='.$Level.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints.'">Laisser la main</a>';
          else
            echo '<br/>&nbsp;';
        ?>
        <?php
          if ($ServerPoints!=0 || $PlayerPoints!=0)
            echo '<br/><a class=link href="morpion.php?game=000000000&level='.$Level.'">RAZ</a>';
          else
            echo '<br/>&nbsp;';
        ?>
        <br/><a class=link href="morpion.php?level=<?php echo $Level.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints; ?>">Recommencer</a>
      </td>

      <td rowspan="2">
        <br/>&nbsp;
        <table width="156" border="3" cellspacing="3" align="center" style="border: none">
          <tr>
            <td bgcolor="<?php GetCellColor(0,true); ?>" class=gameboard style="border-top:none; border-left:none"><?php EchoTab(0); ?></td>
            <td bgcolor="<?php GetCellColor(1,true); ?>" class=gameboard style="border-top:none"><?php EchoTab(1); ?></td>
            <td bgcolor="<?php GetCellColor(2,true); ?>" class=gameboard style="border-top:none; border-right:none"><?php EchoTab(2); ?></td>
          </tr>
          <tr>
            <td bgcolor="<?php GetCellColor(3,true); ?>" class=gameboard style="border-left:none"><?php EchoTab(3); ?></td>
            <td bgcolor="<?php GetCellColor(4,true); ?>" class=gameboard><?php EchoTab(4); ?></td>
            <td bgcolor="<?php GetCellColor(5,true); ?>" class=gameboard style="border-right:none"><?php EchoTab(5); ?></td>
          </tr>
          <tr>
            <td bgcolor="<?php GetCellColor(6,true); ?>" class=gameboard style="border-bottom:none; border-left:none"><?php EchoTab(6); ?></td>
            <td bgcolor="<?php GetCellColor(7,true); ?>" class=gameboard style="border-bottom:none"><?php EchoTab(7); ?></td>
            <td bgcolor="<?php GetCellColor(8,true); ?>" class=gameboard style="border-bottom:none; border-right:none"><?php EchoTab(8); ?></td>
          </tr>
        </table>
        <br/>&nbsp;
      </td>
    </tr>

    <tr> 
      <td valign="center" width="35%" style="border-right: 1px solid navy; border-top: 1px solid navy">
        <font size="4" color="green"><b>Options:</b></font>
        <br/>&nbsp;
        <?php
          function EchoLevelList($Lvl,$Caption) {
            global $Grid, $Level, $ServerPoints, $PlayerPoints;
            echo '<br/>';
            if ($Level==$Lvl)
              echo '<img src="tic.gif" align="absmiddle">&nbsp;';
            if ($Grid=='000000000')
              echo '<a class=link href="morpion.php?game='.$Grid.'&level='.$Lvl.'&serverpts='.$ServerPoints.'&playerpts='.$PlayerPoints.'">'.$Caption.'</a>';
            else
              echo $Caption;
          }
          EchoLevelList(0,'Faible');
          EchoLevelList(1,'Intermédiaire');
          EchoLevelList(2,'Invincible');
        ?>
      </td>
    </tr>

    <tr> 
      <td colspan="2" align="center">
        <font size="2" color="navy">Serveur : <?php echo $ServerPoints; ?>&nbsp;&nbsp;&nbsp;<b>..::..</b>&nbsp;&nbsp;&nbsp;Joueur : <?php echo $PlayerPoints; ?></font>
      </td>
    </tr>

    <tr> 
      <td colspan="2" align="center" style="border: 2px solid #996600">
        <font size="2" color="maroon">Jeu du morpion <b>©</b> septembre 2005</font>
      </td>
    </tr>
  </table>
</body>
</html>

 Conclusion

Vous pouvez toujours aller visiter http://altert.family.free.fr/

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

17 décembre 2005 14:38:09 :
- correction mineure du mode invincible - gestion des points - coloration des victoires - modification de quelques balises <abc> en <abc/> - des trucs parci parlà (forcément)

 Sources du même auteur

Source avec Zip PROTÉGER LE TÉLÉCHARGEMENT DES FICHIERS ZIP
Source avec Zip GÉRER DES FICHIERS DE CONFIGURATION INI [POO]
Source avec Zip GÉRER DES LISTES AVEC TSTRINGLIST [POO]
EXTENSIONS CHARGÉES SUR UN SERVEUR
Source avec Zip Source avec une capture VISUALISER LE CONTENU D'UN FICHIER *.ZIP

 Sources de la même categorie

Source avec Zip [POO] JEU KEMO par phpAnonyme
Source avec Zip Source avec une capture RUBIX CUBE par coucou747
Source avec Zip Source avec une capture BLOC NUKED KLAN WARROCK par warrock
Source avec Zip LABYRINTHES EN PHP (GD + HTML) GÉNÉRATION + RÉSOLUTION par nax333
Source avec Zip Source avec une capture UNE PARTIE DE SUDOKU ? CHOISSISSEZ LA DIMENSION, LE NIVEAU... par nlion

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ADMINISTRATION DE SERVEURS URBAN TERROR A DISTANCE par XRaph
IA DE TYPE QUESTION/REPONSE par salasfinwe
Source avec Zip Source avec une capture UNE PARTIE DE SUDOKU ? CHOISSISSEZ LA DIMENSION, LE NIVEAU... par nlion
Source avec Zip Source avec une capture CRÉER UN TERRAIN EN 3D ISO A PARTIR D'UNE HEIGHT MAP par djine
Source avec Zip Source avec une capture JEU DU MORPION AVEC INTELLIGENCE ARTIFICIELLE DÉVELOPPÉE : P... par matthieuaubry

Commentaires et avis

Commentaire de monoceros01 le 30/10/2005 11:13:40

8/10 parce que ton code html n'est pas valide >:p Sinon c'est sympatique :)

Commentaire de Anthomicro le 30/10/2005 14:22:31

Salut,

nickel j'ai pas réussi à le battre en mode invincible (match nul tout le temps). Bien joué ;-)

Bon je ne note pas le code x?html ni le code PHP, juste le jeu :-)

et je mettrais 8 aussi (soyons fous)

a +

Commentaire de FhX le 30/10/2005 18:32:06

Fonction GetGet() qui sert un peu à rien.
Car tu peux l'utiliser directement depuis ton code

# if ( !isset($_GET['game']) ) {
#     $Grid = '000000000';
  }

Ca évite l'appel d'une fonction qui sert un peu trop pas à grand chose ;)

Commentaire de coucou747 le 30/10/2005 19:20:56

salut
le script en lui même est interessant, mais le code html n'est vraiment pas terrible...

au niveau du code php :
tu traites $grid comme si c'était un tableau, ça marche, mais c'est pas super super, tu devrais faire :
$grid{0} pour accèder au premier caractère...
Le php, c'est pas du C !

Commentaire de coockiesch le 30/10/2005 20:46:39

Salut!
De toute façon, si tu as deux personnes qui savent très bien jouer au morpion, tu auras tjs match nul (parole d'étudiant! :D )

@++

R@f

Commentaire de Anthomicro le 30/10/2005 21:04:07

ouep ^^

Commentaire de Martin_j le 05/11/2005 11:55:02

Salut,

moi j'ai réussi à battre le mode invincible...
Sinon, est-ce qu'il existe ce morpion mais pas en 3x3 mais en 5x5 (où il faut aligner 4 croix)

++

Commentaire de BadNews le 19/11/2005 07:49:20

lol, tu l'as réussis, je sais pas si il est bien coddé, mais si oui, c'est impossible de le battre, IMPOSSIBLE.

Donc, comme j'ai mentionné plus haut, si il es bien coddé, tu es menteur ... hahaha.

Parcqu'il es possible d'en codder un qui est vraiment IMPOSSIBLE.

Je l'ai pas essayer, j'ai pas regarder le code, mais sois il n'est pas bien coddé ou sois tu est vraiment menteur Martin_j .

Commentaire de Martin_j le 19/11/2005 10:44:50

Salut,

tu ne me crois pas ? Je viens de refaire le jeu et de regagner :

http://img518.imageshack.us/img518/1851/championinmorpion6qg.png

@+

Commentaire de coockiesch le 19/11/2005 10:45:41

Le programme peut être le meilleur du monde... Si tu connais bien le morpion, il y aura match nul...

@++

R@f

Commentaire de Martin_j le 19/11/2005 10:46:48

Salut,

..ou même le lien direct ou cas tu me dirais "tu as utilisé Paint shop pro" : http://www.trains-idf.net/Morpion/morpion.php?game=122110102&level=2

++

Commentaire de Anthomicro le 19/11/2005 10:51:15

mouais, j'y crois pas une seconde...

Commentaire de coucou747 le 19/11/2005 10:51:52

lol
ça veut rien dire ça :

http://www.trains-idf.net/Morpion/morpion.php?game=222220202&level=2

lol

Commentaire de Anthomicro le 19/11/2005 10:58:41

mdr, encore un mytho donc... Il compense quoi en faisant ça ? (j'ai  ma petite idée mais bon)

Commentaire de Martin_j le 19/11/2005 11:39:41

Salut,

c'est vrai que lien ya eu un prob.
Mais je suis pas un mytho lol !!
J'ai battu l'invincible !

++

Commentaire de coucou747 le 19/11/2005 11:43:47

explique nous comment !

ou t'as cliqué à chaque fois...

Commentaire de Anthomicro le 19/11/2005 12:32:50

ouais ;-) qu'on voit si tu dis vrai ;-)

Commentaire de Martin_j le 19/11/2005 12:43:31

Salut,

1) Je clique au milieu
2) L'invincible met son rond sur la en bas à doite
3) Je clique en haut à gauche
4) Lui en haut, milieu
5) Moi en bas, à gauche
6) Lui en haut à droite
7) Moi au mileu à gauche

GAGNE !!!!!!!!!!!!

@+

Commentaire de coucou747 le 19/11/2005 12:53:32

ouais, c'est vrai... mais t'aurais du donner ton astuce dès le départ...

Bon, à part ça, on peut dire que ton IA joue parfois au hazard... la mienne sur javascriptfr était totalement déterminée, je n'avais pas mis trois niveaux, mais j'avais fait deux modes : lui en premier, ou moi en premier...

Commentaire de Anthomicro le 19/11/2005 13:10:56

Martin > ah ouais pas mal, perso j'ai du m'y prendre deux fois pour qu'il la mette en bas à droite ;-)

Commentaire de BadNews le 28/11/2005 05:02:43

lol Martin_j, j'ai dis que si le code est bien programmé, il est IMPOSSIBLE de le battre. Faut croire que le code n'est pas parfait, c'est tout. lmao.

Commentaire de grandvizir le 17/12/2005 14:42:43

martin_j a eu raison de se manisfester et il faut prendre les diverses réactions dans le bon sens. Eu qui crût prendre !

L'algorithme est simplement tombé sur un cas particulier qui est la symétrie du plateau de jeu dans le cadre de la réflexion N°4 de la fonction Computing(). L'algo n'avait rien de mauvais, il lui manquait juste une petite partie de sa réflexion. J'ai donc effectué les modifications de manière à ce que l'astuce de martin_j ne soit plus possible.

J'en ai profité pour :
- colorer les cases lorsqu'une ligne/colonne/diagonale est réalisée
- gérer un système de points
- incorporer un facilateur de clics

Pour ce qui est du morpion d'ordre 4, mieux vaut préférer un arbre de jeu plutôt que mon algo de réflexion (lui, qui permet de gérer facilement des niveaux de jeu). Vous voyez déjà aisément la taille relativement importante requise pour la gestion de l'ordre 3...

coucou747> Encore heureux que le serveur ne joue jamais les mêmes coups ! Ceci est preuve de constructivité de la part de l'auteur du jeu :)) De plus l'algo ne joue "au pif" que si sa réflexion ne lui a apporté aucune solution pouvant jouer en sa faveur.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

demande code source jeu de morpion [ par oubaha ] bonsoir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; je suis nouveau adherent j'esp&#233;re que vous m'admettriez.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb Tableau pour vue d'un jeu rpg [ par bob_07 ] Bonjour, je suis actuellement en train de construir un jeu rpg en php. Pour la vue du joueur, je voulais cr&#233;er un tableau qui affiche selon les c jeu php [ par choosedeath ] bonjour, je suis un jeune lyc&#233;en et j'ai un projet de jeu en php/msql de conquete spatiale (strat&#233;gie et commerce). le hic, c'est que je ne Je cherche un code pour pouvoir changer de nick de jeu sur un trivia version tcl [ par PetiteLibellule ] Jusqu'a maintenant sur une&nbsp;version mirc pour changer de nick de jeu en utilisant un trivia il suffisait de taper !nick et le nick de jeu desir&#2 probleme t_string [ par smith62 ] Bonjour tlm,Voila g un probleme Parse error: parse error, unexpected T_STRING in /secu/teamfr/teamdigitalk/digitalk/a-news/war/match_enregistrer.php o Codeur php [ par Vanadium ] Bonjour!!Je souhaiterais savoir si quelqu'un pourrait gracieusement m'aid&#233; a la cr&#233;ation d'un jeu online, mais je cherche quelqu'un voulant Jeu de bourse [ par cnormand ] Bonjour je suis webmaster de plusieurs sites et souhaiterai cr&#233;er un site de&nbsp; bourse online fictif. Yaurait-il quelqu'un , ou qui veut s'ass jeu de gestion de tennis [ par probordelais ] Bonjour,Je fais un jeu de gestion d'un club de tennis en php. Le plus difficile est la gestion des matchs en temps r&#233;el. En fait, il me faudrai u Problème de jeu de cadre [ par jeancharles26 ] Bonjour,Voici mon souci :J'ai une page d'accueil avec un jeu de cadres. Le&nbsp;menu est dans le cadre vertical gauche et les pages apparaissent dans Création d'un jeu de cartes en réseau [ par skmancuso ] Bonjour,Je souhaiterais d&#233;velopper un jeu de carte en r&#233;seau du genre "dame de pique" sur mon site web.Malheureusement je ne suis pas tr&#23


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales