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
[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE par Audrey
Dans un de mes articles précédents , j'avais parlé des DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et po...
Cliquez pour lire la suite de l'article par Audrey ZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATIONZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATION par ROMELARD Fabrice
Une des nouveautés de la version V 3.0 était l'apparition de l'onglet Social qui ne fonctionnait que si le MarketPlace était activé sur son poste. Cela limitait donc son intérêt, car hors du cadre commercial USA-CANADA, peu de monde trouva...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
éditions PEARSON
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abor...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2 par ROMELARD Fabrice
Avec la dernière génération du lecteur MP3 de Microsoft, le ZUNE HD, Microsoft a publié une nouvelle version du logiciel pour PC. Ainsi, je me suis décidé à installer celle-ci sur mon Tablet PC ACER, comme toujours le logiciel est donc tél...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : CONVERSIONRE : CONVERSION par peter2010
Cliquez pour lire la suite par peter2010
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|