Taille de processus - optimisation.

Taille de processus - optimisation. - Java - Programmation

Marsh Posté le 23-07-2007 à 11:52:46    

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 :
  1. import java.awt.Color;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.awt.event.KeyEvent;
  5. import java.awt.event.KeyListener;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.event.MouseListener;
  8. import javax.swing.JButton;
  9. public class GestionEvenements implements MouseListener, ActionListener,
  10.  KeyListener {
  11. //Reference a la classe JeuDemineur
  12. JeuDemineur refJeuDemineur;
  13. /********** CONSTRUCTEUR **********/
  14. GestionEvenements (JeuDemineur refJeuDemineur) {
  15.  this.refJeuDemineur = refJeuDemineur;
  16. }
  17. /********** METHODES **********/
  18. @Override
  19. public void mouseClicked(MouseEvent e) {
  20.  int boutonclique = e.getButton();
  21.  int i,j;
  22.  JButton casecliquee = (JButton) e.getSource();
  23.  if(boutonclique == 1) {
  24.   if(casecliquee==refJeuDemineur.nouvellepartiebutton){
  25.    for(i=0; i<refJeuDemineur.casesminees.length; i++){
  26.     refJeuDemineur.casesminees[i]=0;
  27.    }
  28.    for(i=0; i<refJeuDemineur.ygrille; i++) {
  29.     for(j=0; j<refJeuDemineur.xgrille; j++){
  30.      refJeuDemineur.cases[i][j].setText(null);
  31.      refJeuDemineur.cases[i][j].setBackground(null);
  32.      refJeuDemineur.cases[i][j].setEnabled(true);
  33.     }
  34.    }
  35.    refJeuDemineur.message.setForeground(Color.black);
  36.    refJeuDemineur.message.setText("Bonne chance!" );
  37.    refJeuDemineur.casesrevelees=0;
  38.    refJeuDemineur.minesrestantes=refJeuDemineur.nbmines;
  39.    refJeuDemineur.compteurmines.setText("Mines restantes: "+String.valueOf(refJeuDemineur.minesrestantes));
  40.    refJeuDemineur.Minage();
  41.   }
  42.   else{
  43.    refJeuDemineur.RevelerCase(casecliquee);
  44.   }
  45.  }
  46.  if(boutonclique == 3){
  47.   refJeuDemineur.MarquerCase(casecliquee);
  48.  }
  49. }
  50. @Override
  51. public void mouseEntered(MouseEvent e) {
  52.  // TODO Auto-generated method stub
  53. }
  54. @Override
  55. public void mouseExited(MouseEvent e) {
  56.  // TODO Auto-generated method stub
  57. }
  58. @Override
  59. public void mousePressed(MouseEvent e) {
  60.  // TODO Auto-generated method stub
  61. }
  62. @Override
  63. public void mouseReleased(MouseEvent e) {
  64.  // TODO Auto-generated method stub
  65. }
  66. @Override
  67. public void actionPerformed(ActionEvent e) {
  68.  // TODO Auto-generated method stub
  69. }
  70. @Override
  71. public void keyPressed(KeyEvent e) {
  72.  /*Object sourceevenement = e.getSource();
  73.  System.out.println(sourceevenement);
  74.  System.out.println(refFenetreDemineur.cases[0]);*/
  75. }
  76. @Override
  77. public void keyReleased(KeyEvent e) {
  78.  // TODO Auto-generated method stub
  79. }
  80. @Override
  81. public void keyTyped(KeyEvent e) {
  82.  // TODO Auto-generated method stub
  83. }
  84. }


 

