Le jeu des allumettes
Vous connaissez sûrement le jeu des allumettes, peut-être sous un autre nom. Ce jeu se joue à 2 joueurs, voici son principe :
On dispose sur la table un petit tas d'allumettes. Chaque joueur prend à tour de rôle soit 1, soit 2, soit 3 allumettes. Le joueur qui prend la dernière allumette a perdu. Pour gagner, il faut donc laisser la dernière allumette à son adversaire.
Grâce à l'applet Java ci-dessous, vous pouvez vous entraîner au jeu des allumettes.
Utilisation de cette applet :
Maintenant c'est à vous de jouer. Bonne chance, l'ordinateur est très fort ! Mais il vous fait un cadeau puisqu'il vous laisse commencer. Profitez de cet avantage pour le gagner sans vous laissez battre.
Voici le code source en Java de l'applet ci-dessus du jeu des allumettes. En analysant le code source ci-dessous vous devriez en déduire la stratégie à adopter pour gagner à tous les coups (celle qu'utilise l'ordinateur) au cas où vous ne la connaîtriez pas encore.
Ce programme a été mis au point et compilé avec JBuilder 9 sous Linux :
import java.awt.*; import java.awt.event.*; import java.applet.*; /************************************************************/ // debut de la classe /************************************************************/ public class jeux extends Applet implements ActionListener { /************************************************************/ // Declaration des variables /************************************************************/ // Les labels : Label label1 = new Label( " Combien prenez-vous d'allumettes ? "); Label label2 = new Label( " Celui qui prend la dernière allumette a PERDU ! "); // Les boutons : Button mon_bouton1 = new Button("1 allumette"); Button mon_bouton2 = new Button("2 allumettes"); Button mon_bouton3 = new Button("3 allumettes"); Button rejouer = new Button("Ordinateur"); // Les autres variables : int allumettes_restant = 17; boolean joueur = true; /************************************************************/ // Fonction dessiner_allumettes /************************************************************/ public void dessiner_allumettes(Graphics ecran, int nbr_allumettes) { int i, y = 100; i = 0; ecran.setColor(Color.gray); ecran.fillRect(20, y, 350, 120); while (i < nbr_allumettes) { ecran.setColor(Color.yellow); ecran.fillRect(i * 20 + 30, y + 30, 10, 80); ecran.setColor(Color.red); ecran.fillRoundRect(i * 20 + 30, y + 10, 10, 20, 10, 10); i = i + 1; } } // fin de la fonction dessiner_allumettes /************************************************************/ // Fonction init() pour initialiser l'applet /************************************************************/ public void init() { // insère les boutons : add(label1); add(mon_bouton1); add(mon_bouton2); add(mon_bouton3); add(rejouer); add(label2); // connecte chaque bouton au gestionnaire d'evenement (Fonction ActionPerformed) : mon_bouton1.addActionListener(this); mon_bouton2.addActionListener(this); mon_bouton3.addActionListener(this); rejouer.addActionListener(this); } // fin de la fonction init() /************************************************************/ // Fonction paint() /************************************************************/ public void paint(Graphics ecran) { ecran.setColor(Color.red); ecran.drawString( "Cette applet JAVA a été réalisée par Jean-Christophe MICHEL", 20, 260); ecran.drawString("http://java.gecif.net", 130, 280); dessiner_allumettes(ecran, allumettes_restant); } // fin de la fonction paint() /************************************************************/ /* Fonction ActionPerformed (ActionEvent) */ /* Cette fonction ActionPerformed est le gestionnaire d'evenements */ /************************************************************/ public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == mon_bouton1) { // Teste si le bouton 1 a été enfoncé if (joueur) { allumettes_restant = allumettes_restant - 1; label1.setText("Appuyez sur le bouton ORDINATEUR pour que je joue"); label2.setText(""); joueur = false; } else { label2.setText( " Appuyez sur le bouton ORDINATEUR pour que je joue ! ! !"); label1.setText(""); } } else if (source == mon_bouton2) { // Teste si le bouton 2 a été enfoncé if (joueur) { allumettes_restant = allumettes_restant - 2; label1.setText("Appuyez sur le bouton ORDINATEUR pour que je joue"); label2.setText(""); joueur = false; } else { label2.setText( " Appuyez sur le bouton ORDINATEUR pour que je joue ! ! !"); label1.setText(""); } } else if (source == mon_bouton3) { // Teste si le bouton 3 a été enfoncé if (joueur) { allumettes_restant = allumettes_restant - 3; label1.setText("Appuyez sur le bouton ORDINATEUR pour que je joue"); label2.setText(""); joueur = false; } else { label2.setText( " Appuyez sur le bouton ORDINATEUR pour que je joue ! ! !"); label1.setText(""); } } else if (source == rejouer) { // Teste si le bouton recommencer a été enfoncé joueur = true; if ( (allumettes_restant == 2) || (allumettes_restant == 6) || (allumettes_restant == 10) || (allumettes_restant == 14)) { allumettes_restant = allumettes_restant - 1; if (allumettes_restant != 1) { label2.setText( " Moi, ordinateur, je prends 1 allumette. C'est à vous de jouer."); label1.setText( " Combien prenez-vous d'allumettes ? "); } else { label2.setText( " Et moi, ordinateur, je prends 1 allumette. Vous avez perdu !"); label1.setText( "Appuyez sur ORDINATEUR pour recommencer une partie"); } } else if ( (allumettes_restant == 3) || (allumettes_restant == 7) || (allumettes_restant == 11) || (allumettes_restant == 15)) { allumettes_restant = allumettes_restant - 2; if (allumettes_restant != 1) { label2.setText( " Moi, ordinateur, je prends 2 allumettes. C'est à vous de jouer."); label1.setText( " Combien prenez-vous d'allumettes ? "); } else { label2.setText( " Et moi, ordinateur, je prends 2 allumettes. Vous avez perdu !"); label1.setText( "Appuyez sur ORDINATEUR pour recommencer une partie"); } } else if ( (allumettes_restant == 4) || (allumettes_restant == 8) || (allumettes_restant == 12) || (allumettes_restant == 16)) { allumettes_restant = allumettes_restant - 3; if (allumettes_restant != 1) { label2.setText( "Moi, ordinateur, je prends 3 allumettes. C'est à vous de jouer."); label1.setText( " Combien prenez-vous d'allumettes ? "); } else { label2.setText( " Et moi, ordinateur, je prends 3 allumettes. Vous avez perdu !"); label1.setText( "Appuyez sur ORDINATEUR pour recommencer une partie"); } } else /* il ne reste plus qu'une allumette, on recommence une partie */{ allumettes_restant = 17; label2.setText( " Nouvelle partie, c'est a vous de commencer."); label1.setText( " Combien prenez-vous d'allumettes ? "); } } repaint(); } // fin de la fonction ActionPerformed } // fin de la classe