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