begin process at 2010 03 22 04:14:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > JEU SIMPLE ET EFFICACE DE TIC-TAC-TOE SE JOUANT SUR UN MÊME ORDINATEUR

JEU SIMPLE ET EFFICACE DE TIC-TAC-TOE SE JOUANT SUR UN MÊME ORDINATEUR


 Information sur la source

Note :
Aucune note
Catégorie :Jeux Classé sous :jeu, tictactoe, simple, efficace, passetemps Niveau :Débutant Date de création :30/05/2007 Date de mise à jour :31/05/2007 08:59:28 Vu / téléchargé :6 739 / 318

Auteur : FasteX_

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

 Description

Cliquez pour voir la capture en taille normale
Je dépose ici la source d'un petit défi qui a été bien mené à terme. Il s'agit d'un jeu de Tic-Tac-Toe. Ce jeu, certe très simple, peut toujours occuper quelques minutes de notre temps! Vous trouverez probablement ailleur des versions graphiquement plus jolies, mais je crois qu'en échange d'une interface moyenne, cela présente un code vraiment facile à comprendre et à réutiliser. J'ai commenté chaque bloc de code pour mieu guider ceux parmi vous qui voudront y jeter un oeil.

Source

  • // Nous utiliserons deux images, une pour le 'x' et l'autre pour le 'o'
  • var xImg = "x.jpg", oImg = "o.jpg";
  • // Initialement, c'est le joueur 1 qui commence
  • var joueur1 = true;
  • // La fin n'arrive pas au début!:P
  • var fin = false;
  • /*
  • Fonction appelée à chaque fois qu'on clique sur une case.
  • Elle permet de gérer les signes et le déroulement de la partie.
  • */
  • function placerSigne(element) {
  • alert(nomFichier(element.src));
  • // Pour commencer, vérifions si la case où on veut mettre un signe est bel et bien vide
  • if (nomFichier(element.src) == "vide.jpg" && fin == false) {
  • element.src = joueur1 ? "img/"+xImg : "img/"+oImg;
  • // Est-ce que joueur 1 gagne ?
  • if (gagne(xImg)) {
  • statutPartie.innerHTML = "Joueur 1 vous avez gagné!";
  • fin = true;
  • gEBI("bRecommencer").style.display = "";
  • }
  • else {
  • // Est-ce que joueur 2 gagne ?
  • if (gagne(oImg)) {
  • statutPartie.innerHTML = "Joueur 2 vous avez gagné!";
  • fin = true;
  • document.gEBI("bRecommencer").style.display = "";
  • }
  • else {
  • // Le jeu est-il complet ? (partie nulle en sachant le reste)
  • if (jeuComplet()) {
  • statutPartie.innerHTML = "Partie nulle...";
  • fin = true;
  • gEBI("bRecommencer").style.display = "";
  • }
  • // Sinon, la partie continue normalement
  • else {
  • joueur1 = !joueur1;
  • statutPartie.innerHTML = joueur1 ? "Joueur 1" : "Joueur 2";
  • statutPartie.innerHTML += " c'est votre tour...";
  • }
  • }
  • }
  • }
  • gEBI("bRecommencer").style.display = "";
  • }
  • /*
  • Fonction pour vérifier si le jeu est complet.
  • Elle consiste à s'assurer qu'il n'y a aucune
  • case vide.
  • */
  • function jeuComplet() {
  • rempli = true;
  • i=0;
  • while (i<=2 && rempli) {
  • j=0;
  • while (j<=2 && rempli) {
  • boxSrc = nomFichier(gEBI("box"+i+"_"+j).src);
  • if (boxSrc != xImg && boxSrc != oImg)
  • rempli = false;
  • else
  • j++;
  • }
  • i++;
  • }
  • return rempli;
  • }
  • /*
  • Fonction qui vérifie si un joueur gagne.
  • Il gagne si l'ensemble de ses signes forment
  • au moins une ligne ou une diagonale
  • */
  • function gagne(nomImage) {
  • return ligneH(nomImage) || ligneV(nomImage) || diag1(nomImage)
  • || diag2(nomImage) ? true : false;
  • }
  • /*
  • Fonction qui vérifie la présence d'au moins
  • une ligne horizontale pleine
  • */
  • function ligneH(nomImage) {
  • ligne = false;
  • i=0;
  • while (i <= 2 && !ligne) {
  • ligne = true;
  • j=0;
  • while (j <= 2 && ligne) {
  • boxSrc = nomFichier(gEBI("box"+i+"_"+j).src);
  • if (boxSrc != nomImage)
  • ligne = false;
  • else
  • j++;
  • }
  • i++
  • }
  • return ligne;
  • }
  • /*
  • Fonction qui vérifie la présence d'au moins
  • une ligne verticale pleine
  • */
  • function ligneV(nomImage) {
  • ligne = false;
  • i=0;
  • while (i <= 2 && !ligne) {
  • ligne = true;
  • j=0;
  • while (j <= 2 && ligne) {
  • boxSrc = nomFichier(document.gEBI("box"+j+"_"+i).src);
  • if (boxSrc != nomImage)
  • ligne = false;
  • else
  • j++;
  • }
  • i++;
  • }
  • return ligne;
  • }
  • /*
  • Fonction qui vérifie si la diagonale '/' est pleine.
  • */
  • function diag1(nomImage) {
  • diag = true;
  • i=0;
  • j=0;
  • while (i <= 2 && diag) {
  • boxSrc = nomFichier(gEBI("box"+i+"_"+j).src);
  • if (boxSrc != nomImage)
  • diag = false;
  • else {
  • i++;
  • j++;
  • }
  • }
  • return diag;
  • }
  • /*
  • Fonction qui vérifie si la diagonale '\' est pleine.
  • */
  • function diag2(nomImage) {
  • diag = true;
  • i=2;
  • j=0;
  • while (i >= 0 && diag) {
  • boxSrc = nomFichier(gEBI("box"+i+"_"+j).src);
  • if (boxSrc != nomImage)
  • diag = false;
  • else {
  • i--;
  • j++;
  • }
  • }
  • return diag;
  • }
  • /*
  • Fonction qui met fin à la partie.
  • On vide toutes les cases et on met
  • le tour à joueur 1.
  • */
  • function finPartie() {
  • for (i=0; i<=2; i++)
  • for (j=0; j<=2; j++)
  • gEBI("box"+i+"_"+j).src = "img/vide.jpg";
  • joueur1 = true;
  • statutPartie.innerHTML = "Joueur 1 c'est à votre tour...";
  • fin = false;
  • gEBI("bRecommencer").style.display = "none";
  • }
  • /*
  • Si on se sert de noms de fichiers, il faut s'armer d'une fonction
  • qui nous permettra de récupérer seulement le nom de l'image, et
  • non le chemin au complet.
  • */
  • function nomFichier(chemin) {
  • return chemin.substring(chemin.lastIndexOf('/')+1, chemin.length);
  • }
  • /*
  • Tout simplement pour éviter d'avoir à rédiger
  • le long "document.getElementById(id)" partout
  • */
  • function gEBI(id) {
  • return document.getElementById(id);
  • }
// Nous utiliserons deux images, une pour le 'x' et l'autre pour le 'o'
var xImg = "x.jpg", oImg = "o.jpg";

// Initialement, c'est le joueur 1 qui commence
var joueur1 = true;

// La fin n'arrive pas au début!:P
var fin = false;

/*
 Fonction appelée à chaque fois qu'on clique sur une case.
 Elle permet de gérer les signes et le déroulement de la partie.
*/
function placerSigne(element) {
   alert(nomFichier(element.src));

   // Pour commencer, vérifions si la case où on veut mettre un signe est bel et bien vide
   if (nomFichier(element.src) == "vide.jpg" && fin == false) {
      element.src = joueur1 ? "img/"+xImg : "img/"+oImg;
      // Est-ce que joueur 1 gagne ?
      if (gagne(xImg)) {
         statutPartie.innerHTML = "Joueur 1 vous avez gagné!";
         fin = true;
         gEBI("bRecommencer").style.display = "";
      }
      else {
         // Est-ce que joueur 2 gagne ?
         if (gagne(oImg)) {
            statutPartie.innerHTML = "Joueur 2 vous avez gagné!";
            fin = true;
            document.gEBI("bRecommencer").style.display = "";
         }
         else {
            // Le jeu est-il complet ? (partie nulle en sachant le reste)
            if (jeuComplet()) {
               statutPartie.innerHTML = "Partie nulle...";
               fin = true;
               gEBI("bRecommencer").style.display = "";
            }
            // Sinon, la partie continue normalement
            else {
               joueur1 = !joueur1;
               statutPartie.innerHTML = joueur1 ? "Joueur 1" : "Joueur 2";
               statutPartie.innerHTML += " c'est votre tour...";
            }
         }
      }
   }
   gEBI("bRecommencer").style.display = "";
}

/*
 Fonction pour vérifier si le jeu est complet.
 Elle consiste à s'assurer qu'il n'y a aucune
 case vide.
*/
function jeuComplet() {
   rempli = true;
   i=0;
   while (i<=2 && rempli) {
      j=0;
      while (j<=2 && rempli) {
         boxSrc = nomFichier(gEBI("box"+i+"_"+j).src);
         if (boxSrc != xImg && boxSrc != oImg)
            rempli = false;
         else
            j++;
      }
      i++;
   }
   
   return rempli;

}

/*
 Fonction qui vérifie si un joueur gagne.
 Il gagne si l'ensemble de ses signes forment
 au moins une ligne ou une diagonale
*/
function gagne(nomImage) {
   return ligneH(nomImage) || ligneV(nomImage) || diag1(nomImage)
         || diag2(nomImage) ? true : false;
}

/*
 Fonction qui vérifie la présence d'au moins
 une ligne horizontale pleine
*/
function ligneH(nomImage) {
   ligne = false;
   i=0;
   while (i <= 2 && !ligne) {
      ligne = true;
      j=0;
      while (j <= 2 && ligne) {
         boxSrc = nomFichier(gEBI("box"+i+"_"+j).src);
         if (boxSrc != nomImage)
            ligne = false;
         else
            j++;
      }
      i++
   }
   
   return ligne;
}

/*
 Fonction qui vérifie la présence d'au moins
 une ligne verticale pleine
*/
function ligneV(nomImage) {
   ligne = false;
   i=0;
   while (i <= 2 && !ligne) {
      ligne = true;
      j=0;
      while (j <= 2 && ligne) {
         boxSrc = nomFichier(document.gEBI("box"+j+"_"+i).src);
         if (boxSrc != nomImage)
            ligne = false;
         else
            j++;
      }
      i++;
   }

   return ligne;
}

/*
 Fonction qui vérifie si la diagonale '/' est pleine.
*/
function diag1(nomImage) {
   diag = true;
   i=0;
   j=0;
   while (i <= 2 && diag) {
      boxSrc = nomFichier(gEBI("box"+i+"_"+j).src);
      if (boxSrc != nomImage)
         diag = false;
      else {
         i++;
         j++;
      }
   }

   return diag;
}

/*
 Fonction qui vérifie si la diagonale '\' est pleine.
*/
function diag2(nomImage) {
   diag = true;
   i=2;
   j=0;
   while (i >= 0 && diag) {
      boxSrc = nomFichier(gEBI("box"+i+"_"+j).src);
      if (boxSrc != nomImage)
         diag = false;
      else {
         i--;
         j++;
      }
   }

   return diag;
}

/*
 Fonction qui met fin à la partie.
 On vide toutes les cases et on met
 le tour à joueur 1.
*/
function finPartie() {
   for (i=0; i<=2; i++)
      for (j=0; j<=2; j++)
         gEBI("box"+i+"_"+j).src = "img/vide.jpg";
		 
   joueur1 = true;
   statutPartie.innerHTML = "Joueur 1 c'est à votre tour...";
   fin = false;
   gEBI("bRecommencer").style.display = "none";
}

/*
 Si on se sert de noms de fichiers, il faut s'armer d'une fonction
 qui nous permettra de récupérer seulement le nom de l'image, et
 non le chemin au complet.
*/
function nomFichier(chemin) {
   return chemin.substring(chemin.lastIndexOf('/')+1, chemin.length);
}

/*
 Tout simplement pour éviter d'avoir à rédiger
 le long "document.getElementById(id)" partout
*/
function gEBI(id) {
   return document.getElementById(id);
}

 Conclusion

S'il y a des bugs avec d'autres navigateurs qu'Internet Explorer, je m'en excuse d'avance. Ce code a été fait avant tout pour ce navigateur, étant donné qu'une majorité de gens y a accès au départ.

 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

31 mai 2007 08:59:28 :
Réduction et simplification du code en général

 Sources du même auteur

Source avec Zip Source avec une capture OUTIL DE RECHERCHE SIMPLE ET PARAMÈTRABLE
Source avec Zip PROTOTYPE DE DRAG'N DROP
CONVERTISSEUR DE MESURES D'ANGLES
Source avec Zip Source avec une capture MENU DYNAMIQUE HORIZONTAL SIMPLE
Source avec Zip MENU DYNAMIQUE VERTICAL AVEC EFFET BOUTON

 Sources de la même categorie

