Accueil > > > 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
Description
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);
}
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.
Historique
- 31 mai 2007 08:59:28 :
- Réduction et simplification du code en général
Sources du même auteur
OUTIL DE RECHERCHE SIMPLE ET PARAMÈTRABLEOUTIL DE RECHERCHE SIMPLE ET PARAMÈTRABLEIl s'agit en fait d'une application (*.hta) qui permet de rechercher sur le Web beaucoup plus rapidement et plus efficacement, tout en s'adaptant à la...
PROTOTYPE DE DRAG'N DROPPROTOTYPE DE DRAG'N DROP Un code qui, je crois, pourra servir à la réalisation de projets. Comme le titre l'indique, il s'agit d'un prototype de drag'n drop. Je l'ai simplifié...
CONVERTISSEUR DE MESURES D'ANGLESCONVERTISSEUR DE MESURES D'ANGLES Voici ce que je pourrais appeler un «convertisseur de mesures d'angles». Par exemple, convertir x° en radians ou en grad, et vice-versa. Son utilisati...
MENU DYNAMIQUE HORIZONTAL SIMPLEMENU DYNAMIQUE HORIZONTAL SIMPLEC'est un menu, différent de mon dernier car, dans celui-ci, les sous-menus s'affichent à coté des menus au lieu d'en dessous. Aussi, on peut définir s...
MENU DYNAMIQUE VERTICAL AVEC EFFET BOUTONMENU DYNAMIQUE VERTICAL AVEC EFFET BOUTON Son utilité est la meme que tout autre menu. Sauf que celui-ci est, je pense, relativement court et facile à comprendre à comparer au autres. C'est l...
Sources de la même categorie
Commentaires et avis
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
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|