Lightgame

Description

Un simple jeu qui comporte une grille de lumières, lesquelles devront toutes être allumées. Comme décrit dans le fichier html joint dans le zip :
  • ) une case blanche est étiente, tandis qu'une case rouge est allumée
    • ) cliquer sur une case revient à en changer l'état, ainsi que celui des 8 cases qui l'entourent.


Ce programme utilise la classe ErrorDialog de romuluslepunk qui permet d'afficher dans une boite de dialogue les détails des exceptions.

Source / Exemple :


/**

  • /
package com.loloof64.lightgame; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JApplet; import javax.swing.JOptionPane; import com.imported.javafrsources.ErreurDialog; /**
  • @author loloof64
  • @version 0.1.0
  • @compiled_with jdk 1.5.06
  • /
public class LightGameApplet extends JApplet implements MouseListener{ /**
  • Variable de sérialisation
  • /
protected static final long serialVersionUID = 958771044468642524L; /**
  • Le nombre de cases de coté
  • /
protected int nbrDeCasesDeCote; /**
  • Les états (allumée, éteinte) des cases.
  • /
protected int matriceDesEtats[][]; /**
  • Constructeur par défaut
*
  • /
/**
  • Constante pour indiquer l'état éteint d'une case
  • /
protected final int ETAT_ETEINTE = 1; /**
  • Constante pour indiquer l'état allumé d'une case
  • /
protected final int ETAT_ALLUMEE = 2; /**
  • Dimension du côté d'une case
  • /
protected final int DIM_COTE_CASE = 30; /**
  • Emplacement en abscisse du bord haut-gauche de la
  • grille.
  • /
protected final int BORD_GRILLE_X = 20; /**
  • Emplacement en ordonnee du bord haut-gauche de la
  • grille.
  • /
protected final int BORD_GRILLE_Y = 20; /**
  • Couleur de dond
  • /
protected final Color COUL_FOND = Color.blue; /**
  • Couleur de la bordure des cases
  • /
protected final Color COUL_BORDURE_CASE = Color.yellow; /**
  • Couleur d'une case éteinte
  • /
protected final Color COUL_CASE_ETEINTE = Color.white; /**
  • Couleur d'une case allumée
  • /
protected final Color COUL_CASE_ALLUMEE = Color.red; /**
  • Constructeur par défaut
*
  • /
public LightGameApplet(){ addMouseListener(this); getContentPane().setSize(500, 500); initialiserPartie(); } /**
  • Initialise la partie : crée un nouvelle matrice et la
  • remplie avec un tirage aléatoire.
*
  • /
public void initialiserPartie(){ try{ int nbrDeCasesDeCote = Integer.parseInt( JOptionPane.showInputDialog("Nombre de cases par cotés ? (multiple de 3)")); /*Assume que temp/3 est un entier
  • temp % 3 est le reste de la division
  • de temp par 3 (ou c'est temp modulo 3)
  • En effet, c'est le seul cas de grilles qui
  • sont solvables.
  • /
if (nbrDeCasesDeCote%3 != 0) { System.err.println("Le nombre entre n'est pas"+ "un multiple de 3!"); JOptionPane.showMessageDialog(null, "Le nombre entre n'est pas "+ "un multiple de 3!", "Erreur !", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null, " Vous devriez recharger la page", "Erreur !", JOptionPane.ERROR_MESSAGE); } this.nbrDeCasesDeCote = nbrDeCasesDeCote; matriceDesEtats = new int [nbrDeCasesDeCote][nbrDeCasesDeCote]; int etat; /* Condition sine qua non */ assert (ETAT_ALLUMEE - ETAT_ETEINTE == 1) : "ETAT_ALLUMEE - ETAT_ETEINTE != 1"; /* Remplissage de la matrice */ for(int j = 0; j < nbrDeCasesDeCote; j++){ for(int i = 0; i < nbrDeCasesDeCote; i++){ /*ETAT_ETEINTE+ {0 ou 1}*/ etat = (int) (Math.floor(Math.random()*2)) + ETAT_ETEINTE; matriceDesEtats[i][j] = etat; } } } catch(NumberFormatException nfe){ String errorMsg = "Le format entré est incorrect!"; ErreurDialog.afficher(null, errorMsg, nfe.getMessage(), nfe.getStackTrace()); JOptionPane.showMessageDialog(null, " Vous devriez recharger la page", "Erreur !", JOptionPane.ERROR_MESSAGE); //nfe.printStackTrace(System.err); } catch(Exception e){ String errorMsg = e.toString(); ErreurDialog.afficher(null, errorMsg, e.getMessage(), e.getStackTrace()); JOptionPane.showMessageDialog(null, " Vous devriez recharger la page", "Erreur !", JOptionPane.ERROR_MESSAGE); //e.printStackTrace(System.err); } } /**
  • Inverse les états de la case située à iCase, jCase
  • (0 désignant la gauche ou le haut) dans la grille,
  • ainsi que les 8 cases situées autour.
  • @param iCase
  • @param jCase
  • /
public void changerEtats(int iCase, int jCase){ for(int j = jCase - 1; j <= jCase + 1; j++){ for(int i = iCase - 1; i <= iCase + 1; i++){ //Cas d'exclusion if(i < 0) continue; if(i > nbrDeCasesDeCote - 1) continue; if(j < 0) continue; if(j > nbrDeCasesDeCote - 1) continue; //Inversion matriceDesEtats[i][j] = (ETAT_ALLUMEE+ETAT_ETEINTE) - matriceDesEtats[i][j]; } } } /**
  • Indique si la partie est gagnée.
  • @return : boolean - true si la partie est gagnée
  • /
public boolean gagnee(){ boolean gagnee = true; for(int j = 0; j < nbrDeCasesDeCote; j++){ for(int i = 0; i < nbrDeCasesDeCote; i++){ if(matriceDesEtats[i][j]==ETAT_ETEINTE){ gagnee = false; break; } } if (gagnee==false) break; } return gagnee; } public void paint(Graphics g){ //La couleur de fond setBackground(COUL_FOND); //La grille for(int j = 0; j < nbrDeCasesDeCote; j++){ for (int i = 0; i < nbrDeCasesDeCote; i++){ //La bordure //--- Le pinceau --- g.setColor(COUL_BORDURE_CASE); //--- La bordure --- g.drawRect(BORD_GRILLE_X + i * DIM_COTE_CASE, BORD_GRILLE_Y + j * DIM_COTE_CASE, DIM_COTE_CASE, DIM_COTE_CASE); //La case //--- Le pinceau --- switch(matriceDesEtats[i][j]){ case ETAT_ALLUMEE : g.setColor(COUL_CASE_ALLUMEE); break; case ETAT_ETEINTE : default : g.setColor(COUL_CASE_ETEINTE); } //--- La case --- g.fillRect(BORD_GRILLE_X + i * DIM_COTE_CASE + 1, BORD_GRILLE_Y + j * DIM_COTE_CASE + 1, DIM_COTE_CASE-2, DIM_COTE_CASE-2); } } } public void update(Graphics g){ paint(g); } public void mouseClicked(MouseEvent e) { /*Calcule les positions(i,j) de la case qui a
  • été cliquée */
int iCase = (int) ((e.getX()-BORD_GRILLE_X)/DIM_COTE_CASE); int jCase = (int) ((e.getY()-BORD_GRILLE_Y)/DIM_COTE_CASE); /* Si clic hors de la grille */ if (iCase < 0) return; if (iCase > nbrDeCasesDeCote - 1) return; if (jCase < 0) return; if (jCase > nbrDeCasesDeCote - 1) return; changerEtats(iCase,jCase); if(gagnee()){ JOptionPane.showMessageDialog(null, "Vous avez gagné !"); initialiserPartie(); } repaint(); } public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } }

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.