Source avec Zip SPACE INVADER par aurelardie
Source avec Zip Source avec une capture DEMINEUR JAVACSCRIPT | PHP, CONFIGURABLE AVEC LE FRAMWORK JQ... par Nementon
Source avec Zip Source avec une capture ATTRAPE MOI SI TU PEUT par kazma
Source avec Zip LE CÉLÈBRE JEU SNACK par lesnouesremy
Source avec Zip Source avec une capture QUIZZ MASTER : 2000 QUESTIONS POUR TESTER VOTRE CULTURE par amrounix

 Sources en rapport avec celle ci

Source avec Zip SIMPLIFIER LA CREATION DYNAMIQUE D'ELEMENT HTML par kazma
Source avec Zip LE CÉLÈBRE JEU SNACK par lesnouesremy
Source avec Zip Source avec une capture BILLARD EN JAVASCRIPT C'EST POSSIBLE ! par amrounix
Source avec une capture MENU SIMPLE par tit1012
Source avec Zip Source avec une capture MORPION / TIC TAC TOE par DaveVBnet

Commentaires et avis

Commentaire de Arto_8000 le 30/05/2007 03:50:10

Pour accèder à tes éléments dans ta page HTML, il est fortement recommandé (si ce n'est pas obligatoire) d'utiliser document.getElementById(id) aulieu d'utiliser directement le id de ton élément comme tu fais dans ton script.

Aussi pour ta fonction nomFichier, ça serait mieux que tu utilises la fonction String.lastIndexOf(chaine,position) et un substring pour aller extraire ton nom de fichier.

"return ligne ? true : false;"

Utiliser ce genre de synthaxe c'est parfois utile, mais faut pas abuser ... "return ligne;" aurait suffit.

Commentaire de FasteX_ le 31/05/2007 09:07:50

Salut Arto_8000, merci pour tes remarques. J'avais pris l'habitude de ne plus utiliser le document.getElementById(id) pour accèder aux éléments, ayant déjà vu qu'il réussissait à les trouver quand-même. Toutefois, je les ai rajouter dans mon code pour être certain qu'il respecte cette norme. Pour ce qui est des retours de fonction du genre "return ligne ? true : false;", je n'y avait tout simplement pas porté attention! Là il ne devrait plus rester de code inutile. Si tu as d'autres suggestions, ne te gênes pas ;)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

javascript dans formulaire acrobat [ par domi ] "Envoie par mèl du contenu du formulaire"j'ai écrit deux lignes simple en javascript dans un formulaire acrobat, il fonctionne bien avec Acrobat "prog jeu de nim [ par matcheu ] salu est ce que quelqun sait programmé le jeu de nim en perl recherche aide [ par g2m ] nouveau dans la création de site, je bute sur une chose simple, créer un menu déroulant horizontale avec survol.Un truc simple quoi!Dans cette barre 8 Boutons radios? [ par dufour137 ] bonjour tout le monde, j'aimerais svoir comment faire pour tester une valeure dans une page htm sur un bouton radio pour ouvrir une page internet selo PRoblème en javascript, jeu de pendu [ par Chihiro ] Voilà, j'ai un gros problème dans mon script qui ne marche pas, parce que je suis vraiment nulle en programmation... Est ce que quelqu'un pourrait y j c'est simple comme bonjour mais je ne me raplle plus... [ par escaflone1 ] Bonjour,comme je le di je ne sais plus comment on fait pour actualiser une page mais juste une seul fois:la page charger puis 1 voir 2 sec apres hop i tout simple [ par pierre81 ] je débute et je voudrez savoir comment on fait pour dire que quand on clique sur la frame de gauche , je veux afficher un truc a droite merci de me do Formulaire tout simple [ par Angel42480 ] Bonjour, je travail en html,Je désirerais créer un formulaire, qui définisse une image.Exemple : on tape dans la case du formulaire : "arbre" . Je veu Tester Labyrinthus v2.8 améliorer mon jeu [ par yanndroniou ] Yann Droniou<img src=/imgs2/smile_approve.gif border=0 align="absmiddle" Stratégie de jeu [ par ralota ] Je souhaite créer un jeu en ligne utilisant javascript et php comme langages. Ce jeu consiste à déplacer des poins tout comme l'échec mais il s'agit d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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,920 sec (3)

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