[L'informatique]

Ton navigateur ne peut pas exécuter les 1.0 Java applets nécessaires à ce programme.

Ce programme applet Java exécute un jeu de mémoire simple. Le jeu débute avec 16 cartes, face en dessous. Appuie sur le bouton pour commencer, et choisis deux cartes avec la souris. Essaie de te rappeler de leurs positions! Il ne peut y avoir plus que deux cartes visibles à la fois (quand tu choisis la troisième, la première se retourne automatiquement). Si les deux cartes sont pareilles, elles sont retirées du tableau. Continue à choisir des cartes jusqu'à ce qu'il n'en reste plus.

Voici le code du programme Java qui permet au jeu de fonctionner:

import java.awt.*;

public class Flip extends Frame {
  static int nCARDS = 16;
  Button startButton; 
  String szButton_msg = "Appuyez ici pour commencer.";
  boolean bInAnApplet = true;
  Card[] aCard = new Card[nCARDS];
  int nHitCount = 0;
  Label label;
  Card[] aChosen = new Card[2];

  public Flip () {
    Panel centrePanel = new Panel();
    Panel controlPanel = new Panel();
    int i;

    centrePanel.setLayout(new GridLayout(4,4));
    for (i = 0; i < nCARDS; i++) {
      centrePanel.add(aCard[i] = new Card());
    }
    add("Center", centrePanel);

    controlPanel.setLayout(new GridLayout(2,1));
    controlPanel.add(label = new Label("Points: " + this.nHitCount + " de " + nCARDS/2, Label.CENTER));
    controlPanel.add(startButton = new Button(szButton_msg));
    add("South", controlPanel);

    validate();
  }

  public boolean handleEvent(Event event){
    int i = 0;
    int nChosen = 0;
    boolean bFilled = true;

    if (event.id == Event.WINDOW_DESTROY) {
      if (bInAnApplet) {
        dispose();
      } 
      else {
        System.exit(0);
      }
    }
    if (event.target == startButton && event.id == Event.MOUSE_DOWN) {
      this.szButton_msg = "Recommencez";
      resetCards();
      dealCards();
      nHitCount = 0;
      label.setText("Points: " + this.nHitCount + " de " + nCARDS/2);
      startButton.setLabel(szButton_msg);
    } 
    if (event.target instanceof Card && event.id == Event.MOUSE_DOWN) {
      /* décide quelle carte a été choisie */
      for(i = 0;i < nCARDS && event.target != aCard[i]; i++) {}

      /* retiens-la dans ta mémoire */
      if (aCard[i].bActive) {
        bFilled = true;
        for(nChosen = 0; nChosen < 2; nChosen++) {
          if (aChosen[nChosen] == null) {
            aChosen[nChosen] = aCard[i];
            bFilled = false;
          }
        }

        /* et vérifie que c'est la bonne avant de réorganiser les cartes */
        if (bFilled) {
          if (aChosen[0] != null && aChosen[1] != null) {
            if (aChosen[0].nCardType == aChosen[1].nCardType) {
              this.nHitCount++;
              aChosen[0].remove();
              aChosen[1].remove();
            }
          }  

          resetCards();
          aChosen[1] = null;
          aChosen[0] = aCard[i];
        }
        aCard[i].flip();
      }
      label.setText("Score: " + this.nHitCount + " de " + nCARDS/2);
      if (this.nHitCount == nCARDS/2) {
        label.setText("Félicitations!");
        for (i = 0; i < nCARDS; i++) {
          aCard[i].done();
        }
      }
    }
    return super.handleEvent(event);
  }
  public static void main(String args[]) {
    Flip window = new Flip();
    window.setTitle("Mémoire");
    window.setResizable(false);
    window.pack();
    window.show();
  }
  public void dealCards() {
    int i = 0;
    switch((int)(Math.random() * 4)) {
     case 0:
       aCard[i].nCardType = 1;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 2;
       aCard[++i].nCardType = 2;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 5;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 1;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 5;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 4;
       aCard[++i].nCardType = 4;
       break;
    case 1:
       aCard[i].nCardType = 2;
       aCard[++i].nCardType = 1;
       aCard[++i].nCardType = 4;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 2;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 4;
       aCard[++i].nCardType = 5;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 5;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 1;
       break;
    case 2:
       aCard[i].nCardType = 4;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 2;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 1;
       aCard[++i].nCardType = 5;
       aCard[++i].nCardType = 1;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 2;
       aCard[++i].nCardType = 5;
       aCard[++i].nCardType = 4;
       break;
    case 3:
       aCard[i].nCardType = 5;
       aCard[++i].nCardType = 1;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 2;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 1;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 4;
       aCard[++i].nCardType = 5;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 2;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 4;
       break;
    default:
       aCard[i].nCardType = 1;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 2;
       aCard[++i].nCardType = 2;
       aCard[++i].nCardType = 7;
       aCard[++i].nCardType = 4;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 5;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 1;
       aCard[++i].nCardType = 5;
       aCard[++i].nCardType = 3;
       aCard[++i].nCardType = 6;
       aCard[++i].nCardType = 8;
       aCard[++i].nCardType = 4;
       break;
    }
  }
  public void resetCards() {
    int i = 0;
    
    aChosen[0] = null;
    aChosen[1] = null;
    for (i = 0; i < nCARDS; i++) {
      if (!aCard[i].bActive) {
        aCard[i].flip();
      }
    }
  }
}

/*
 *  Cette classe crée des cartes individuelles et leur donne des actions possibles.  
*/
class Card extends Canvas {
  boolean bActive = true;
  int nCardType = 0;

  public void paint(Graphics g) {   
    if (this.bActive) {
      g.setColor(Color.blue);
      g.fillRect(0, 0, 40, 40);
    }
    else { 
      g.clearRect(0, 0, 40, 40);
      switch (this.nCardType) {
        case 0: g.setColor(getBackground()); break;
        case 1: g.setColor(Color.red); break;
        case 2: g.setColor(Color.orange); break;
        case 3: g.setColor(Color.yellow); break;
        case 4: g.setColor(Color.green); break;
        case 5: g.setColor(Color.blue); break;
        case 6: g.setColor(Color.magenta); break;
        case 7: g.setColor(Color.pink); break;
        case 8: g.setColor(Color.darkGray); break;
        default: 
          g.setColor(Color.yellow); 
          break;
      }
      g.fillOval(0, 0, 40, 40);
      if (nCardType == -1) {        /* célébrez! */
         g.setColor(Color.black);
         g.drawOval(0, 0, 40, 40);
         g.setColor(Color.white);
         g.fillRect(13, 13, 5, 5);
         g.fillRect(23, 13, 5, 5);
         g.setColor(Color.blue);
         g.fillRect(15, 15, 2, 2);
         g.fillRect(25, 15, 2, 2);
         g.fillRect(20, 20, 2, 4);
         g.setColor(Color.red);
         g.fillArc(10, 17, 20, 20, 180, 180); 
      }
    }
  }
  public Dimension minimumSize() {
    return new Dimension(42,42);
  }
  public Dimension preferredSize() {
     return minimumSize();
  }

  public void flip() {
    if (this.nCardType > 0) {
      if (this.bActive == true) {
        this.bActive = false;
      }
      else {
        this.bActive = true;
      }
      repaint();
    }
  }

  public void remove() {
    this.bActive = false;
    this.nCardType = 0;
    repaint();
  }

  public void done() {
    this.nCardType = -1; /* -1 est notre numéro magique où il se passe des choses spéciales. */
    repaint();
  }
}

[Reculer]


[Accueil][Scientifiques canadiens][Crédits][English]

La physique | La chimie | La biologie | Le génie | L'informatique | Lumières en sciences et technologie

Produit par Galactics.
Commentaires: galactics@spacesim.org.
Révisé la dernière fois le 14 août 1998.