plzhelp | Ca fait une semaine que je me suis mis au java (je suis vraiment debutant de chez debutant) et je viens de finir mon premier programme, un jeu de demineur. Le jeu à l'air de bien marcher (si ce n'est que des fois les boutons ne repondent pas bien aux clics) mais, et c'est là mon soucis, il prend 20Mo de memoire quand je regarde sa taille dans les processus sous win XP.
Voilà mon code:
Code :
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.GridLayout;
- import javax.swing.*;
- public class JeuDemineur {
- JPanel fenetredejeu;
- JPanel grilledejeu;
- JPanel panneauhaut;
- JButton cases[][];
- JButton nouvellepartiebutton;
- JLabel compteurmines;
- JLabel message;
- int minesrestantes;
- int casesrevelees;
- int xgrille;
- int ygrille;
- int etatcase[];
- int casesminees[];
- int nbmines;
- /********** CONSTRUCTEUR **********/
- JeuDemineur(int yl, int xl) {
- //Instaciation des variables membres
- xgrille = xl;
- ygrille = yl;
- casesrevelees = 0;
- nbmines = (int)Math.floor(xl*yl/10);
- casesminees = new int [xgrille*ygrille];
- etatcase = new int [xgrille*ygrille];
- minesrestantes = nbmines;
- fenetredejeu = new JPanel();
- grilledejeu = new JPanel();
- panneauhaut = new JPanel();
- compteurmines = new JLabel("Mines restantes: "+String.valueOf(minesrestantes));
- message = new JLabel();
- nouvellepartiebutton = new JButton("Nouvelle partie" );
- cases = new JButton[ygrille][xgrille];
- //Variables locales
- int i,j;
- GestionEvenements gestionevenements = new GestionEvenements (this);
- //Agencement de ma fenetre
- BorderLayout dispositionprincipale = new BorderLayout();
- fenetredejeu.setLayout(dispositionprincipale);
- GridLayout dispositiontop = new GridLayout(1,2);
- panneauhaut.setLayout(dispositiontop);
- panneauhaut.add(compteurmines);
- panneauhaut.add(nouvellepartiebutton);
- fenetredejeu.add("North",panneauhaut);
- GridLayout dispositiongrille = new GridLayout(ygrille,xgrille);
- grilledejeu.setLayout(dispositiongrille);
- for(i=0; i<ygrille; i++) {
- for(j=0; j<xgrille; j++){
- cases[i][j] = new JButton();
- cases[i][j].addMouseListener(gestionevenements);
- grilledejeu.add(cases[i][j]);
- }
- }
- fenetredejeu.add("Center",grilledejeu);
- message.setForeground(Color.black);
- message.setText("Bonne chance!" );
- fenetredejeu.add("South",message);
- //Creation frame
- JFrame.setDefaultLookAndFeelDecorated(true);
- JFrame fenetredemineur = new JFrame("Demineur" );
- fenetredemineur.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- fenetredemineur.setContentPane(fenetredejeu);
- fenetredemineur.setSize(45*xgrille,45*ygrille);
- fenetredemineur.setVisible(true);
- nouvellepartiebutton.addMouseListener(gestionevenements);
- Minage();
- }
- /********** METHODES **********/
- //methodes jeu
- public void Minage(){
- int casesaleatoires[];
- int i,j;
- casesaleatoires = PermutationAleatoire(xgrille*ygrille);
- for(i=0; i<nbmines; i++){
- casesminees[casesaleatoires[i]]=1;
- }
- for(i=0; i<ygrille; i++){
- for(j=0; j<xgrille; j++){
- if(casesminees[i*xgrille+j] !=1){
- etatcase[i*xgrille+j]=10*VerifierAlentours(i,j);
- }
- else{
- etatcase[i*xgrille+j]=1;
- }
- }
- }
- }
- public void RevelerCase(JButton casemarquee) {
- int coordonneescase[] = new int [2];
- int i,j;
- Color couleur = casemarquee.getBackground();
- if(couleur != Color.red){
- casemarquee.setBackground(Color.lightGray);
- coordonneescase = VerifierCase(casemarquee);
- if(casesminees[coordonneescase[0]*xgrille+coordonneescase[1]]== 1){
- RevelerTout();
- message.setForeground(Color.red);
- message.setText("Perdu!" );
- for(i=0; i<ygrille; i++) {
- for(j=0; j<xgrille; j++){
- cases[i][j].setEnabled(false);
- }
- }
- }
- else{
- RevelerChoix(coordonneescase[0],coordonneescase[1]);
- if(casesrevelees==xgrille*ygrille-nbmines && minesrestantes==0){
- message.setForeground(Color.green);
- message.setText("Gagné!" );
- for(i=0; i<ygrille; i++) {
- for(j=0; j<xgrille; j++){
- cases[i][j].setEnabled(false);
- }
- }
- }
- }
- }
- }
- public void MarquerCase(JButton casemarquee) {
- Color couleur = casemarquee.getBackground();
- int i,j;
- if(couleur == Color.red){
- minesrestantes++;
- compteurmines.setText("Mines restantes: "+String.valueOf(minesrestantes));
- casemarquee.setBackground(null);
- }
- else if(couleur != Color.lightGray){
- minesrestantes--;
- compteurmines.setText("Mines restantes: "+String.valueOf(minesrestantes));
- casemarquee.setBackground(Color.red);
- if(casesrevelees==xgrille*ygrille-nbmines && minesrestantes==0){
- message.setForeground(Color.green);
- message.setText("Gagné!" );
- for(i=0; i<ygrille; i++) {
- for(j=0; j<xgrille; j++){
- cases[i][j].setEnabled(false);
- }
- }
- }
- }
- }
- public int[] VerifierCase(JButton casecliquee){
- int i,j;
- int coordonnees[] = new int [2];
- for(i=0; i<ygrille; i++){
- for(j=0; j<xgrille; j++){
- if(casecliquee.equals(cases[i][j])){
- coordonnees[0]=i;
- coordonnees[1]=j;
- }
- }
- }
- return coordonnees;
- }
- public int VerifierAlentours(int y, int x){
- int nbminesalentours = 0;
- if(y>0 && y<ygrille-1 && x>0 && x<xgrille-1){
- nbminesalentours = casesminees[(y-1)*xgrille+(x-1)]+
- casesminees[(y-1)*xgrille+x]+
- casesminees[(y-1)*xgrille+(x+1)]+
- casesminees[y*xgrille+(x-1)]+
- casesminees[y*xgrille+(x+1)]+
- casesminees[(y+1)*xgrille+(x-1)]+
- casesminees[(y+1)*xgrille+x]+
- casesminees[(y+1)*xgrille+(x+1)];
- }
- else if(y==0 && x>0 && x<xgrille-1){
- nbminesalentours = casesminees[y*xgrille+(x-1)]+
- casesminees[y*xgrille+(x+1)]+
- casesminees[(y+1)*xgrille+(x-1)]+
- casesminees[(y+1)*xgrille+x]+
- casesminees[(y+1)*xgrille+(x+1)];
- }
- else if(y==ygrille-1 && x>0 && x<xgrille-1){
- nbminesalentours = casesminees[y*xgrille+(x-1)]+
- casesminees[y*xgrille+(x+1)]+
- casesminees[(y-1)*xgrille+(x-1)]+
- casesminees[(y-1)*xgrille+x]+
- casesminees[(y-1)*xgrille+(x+1)];
- }
- else if(y>0 && y<ygrille-1 && x==0){
- nbminesalentours = casesminees[(x+1)+(y-1)*xgrille]+
- casesminees[(x+1)+y*xgrille]+
- casesminees[(x+1)+(y+1)*xgrille]+
- casesminees[x+(y-1)*xgrille]+
- casesminees[x+(y+1)*xgrille];
- }
- else if(y>0 && y<ygrille-1 && x==xgrille-1){
- nbminesalentours = casesminees[(x-1)+(y-1)*xgrille]+
- casesminees[(x-1)+y*xgrille]+
- casesminees[(x-1)+(y+1)*xgrille]+
- casesminees[x+(y-1)*xgrille]+
- casesminees[x+(y+1)*xgrille];
- }
- else if(y==0 && x==0){
- nbminesalentours = casesminees[y*xgrille+(x+1)]+
- casesminees[(y+1)*xgrille+x]+
- casesminees[(y+1)*xgrille+(x+1)];
- }
- else if(y==0 && x==xgrille-1){
- nbminesalentours = casesminees[y*xgrille+(x-1)]+
- casesminees[(y+1)*xgrille+(x-1)]+
- casesminees[(y+1)*xgrille+x];
- }
- else if(y==ygrille-1 && x==0){
- nbminesalentours = casesminees[y*xgrille+(x+1)]+
- casesminees[(y-1)*xgrille+x]+
- casesminees[(y-1)*xgrille+(x+1)];
- }
- else if(y==ygrille-1 && x==xgrille-1){
- nbminesalentours = casesminees[y*xgrille+(x-1)]+
- casesminees[(y-1)*xgrille+(x-1)]+
- casesminees[(y-1)*xgrille+x];
- }
- return nbminesalentours;
- }
- public void RevelerAlentours(int y, int x){
- if(y>0 && y<ygrille-1 && x>0 && x<xgrille-1){
- if(cases[y-1][x-1].getText()==" "
- || cases[y-1][x].getText()==" "
- || cases[y-1][x+1].getText()==" "
- || cases[y][x-1].getText()==" "
- || cases[y][x+1].getText()==" "
- || cases[y+1][x-1].getText()==" "
- || cases[y+1][x].getText()==" "
- || cases[y+1][x+1].getText()==" " ){
- RevelerChoix(y,x);
- }
- }
- else if(y==0 && x>0 && x<xgrille-1){
- if(cases[y][x-1].getText()==" "
- || cases[y][x+1].getText()==" "
- || cases[y+1][x-1].getText()==" "
- || cases[y+1][x].getText()==" "
- || cases[y+1][x+1].getText()==" " ){
- RevelerChoix(y,x);
- }
- }
- else if(y==ygrille-1 && x>0 && x<xgrille-1){
- if(cases[y-1][x-1].getText()==" "
- || cases[y-1][x].getText()==" "
- || cases[y-1][x+1].getText()==" "
- || cases[y][x-1].getText()==" "
- || cases[y][x+1].getText()==" " ){
- RevelerChoix(y,x);
- }
- }
- else if(y>0 && y<ygrille-1 && x==0){
- if(cases[y-1][x].getText()==" "
- || cases[y-1][x+1].getText()==" "
- || cases[y][x+1].getText()==" "
- || cases[y+1][x].getText()==" "
- || cases[y+1][x+1].getText()==" " ){
- RevelerChoix(y,x);
- }
- }
- else if(y>0 && y<ygrille-1 && x==xgrille-1){
- if(cases[y-1][x-1].getText()==" "
- || cases[y-1][x].getText()==" "
- || cases[y][x-1].getText()==" "
- || cases[y+1][x-1].getText()==" "
- || cases[y+1][x].getText()==" " ){
- RevelerChoix(y,x);
- }
- }
- else if(y==0 && x==0){
- if(cases[y][x+1].getText()==" "
- || cases[y+1][x].getText()==" "
- || cases[y+1][x+1].getText()==" " ){
- RevelerChoix(y,x);
- }
- }
- else if(y==0 && x==xgrille-1){
- if(cases[y][x-1].getText()==" "
- || cases[y+1][x-1].getText()==" "
- || cases[y+1][x].getText()==" " ){
- RevelerChoix(y,x);
- }
- }
- else if(y==ygrille-1 && x==0){
- if(cases[y-1][x].getText()==" "
- || cases[y-1][x+1].getText()==" "
- || cases[y][x+1].getText()==" " ){
- RevelerChoix(y,x);
- }
- }
- else if(y==ygrille-1 && x==xgrille-1){
- if(cases[y-1][x-1].getText()==" "
- || cases[y-1][x].getText()==" "
- || cases[y][x-1].getText()==" " ){
- RevelerChoix(y,x);
- }
- }
- }
- public void RevelerTout(){
- int i,j;
- for(i=0; i<ygrille; i++){
- for(j=0; j<xgrille; j++){
- cases[i][j].setBackground(Color.lightGray);
- if(etatcase[i*xgrille+j]==0){
- cases[i][j].setForeground(Color.lightGray);
- cases[i][j].setText("." );
- }
- else if(etatcase[i*xgrille+j]==1){
- cases[i][j].setForeground(Color.black);
- cases[i][j].setText("#" );
- }
- else if(etatcase[i*xgrille+j]==10){
- cases[i][j].setForeground(Color.blue);
- cases[i][j].setText("1" );
- }
- else if(etatcase[i*xgrille+j]==20){
- cases[i][j].setForeground(Color.green);
- cases[i][j].setText("2" );
- }
- else if(etatcase[i*xgrille+j]==30){
- cases[i][j].setForeground(Color.red);
- cases[i][j].setText("3" );
- }
- else if(etatcase[i*xgrille+j]==40){
- cases[i][j].setForeground(Color.orange);
- cases[i][j].setText("4" );
- }
- else if(etatcase[i*xgrille+j]==50){
- cases[i][j].setForeground(Color.pink);
- cases[i][j].setText("5" );
- }
- else if(etatcase[i*xgrille+j]==60){
- cases[i][j].setForeground(Color.cyan);
- cases[i][j].setText("6" );
- }
- else if(etatcase[i*xgrille+j]==70){
- cases[i][j].setForeground(Color.yellow);
- cases[i][j].setText("7" );
- }
- else if(etatcase[i*xgrille+j]==80){
- cases[i][j].setForeground(Color.white);
- cases[i][j].setText("8" );
- }
- }
- }
- }
- public void RevelerChoix(int i, int j){
- int choix = etatcase[i*xgrille+j];
- switch (choix){
- case 0:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.lightGray);
- cases[i][j].setText(" " );
- RevelerCaseVideAdjacente(i,j);
- break;
- case 1:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.black);
- cases[i][j].setText("#" );
- break;
- case 10:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.blue);
- cases[i][j].setText("1" );
- break;
- case 20:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.green);
- cases[i][j].setText("2" );
- break;
- case 30:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.red);
- cases[i][j].setText("3" );
- break;
- case 40:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.orange);
- cases[i][j].setText("4" );
- break;
- case 50:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.pink);
- cases[i][j].setText("5" );
- break;
- case 60:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.cyan);
- cases[i][j].setText("6" );
- break;
- case 70:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.yellow);
- cases[i][j].setText("7" );
- break;
- case 80:
- casesrevelees++;
- cases[i][j].setBackground(Color.lightGray);
- cases[i][j].setForeground(Color.white);
- cases[i][j].setText("8" );
- break;
- }
- }
- public void RevelerCaseVideAdjacente(int x, int y){
- int i,j;
- for(i=0; i<ygrille; i++){
- for(j=0; j<xgrille; j++){
- if(cases[i][j].getBackground()!=Color.lightGray){
- RevelerAlentours(i,j);
- }
- }
- }
- for(i=ygrille-1; i>-1; i--){
- for(j=xgrille-1; j>-1; j--){
- if(cases[i][j].getBackground()!=Color.lightGray){
- RevelerAlentours(i,j);
- }
- }
- }
- }
- //methodes mathematiques
- public int[] TriParBulle(double[] tabaordonner, int[] tabref){
- int L = tabaordonner.length;
- double buffer1;
- int buffer2;
- int i;
- int fini=0;
- while(fini != 1){
- fini=1;
- for(i=0; i<L-1; i++){
- if(tabaordonner[i]>tabaordonner[i+1]){
- buffer1 = tabaordonner[i+1];
- tabaordonner[i+1]=tabaordonner[i];
- tabaordonner[i]=buffer1;
- buffer2 = tabref[i+1];
- tabref[i+1]=tabref[i];
- tabref[i]=buffer2;
- fini=0;
- }
- }
- }
- return tabref;
- }
- public int[] PermutationAleatoire(int k){
- int i;
- double aclasser[] = new double [k];
- int apermuter[] = new int [k];
- for(i=0; i<k; i++){
- aclasser[i] = Math.random();
- apermuter[i] = i;
- }
- apermuter= TriParBulle(aclasser,apermuter);
- return apermuter;
- }
- }
|
Code :
- public class Demarrer {
- /**
- * @param args
- */
- public static void main(String[] args) {
- new JeuDemineur(10,20);
- }
- }
|
Donc si jamais un "expert" a du temps à perdre pour jeter un oeil sur mon code et me donner quelques conseils pour optimiser le tout ou bien plus generalement sur la structure d'un programme java je lui en serait reconnaissant ---------------
...
|