Le jeu des allumettes

La règle du jeu

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.

Entraînez-vous sur cette applet Java

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.

 

Le code source de l'applet

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