Code :
  1. import java.awt.BorderLayout;
  2. import java.awt.Color;
  3. import java.awt.GridLayout;
  4. import javax.swing.*;
  5. public class JeuDemineur {
  6. JPanel fenetredejeu;
  7. JPanel grilledejeu;
  8. JPanel panneauhaut;
  9. JButton cases[][];
  10. JButton nouvellepartiebutton;
  11. JLabel compteurmines;
  12. JLabel message;
  13. int minesrestantes;
  14. int casesrevelees;
  15. int xgrille;
  16. int ygrille;
  17. int etatcase[];
  18. int casesminees[];
  19. int nbmines;
  20. /********** CONSTRUCTEUR **********/
  21. JeuDemineur(int yl, int xl) {
  22.  //Instaciation des variables membres
  23.  xgrille = xl;
  24.  ygrille = yl;
  25.  casesrevelees = 0;
  26.  nbmines = (int)Math.floor(xl*yl/10);
  27.  casesminees = new int [xgrille*ygrille];
  28.  etatcase = new int [xgrille*ygrille];
  29.  minesrestantes = nbmines;
  30.  fenetredejeu = new JPanel();
  31.  grilledejeu = new JPanel();
  32.  panneauhaut = new JPanel();
  33.  compteurmines = new JLabel("Mines restantes: "+String.valueOf(minesrestantes));
  34.  message = new JLabel();
  35.  nouvellepartiebutton = new JButton("Nouvelle partie" );
  36.  cases = new JButton[ygrille][xgrille];
  37.  //Variables locales
  38.  int i,j;
  39.  GestionEvenements gestionevenements = new GestionEvenements (this);
  40.  //Agencement de ma fenetre
  41.  BorderLayout dispositionprincipale = new BorderLayout();
  42.  fenetredejeu.setLayout(dispositionprincipale);
  43.  GridLayout dispositiontop = new GridLayout(1,2);
  44.  panneauhaut.setLayout(dispositiontop);
  45.  panneauhaut.add(compteurmines);
  46.  panneauhaut.add(nouvellepartiebutton);
  47.  fenetredejeu.add("North",panneauhaut);
  48.  GridLayout dispositiongrille = new GridLayout(ygrille,xgrille);
  49.  grilledejeu.setLayout(dispositiongrille);
  50.  for(i=0; i<ygrille; i++) {
  51.   for(j=0; j<xgrille; j++){
  52.    cases[i][j] = new JButton();
  53.    cases[i][j].addMouseListener(gestionevenements);
  54.    grilledejeu.add(cases[i][j]);
  55.   }
  56.  }
  57.  fenetredejeu.add("Center",grilledejeu);
  58.  message.setForeground(Color.black);
  59.  message.setText("Bonne chance!" );
  60.  fenetredejeu.add("South",message);
  61.  //Creation frame
  62.  JFrame.setDefaultLookAndFeelDecorated(true);
  63.  JFrame fenetredemineur = new JFrame("Demineur" );
  64.  fenetredemineur.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  65.  fenetredemineur.setContentPane(fenetredejeu);
  66.  fenetredemineur.setSize(45*xgrille,45*ygrille);
  67.  fenetredemineur.setVisible(true);
  68.  nouvellepartiebutton.addMouseListener(gestionevenements);
  69.  Minage();
  70. }
  71. /********** METHODES **********/
  72. //methodes jeu
  73. public void Minage(){
  74.  int casesaleatoires[];
  75.  int i,j;
  76.  casesaleatoires = PermutationAleatoire(xgrille*ygrille);
  77.  for(i=0; i<nbmines; i++){
  78.   casesminees[casesaleatoires[i]]=1;
  79.  }
  80.  for(i=0; i<ygrille; i++){
  81.   for(j=0; j<xgrille; j++){
  82.    if(casesminees[i*xgrille+j] !=1){
  83.     etatcase[i*xgrille+j]=10*VerifierAlentours(i,j);
  84.    }
  85.    else{
  86.     etatcase[i*xgrille+j]=1;
  87.    }
  88.   }
  89.  }
  90. }
  91. public void RevelerCase(JButton casemarquee) {
  92.  int coordonneescase[] = new int [2];
  93.  int i,j;
  94.  Color couleur = casemarquee.getBackground();
  95.  if(couleur != Color.red){
  96.   casemarquee.setBackground(Color.lightGray);
  97.   coordonneescase = VerifierCase(casemarquee);
  98.   if(casesminees[coordonneescase[0]*xgrille+coordonneescase[1]]== 1){
  99.    RevelerTout();
  100.    message.setForeground(Color.red);
  101.    message.setText("Perdu!" );
  102.    for(i=0; i<ygrille; i++) {
  103.     for(j=0; j<xgrille; j++){
  104.      cases[i][j].setEnabled(false);
  105.     }
  106.    }
  107.   }
  108.   else{
  109.    RevelerChoix(coordonneescase[0],coordonneescase[1]);
  110.    if(casesrevelees==xgrille*ygrille-nbmines && minesrestantes==0){
  111.     message.setForeground(Color.green);
  112.     message.setText("Gagné!" );
  113.     for(i=0; i<ygrille; i++) {
  114.      for(j=0; j<xgrille; j++){
  115.       cases[i][j].setEnabled(false);
  116.      }
  117.     }
  118.    }
  119.   }
  120.  }
  121. }
  122. public void MarquerCase(JButton casemarquee) {
  123.  Color couleur = casemarquee.getBackground();
  124.  int i,j;
  125.  if(couleur == Color.red){
  126.   minesrestantes++;
  127.   compteurmines.setText("Mines restantes: "+String.valueOf(minesrestantes));
  128.   casemarquee.setBackground(null);
  129.  }
  130.  else if(couleur != Color.lightGray){
  131.   minesrestantes--;
  132.   compteurmines.setText("Mines restantes: "+String.valueOf(minesrestantes));
  133.   casemarquee.setBackground(Color.red);
  134.   if(casesrevelees==xgrille*ygrille-nbmines && minesrestantes==0){
  135.    message.setForeground(Color.green);
  136.    message.setText("Gagné!" );
  137.    for(i=0; i<ygrille; i++) {
  138.     for(j=0; j<xgrille; j++){
  139.      cases[i][j].setEnabled(false);
  140.     }
  141.    }
  142.   }
  143.  }
  144. }
  145. public int[] VerifierCase(JButton casecliquee){
  146.  int i,j;
  147.  int coordonnees[] = new int [2];
  148.  for(i=0; i<ygrille; i++){
  149.   for(j=0; j<xgrille; j++){
  150.    if(casecliquee.equals(cases[i][j])){
  151.     coordonnees[0]=i;
  152.     coordonnees[1]=j;
  153.    }
  154.   }
  155.  }
  156.  return coordonnees;
  157. }
  158. public int VerifierAlentours(int y, int x){
  159.  int nbminesalentours = 0;
  160.  if(y>0 && y<ygrille-1 && x>0 && x<xgrille-1){
  161.   nbminesalentours = casesminees[(y-1)*xgrille+(x-1)]+
  162.        casesminees[(y-1)*xgrille+x]+
  163.        casesminees[(y-1)*xgrille+(x+1)]+
  164.        casesminees[y*xgrille+(x-1)]+
  165.        casesminees[y*xgrille+(x+1)]+
  166.        casesminees[(y+1)*xgrille+(x-1)]+
  167.        casesminees[(y+1)*xgrille+x]+
  168.        casesminees[(y+1)*xgrille+(x+1)];
  169.  }
  170.  else if(y==0 && x>0 && x<xgrille-1){
  171.   nbminesalentours = casesminees[y*xgrille+(x-1)]+
  172.        casesminees[y*xgrille+(x+1)]+
  173.        casesminees[(y+1)*xgrille+(x-1)]+
  174.        casesminees[(y+1)*xgrille+x]+
  175.        casesminees[(y+1)*xgrille+(x+1)];
  176.  }
  177.  else if(y==ygrille-1 && x>0 && x<xgrille-1){
  178.   nbminesalentours = casesminees[y*xgrille+(x-1)]+
  179.        casesminees[y*xgrille+(x+1)]+
  180.        casesminees[(y-1)*xgrille+(x-1)]+
  181.        casesminees[(y-1)*xgrille+x]+
  182.        casesminees[(y-1)*xgrille+(x+1)];
  183.  }
  184.  else if(y>0 && y<ygrille-1 && x==0){
  185.   nbminesalentours = casesminees[(x+1)+(y-1)*xgrille]+
  186.        casesminees[(x+1)+y*xgrille]+
  187.        casesminees[(x+1)+(y+1)*xgrille]+
  188.        casesminees[x+(y-1)*xgrille]+
  189.        casesminees[x+(y+1)*xgrille];
  190.  }
  191.  else if(y>0 && y<ygrille-1 && x==xgrille-1){
  192.   nbminesalentours = casesminees[(x-1)+(y-1)*xgrille]+
  193.        casesminees[(x-1)+y*xgrille]+
  194.        casesminees[(x-1)+(y+1)*xgrille]+
  195.        casesminees[x+(y-1)*xgrille]+
  196.        casesminees[x+(y+1)*xgrille];
  197.  }
  198.  else if(y==0 && x==0){
  199.   nbminesalentours = casesminees[y*xgrille+(x+1)]+
  200.        casesminees[(y+1)*xgrille+x]+
  201.        casesminees[(y+1)*xgrille+(x+1)];
  202.  }
  203.  else if(y==0 && x==xgrille-1){
  204.   nbminesalentours = casesminees[y*xgrille+(x-1)]+
  205.        casesminees[(y+1)*xgrille+(x-1)]+
  206.        casesminees[(y+1)*xgrille+x];
  207.  }
  208.  else if(y==ygrille-1 && x==0){
  209.   nbminesalentours = casesminees[y*xgrille+(x+1)]+
  210.        casesminees[(y-1)*xgrille+x]+
  211.        casesminees[(y-1)*xgrille+(x+1)];
  212.  }
  213.  else if(y==ygrille-1 && x==xgrille-1){
  214.   nbminesalentours = casesminees[y*xgrille+(x-1)]+
  215.        casesminees[(y-1)*xgrille+(x-1)]+
  216.        casesminees[(y-1)*xgrille+x];
  217.  }
  218.  return nbminesalentours;
  219. }
  220. public void RevelerAlentours(int y, int x){
  221.  if(y>0 && y<ygrille-1 && x>0 && x<xgrille-1){
  222.   if(cases[y-1][x-1].getText()==" "
  223.   || cases[y-1][x].getText()==" "
  224.   || cases[y-1][x+1].getText()==" "
  225.   || cases[y][x-1].getText()==" "
  226.   || cases[y][x+1].getText()==" "
  227.   || cases[y+1][x-1].getText()==" "
  228.   || cases[y+1][x].getText()==" "
  229.   || cases[y+1][x+1].getText()==" " ){
  230.    RevelerChoix(y,x);
  231.   }
  232.  }
  233.  else if(y==0 && x>0 && x<xgrille-1){
  234.   if(cases[y][x-1].getText()==" "
  235.   || cases[y][x+1].getText()==" "
  236.   || cases[y+1][x-1].getText()==" "
  237.   || cases[y+1][x].getText()==" "
  238.   || cases[y+1][x+1].getText()==" " ){
  239.    RevelerChoix(y,x);
  240.   }
  241.  }
  242.  else if(y==ygrille-1 && x>0 && x<xgrille-1){
  243.   if(cases[y-1][x-1].getText()==" "
  244.   || cases[y-1][x].getText()==" "
  245.   || cases[y-1][x+1].getText()==" "
  246.   || cases[y][x-1].getText()==" "
  247.   || cases[y][x+1].getText()==" " ){
  248.    RevelerChoix(y,x);
  249.   }
  250.  }
  251.  else if(y>0 && y<ygrille-1 && x==0){
  252.   if(cases[y-1][x].getText()==" "
  253.   || cases[y-1][x+1].getText()==" "
  254.   || cases[y][x+1].getText()==" "
  255.   || cases[y+1][x].getText()==" "
  256.   || cases[y+1][x+1].getText()==" " ){
  257.    RevelerChoix(y,x);
  258.   }
  259.  }
  260.  else if(y>0 && y<ygrille-1 && x==xgrille-1){
  261.   if(cases[y-1][x-1].getText()==" "
  262.   || cases[y-1][x].getText()==" "
  263.   || cases[y][x-1].getText()==" "
  264.   || cases[y+1][x-1].getText()==" "
  265.   || cases[y+1][x].getText()==" " ){
  266.    RevelerChoix(y,x);
  267.   }
  268.  }
  269.  else if(y==0 && x==0){
  270.   if(cases[y][x+1].getText()==" "
  271.   || cases[y+1][x].getText()==" "
  272.   || cases[y+1][x+1].getText()==" " ){
  273.    RevelerChoix(y,x);
  274.   }
  275.  }
  276.  else if(y==0 && x==xgrille-1){
  277.   if(cases[y][x-1].getText()==" "
  278.   || cases[y+1][x-1].getText()==" "
  279.   || cases[y+1][x].getText()==" " ){
  280.    RevelerChoix(y,x);
  281.   }
  282.  }
  283.  else if(y==ygrille-1 && x==0){
  284.   if(cases[y-1][x].getText()==" "
  285.   || cases[y-1][x+1].getText()==" "
  286.   || cases[y][x+1].getText()==" " ){
  287.    RevelerChoix(y,x);
  288.   }
  289.  }
  290.  else if(y==ygrille-1 && x==xgrille-1){
  291.   if(cases[y-1][x-1].getText()==" "
  292.   || cases[y-1][x].getText()==" "
  293.   || cases[y][x-1].getText()==" " ){
  294.    RevelerChoix(y,x);
  295.   }
  296.  }
  297. }
  298. public void RevelerTout(){
  299.  int i,j;
  300.  for(i=0; i<ygrille; i++){
  301.   for(j=0; j<xgrille; j++){
  302.    cases[i][j].setBackground(Color.lightGray);
  303.    if(etatcase[i*xgrille+j]==0){
  304.     cases[i][j].setForeground(Color.lightGray);
  305.     cases[i][j].setText("." );
  306.    }
  307.    else if(etatcase[i*xgrille+j]==1){
  308.     cases[i][j].setForeground(Color.black);
  309.     cases[i][j].setText("#" );
  310.    }
  311.    else if(etatcase[i*xgrille+j]==10){
  312.     cases[i][j].setForeground(Color.blue);
  313.     cases[i][j].setText("1" );
  314.    }
  315.    else if(etatcase[i*xgrille+j]==20){
  316.     cases[i][j].setForeground(Color.green);
  317.     cases[i][j].setText("2" );
  318.    }
  319.    else if(etatcase[i*xgrille+j]==30){
  320.     cases[i][j].setForeground(Color.red);
  321.     cases[i][j].setText("3" );
  322.    }
  323.    else if(etatcase[i*xgrille+j]==40){
  324.     cases[i][j].setForeground(Color.orange);
  325.     cases[i][j].setText("4" );
  326.    }
  327.    else if(etatcase[i*xgrille+j]==50){
  328.     cases[i][j].setForeground(Color.pink);
  329.     cases[i][j].setText("5" );
  330.    }
  331.    else if(etatcase[i*xgrille+j]==60){
  332.     cases[i][j].setForeground(Color.cyan);
  333.     cases[i][j].setText("6" );
  334.    }
  335.    else if(etatcase[i*xgrille+j]==70){
  336.     cases[i][j].setForeground(Color.yellow);
  337.     cases[i][j].setText("7" );
  338.    }
  339.    else if(etatcase[i*xgrille+j]==80){
  340.     cases[i][j].setForeground(Color.white);
  341.     cases[i][j].setText("8" );
  342.    }
  343.   }
  344.  }
  345. }
  346. public void RevelerChoix(int i, int j){
  347.  int choix = etatcase[i*xgrille+j];
  348.  switch (choix){
  349.   case 0:
  350.    casesrevelees++;
  351.    cases[i][j].setBackground(Color.lightGray);
  352.    cases[i][j].setForeground(Color.lightGray);
  353.    cases[i][j].setText(" " );
  354.    RevelerCaseVideAdjacente(i,j);
  355.    break;
  356.   case 1:
  357.    casesrevelees++;
  358.    cases[i][j].setBackground(Color.lightGray);
  359.    cases[i][j].setForeground(Color.black);
  360.    cases[i][j].setText("#" );
  361.    break;
  362.   case 10:
  363.    casesrevelees++;
  364.    cases[i][j].setBackground(Color.lightGray);
  365.    cases[i][j].setForeground(Color.blue);
  366.    cases[i][j].setText("1" );
  367.    break;
  368.   case 20:
  369.    casesrevelees++;
  370.    cases[i][j].setBackground(Color.lightGray);
  371.    cases[i][j].setForeground(Color.green);
  372.    cases[i][j].setText("2" );
  373.    break;
  374.   case 30:
  375.    casesrevelees++;
  376.    cases[i][j].setBackground(Color.lightGray);
  377.    cases[i][j].setForeground(Color.red);
  378.    cases[i][j].setText("3" );
  379.    break;
  380.   case 40:
  381.    casesrevelees++;
  382.    cases[i][j].setBackground(Color.lightGray);
  383.    cases[i][j].setForeground(Color.orange);
  384.    cases[i][j].setText("4" );
  385.    break;
  386.   case 50:
  387.    casesrevelees++;
  388.    cases[i][j].setBackground(Color.lightGray);
  389.    cases[i][j].setForeground(Color.pink);
  390.    cases[i][j].setText("5" );
  391.    break;
  392.   case 60:
  393.    casesrevelees++;
  394.    cases[i][j].setBackground(Color.lightGray);
  395.    cases[i][j].setForeground(Color.cyan);
  396.    cases[i][j].setText("6" );
  397.    break;
  398.   case 70:
  399.    casesrevelees++;
  400.    cases[i][j].setBackground(Color.lightGray);
  401.    cases[i][j].setForeground(Color.yellow);
  402.    cases[i][j].setText("7" );
  403.    break;
  404.   case 80:
  405.    casesrevelees++;
  406.    cases[i][j].setBackground(Color.lightGray);
  407.    cases[i][j].setForeground(Color.white);
  408.    cases[i][j].setText("8" );
  409.    break;
  410.  }
  411. }
  412. public void RevelerCaseVideAdjacente(int x, int y){
  413.  int i,j;
  414.  for(i=0; i<ygrille; i++){
  415.   for(j=0; j<xgrille; j++){
  416.    if(cases[i][j].getBackground()!=Color.lightGray){
  417.     RevelerAlentours(i,j);
  418.    }
  419.   }
  420.  }
  421.  for(i=ygrille-1; i>-1; i--){
  422.   for(j=xgrille-1; j>-1; j--){
  423.    if(cases[i][j].getBackground()!=Color.lightGray){
  424.     RevelerAlentours(i,j);
  425.    }
  426.   }
  427.  }
  428. }
  429. //methodes mathematiques
  430. public int[] TriParBulle(double[] tabaordonner, int[] tabref){
  431.  int L = tabaordonner.length;
  432.  double buffer1;
  433.  int buffer2;
  434.  int i;
  435.  int fini=0;
  436.  while(fini != 1){
  437.   fini=1;
  438.   for(i=0; i<L-1; i++){
  439.    if(tabaordonner[i]>tabaordonner[i+1]){
  440.     buffer1 = tabaordonner[i+1];
  441.     tabaordonner[i+1]=tabaordonner[i];
  442.     tabaordonner[i]=buffer1;
  443.     buffer2 = tabref[i+1];
  444.     tabref[i+1]=tabref[i];
  445.     tabref[i]=buffer2;
  446.     fini=0;
  447.    }
  448.   }
  449.  }
  450.  return tabref;
  451. }
  452. public int[] PermutationAleatoire(int k){
  453.  int i;
  454.  double aclasser[] = new double [k];
  455.  int apermuter[] = new int [k];
  456.  for(i=0; i<k; i++){
  457.   aclasser[i] = Math.random();
  458.   apermuter[i] = i;
  459.  }
  460.  apermuter= TriParBulle(aclasser,apermuter);
  461.  return apermuter;
  462. }
  463. }


 

Code :
  1. public class Demarrer {
  2. /**
  3.  * @param args
  4.  */
  5. public static void main(String[] args) {
  6.  new JeuDemineur(10,20);
  7. }
  8. }


 
 
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 :)


---------------
...
Reply

Marsh Posté le 23-07-2007 à 11:52:46   

Reply

Marsh Posté le 23-07-2007 à 12:21:48    

bah c'est du java.

Reply

Marsh Posté le 23-07-2007 à 12:40:15    

Donc c'est normal que ca prenne 20Mo là ou le demineur de Microsoft n'en prend que 2?


---------------
...
Reply

Marsh Posté le 23-07-2007 à 12:47:54    

oui.

Reply

Marsh Posté le 23-07-2007 à 12:57:09    

Ok, merci :)


---------------
...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed