Designed by Derf !
96 en ligne   Boutique | Sites | Bar | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  


 Recherche

 NewsLetter





   

Jeux de l'été (et de 4)

Un petit jeu de Mastermind





DB77
C'est reparti pour un tour...
Il y avait longtemps que je n'étais pas venu vous proposer un petit jeu.
Je me suis attaqué cette fois-ci à un jeu de MasterMind.
Celui-ci est en JavaScript et il pourra donc être facilement mis en place. De plus, j'ai veillé à ce qu'il tourne à la fois sous FireFox et sous IE.
A vous de réfléchir pour trouver la combinaison cachée ;-)

Tester la démo - Télécharger tous les fichiers

 Fonctionnement 
Ci-dessous le code commenté.
Le principe est simple, identique au jeu connu de tous.
Il suffit de cliquer sur les ronds de couleur pour les déposer dans un emplacement libre ou pour les retirer d'un emplacement.
Les messages (Bravo !, Perdu :(, etc.) peuvent bien sûr être adaptés à vos besoins...
Il peut également être rendu plus sympa en affichant des pictos blanc ou noir selon les pions bien ou mal placés. Le code est déjà en place, il y a juste à le décommenter et commenter l'ancien.

mastermind.htm 
<html>
<META NAME="AUTHOR" CONTENT="Denis Blomme">
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<head>
<style>
input {font-family:Verdana,Arial;font-size:10px;}
td  {text-align:center;font-family:Verdana,Arial;font-size:10px;}
img,a {cursor:pointer;}
</style>

<script language="javascript">
// Réservation des variables
// Table des couleurs (noms des images GIF)
var couleurs=new Array("", "bleu", "cyan", "rouge", "vert", "orange", "jaune", "violet", "marron");
var nbcouleurs=couleurs.length-1; // Nombre de couleurs (éléments de la table)
var trous=new Array(0,0,0,0,0); // La combinaison du joueur
var cherche=new Array(0,0,0,0,0); // La combinaison à trouver
var work=new Array(0,0,0,0,0); // Table de travail pour comparer
var nbtrous=4; // Nombre de trous
var nbcoups=0; // Compteur des coups
var nbcoupsmax=8; // Nombre de coups autorisés
var verif=1; // Pour savoir s'il a bien vérifié
//
// Les fonctions 
//
// Tirer «nbtrous» couleurs parmi «nbcouleurs»
function combinaison()
// On tire aléatoirement les couleurs
   for(i=1;i<=nbtrous;i++){
      Nball=1+Math.floor(Math.random()*nbcouleurs);cherche[i]=Nball;
      }
   for(i=0;i<nbcoupsmax;i++){document.frm ["R"+i].value="";}
   document.frm.libnb.value="Il vous reste " + (nbcoupsmax-nbcoups) + " coups";
}
// L'utilisateur choisit une couleur
function choisir(clr)
{// Vérifier qu'il a vérifié sa précédente proposition
   if(verif==0){alert("Vous n'avez pas vérifié la proposition précédente");return true;}
   trouve=0; // Trouver la 1ère place pour la mettre
   for(i=1;i<=nbtrous;i++){
   if(trous[i]==0){
      // On stocke la couleur choisie et on l'affiche
      trous[i]=clr;
      document ["L"+nbcoups+""+i].src=couleurs[clr]+".gif";
      if(i==nbtrous){verif=0;}// S'il a tout rempli il doit vérifier
      return true; // Il ne faut pas tous les remplir
      }
   }
}
// Il peut enlever une couleur
function enlever(encours,point)
// Mais sur la ligne en cours !
   if(encours!=nbcoups){alert("Ligne déjà jouée !");return true;}
   // On réinitialise à zéro, espace et on remet verif à 1
   trous[point]=0;document ["L"+encours+""+point].src="espace.gif";verif=1;
}
// On affiche la solution
function solution()
// On affiche les «nbtrous» jetons sur la dernière ligne
for(i=1;i<=nbtrous;i++){
   clr=cherche[i];document ["L"+nbcoupsmax+""+i].src=couleurs[clr]+".gif";
   }
}
// On compare sa proposition
function comparer()
// Vérifier qu'il a bien rempli tous les trous
   for(i=1;i<=nbtrous;i++){if(trous[i]==0){alert("Incomplet");return true;}}
   verif=1; // Indicateur comme quoi il a vérifié
   // Initialiser la table de travail
   for(i=1;i<=nbtrous;i++){work[i]=cherche[i];}
   nbbien=0; // Recherche des "Bien placé"
   for(i=1;i<=nbtrous;i++){
      if(work[i]==trous[i]){nbbien++;work[i]=0;trous[i]=0;}
      }
   nbmal=0; // Recherche des "Mal placé"
   for(i=1;i<=nbtrous;i++){
      if(work[i]!=0){// si on l'a déjà traité, ne pas le refaire
         for(j=1;j<=nbtrous;j++){
            if((work[i]==trous[j])&&(trous[j]!=0)){nbmal++;work[i]=0;trous[j]=0;}
         }
     }work[i]=0;
   }
   // Affichage des «Bien placés» et «Mal placés»
   // Avec du texte dans un input en readonly
   document.frm ["R"+nbcoups].value="Bien: "+nbbien+ " / Mal : "+nbmal;
   // ou avec des images représentant les pions noirs et blancs
   //document.frm ["B"+nbcoups].src="B"+nbbien+".gif";
   //document.frm ["M"+nbcoups].src="M"+nbmal+".gif";
   // Incrémenter Nbcoups et réinitialiser la table des trous
   nbcoups++;for(i=1;i<=nbtrous;i++){trous[i]=0;}
   document.frm.libnb.value="Il vous reste " + (nbcoupsmax-nbcoups) + " coups";
   // A-t-il trouvé la combinaison ?
   if(nbbien==nbtrous){
      solution();alert("Bravo !");
      if(confirm("Autre partie ?")==true){location.reload(true);}
      return true;
      }
   // A-t-il dépassé le nombre de coups maximum ?
   if(nbcoups>=nbcoupsmax){
      solution();alert("Perdu :(");
      if(confirm("Autre partie ?")==true){location.reload(true);}
      return true;
      }
}
</script>

</head>
<body onLoad="combinaison();">
<table border=1 cellpadding=0 cellspacing=0><form name="frm">
<tr><td colspan=2>
   <script language="javascript">
      for(i=1;i<=nbcouleurs;i++){ 
         // Affichage des nbcouleurs jetons avec un lien pour les choisir
         document.write("<img title='Choisir' src='"+couleurs[i]+".gif' onclick='choisir("+i+")'>");
      }
   </script>
&nbsp;&nbsp;
   <u><a onclick="comparer()" title="Vérifier">Vérifier</a></u>
   </td></tr>
   <tr><td colspan=2>   
         Cliquez sur les couleurs puis sur<br>
         "Vérifier" pour les comparer.<br>
      <input type=text size=25 readonly=readonly name="libnb" value="">
      </td></tr>
      <script language="javascript">
         for(ligne=0;ligne<=nbcoupsmax;ligne++){
         // Créer les lignes où l'utilisateur va jouer
            document.write("<tr><td>");
            // nbtrous à vide appelés "L(ligne)(colonne)"
            for(i=1;i<=nbtrous;i++){
               document.write("<img title='Enlever' onclick='enlever("+ligne+","+i+")'");
               document.write(" name='L"+ligne+""+i+"' src='espace.gif' border=0>");
               }
            document.write("</td><td>");
            // et la dernière colonne pour la solution (B ou M (ligne)(colonne) puis "Solution")
            if(ligne!=nbcoupsmax){
               // soit un champ text en readonly
               document.write("<input type=text size=18 readonly=readonly name='R"+ligne+"'><br>");
               // soit des images (une pour Bien placé et une pour Mal placé
               // document.write("<img name='B"+ligne+"' src='vide.gif'><br>")
               // document.write("<img name='M"+ligne+"' src='vide.gif'></td></tr>");
               }else{
               document.write("Solution</td></tr>");
               }   
         }
      </script>

</form>
</table>
</body>
</html>

A vos claviers...
Et creusez-vous bien les méninges...

Pour pouvoir écrire dans ce forum, identifiez-vous !

 Lire  05/03/2008 de djakou
il n'y a aucune couleur pour moi, que des petites cro...
  • 05/03/2008 de DB77 Comment ça ? Ici, en démo ou sur ton site ?...
  • 05/03/2008 de djakou Bonjour, j'ai recopier le script sur ma...
  • 05/03/2008 de DB77 Il faut télécharger le zip et comme ça tu a...
  •  Lire  08/02/2008 de Didier
    Arrfff :) Excellent ! Bravo Denis !
  • 08/02/2008 de DB77 Merci Didier ! J'avais peur qu'il traîne ...
  • 09/02/2008 de JPierre Super Denis, le spécialiste des jeux d...
  • 10/02/2008 de DB77 Oui, JPierre, à mardi ;)
  • 12/02/2008 de Bisou Good Job Denis ;)
  • 13/02/2008 de DB77 Merci Bisou et content de te revoir de temp...
  • 13/02/2008 de Bisou Oui Denis, il est vrai que je n'ai vraime...
  •   v1.3p © ASP-PHP.net 2002  

    DB77 le 18/02/2008 (2 772 hits)
    Didier 11 logiciels Microsoft GRATUITS dont Visual Studio 2008 Pro,
    SQL Server 2005, Expression Studio, Windows Server 2003, Office project Pro, etc... !!!
    Au fil des news  
    Magazines - Le n°108 de Programmez est disponible
    Adobe - Téléchargez gratuitement le dossier spécial Adobe
    Magazines - Le N°107 de Programmez est disponible.
    Créer une Feature d'administration sous SharePoint - Comment créer un composant d'administration
    Dans les précédents articles, nous avons évoqué la création de pages personnalisées dans ...
    PHP - Afficher une date : multilangage et relative
    Agenda - Inscrivez-vous au WygDay [Wygwam] le 22/5 à Lille
    Sync Framework - Introduction au MS Sync Framework - Installation
    Microsoft, lors du Keynote du TechEd Europe 2007, a annoncé la mise à disposition d'un nouveau ...
    Reporting Services et SharePoint - Utiliser SharePoint comme source de données
    Dans un précédent article, nous avons pu apprendre comment créer un rapport utilisant une source de ...
    JavaScript - Affiche un calendrier sous une zone de saisie
    Adobe - Adobe lance la version bêta publique de Photoshop
    Microsoft Expression Web - Premier contact
    Je suis revenu des Techday's 2008 avec une idée en tête. Je voulais savoir comme travailler avec ...
    PHP & MySQLi - de Hello / Sector One
    Hello de Sector One propose un article avec PHP et MySQLi, la nouvelle extension de MySQL
    VBScript - Zip de fichiers automatique et efface la source
    Dreamweaver CS3 + Php + Mysql - Trucs et Astuces - Part 4 -
    Pour changer, deux nouvelles astuces pour vous . Alternate Colors. Inscription et envoi de mail
    Magazines - Le N°106 de Programmez est disponible.
    Divers - Zone Webmasters
    PHP5 - Classe de connexion à MySQL
    Agenda - 20/03 : Boostez vos applis PHP-Windows Server 2008
    Créer un thème graphique pour WSS V3 - Comment créer un thème graphique pour WSS V3
    Nous avons vu dans un précédent article comment créer une master page. Il peut parfois être ...
    Les plans de maintenance et SQL Server 2000 - Installer un plan de maintenance sous SQL Server
    Dans le cadre de la gestion d'instances SQL Server 2000 hébergeant SharePoint, il est intéressant ...
    PHP - PHP et MYSQL - MySQLi - PDO
    Jeux de l'été (et de 4) - Un petit jeu de Mastermind
    C'est reparti pour un tour... Il y avait longtemps que je n'étais pas venu vous proposer un petit ...
    Migration WSS avec un Site Template spécifique - Migration WSS avec un Site Template spécifique
    Les précédents articles nous ont permis de voir les différents modes de migration de WSS V2 vers ...
    DataBase Upgrade de WSS V2 vers WSS V3 - Upgrade de WSS V2 vers WSS V3 par la DataBase
    Parmi les trois modes de migration de Windows SharePoint Services V2 vers WSS V3, nous avons vu les ...
    Création de module DotNetNuke en C# - Source : Jerome Fortias sap-integration.net
    Je vous propose un nouvel article consacré au développement de modules pour DotNetNuke en C#. Il ...
    ASP-PHP.net - On sera aux MS TechDays 2008 ! et vous ?
    Créer son modèle de rapports SSRS - Créer son modèle de rapports Reporting Services
    Après la création du modèle de style pour Reporting Services, il est souhaitable aussi d'avoir un ...
    PHP - publipostage sur rtf préformaté avec mysql
    Créer son style de rapports SSRS - Créer son style de rapports Reporting Services
    Lorsqu'on travaille avec Reporting Services pour développer ses rapports, on veut très souvent ...
    .NET - C#2 et ASP.NET 2.0 - Développez un projet de A à Z
    SharePoint - MOSS 2007 - De l'intégration au développement
    PHP - PHP 5 MySQL 5 AJAX
    Découverte de Visual Studio 2008 -
    Microsoft a annoncé, lors du TechEd'07 organisé à Barcelone, la mise à disposition de la release de ...
    Adobe - Photoshop Elements 6 Version MAC
    Adobe - Adobe sur Intergraphic 2008
    Reporting Services et données XML - Utiliser des données XML dans Reporting Services
    Une demande récente que j'ai reçue : Comment utiliser des données provenant d'un flux XML dans ...
    Dreamweaver CS3 + XML + Ajax - Création d'une région détail
    Dans cet article, je vais vous montrer comment utiliser la technique région détail, avec Spry
    PHP - Jolie arborescence dynamique
    Magazines - Le N°104 de Programmez est disponible
    PHP - PhPBB 3.0.0 !!!
    Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
    Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
      Scripts : Scripting | ASP-PHP | ASP.net | Divers
      Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats
    v3 © Didier 2003   
     

    Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
     CodePPC Groupes Utilisateurs Microsoft El Roubio The Inquirer FR Wygwam DotNet Project TechNet MVP Codes Sources ASP-magazine