[résolu] Problème TD10 (java)

Voir le sujet précédent Voir le sujet suivant Aller en bas

[résolu] Problème TD10 (java)

Message  LSV le Ven 30 Nov 2007, 19:46

Bonsoir tout le monde Smile

Voila, je viens poster ici car j'ai un petit soucis avec mon TD10 de java. En fait, je n'ai plus aucune erreur lors de la compilation, mais je n'arrive pas du tout a correctement faire tourner le jeu...

Problèmes trouvés:
- premièrement, lors du choix de la "case" du blork a éliminer, si je veux choisir la ligne 2, colonne 2 (et donc la ligne[1][1] du tableau...) je dois écrire 1-1... J'ai essayé en enlevant 1 à la ligne/colonne entrée, mais ca ne semble pas résoudre le problème?? (peut être vient-il d'ailleurs, tout comme la vérité... ouhla, je fais encore mon geek)

- ensuite, si j'essaye, au premier "tour" de tuer le blork [1][1], il plante sans même tuer ce blork. En revanche, si j'essaye de tuer le blork [2][2] (qui n'existe pas, soit), et qu'ensuite j'essaye de tuer le blork [1][1], dans ce cas là, il tue le blork (avant de planter =D)

Enfin voila, je n'arrive vraiment pas a trouver le bout de code qui provoque cela... J'ai passé une grosse demie heure avec monsieur BEJ a scruter le code, a faire des petites modifications, rien n'y a fait...

Donc si quelqu'un pouvait me dire si il trouve une erreur... Ca serait gentil ^^

Merci a vous Smile

ps: attention, mon code est loin d'être le plus propre qui soit, mais comme je vous l'ai dit, on a du faire retouches sur retouches pour esperer arriver a quelquechose... sans succès.


Classe Blork
Code:
package g30917.td10;
public class Blork{
   
    //attributs d'un Blork
    private int line;
    private int column;
    private int strength;
    private static int id=0;

    //constructeur d'un Blork
    public Blork(int ligne, int colonne){
        this.line = ligne;
        this.column = colonne;
        this.strength = id/10 + id%10;
        id +=1;
    }

    //methodes
    public boolean die(int gunStrength,Board board){
       boolean estMort = false;
        if (gunStrength>this.strength){
           board.removeBlork(this.line, this.column);
           estMort = true;
        }
        else {
            board.addBlork(this.line-1, this.column-1);
            board.addBlork(this.line-1, this.column);
            board.addBlork(this.line-1, this.column+1);
            board.addBlork(this.line, this.column-1);
            board.addBlork(this.line, this.column+1);
            board.addBlork(this.line+1, this.column-1);
            board.addBlork(this.line+1, this.column);
            board.addBlork(this.line+1, this.column+1);
            addStrength();
            estMort = false;
        }
       return estMort;
    }

    public void addStrength(){
        this.strength += id/10;
    }

    public String toString(){
       return "\033[31;21mB\033[0m";
   
    }

    public int getStrength(){
       return this.strength;
    }
}







Classe Board
Code:
package g30917.td10;
public class Board{
   
   //attributs d'un tableau Board
   private Blork[][] tableau;

   //constructeur d'un tableau Board
   public Board (){
      this.tableau = new Blork[5][7];
      tableau[1][1] = new Blork(1,1);
      tableau[1][5] = new Blork(1,5);
      tableau[2][4] = new Blork(2,4);
      tableau[4][2] = new Blork(4,2);
      tableau[4][3] = new Blork(4,3);
      tableau[4][6] = new Blork(4,6);
      tableau[0][4] = new Blork(0,4);
   }

   public void display(Blork[][] tableau){
      for (int i=0;i<5;i++){
         for (int j=0;j<7;j++){
            if (tableau[i][j]==null){
               System.out.print("O");
            }
            else {
               System.out.print(tableau[i][j]);
            }
         }
            System.out.println();
       
      }
   }
   
   public Blork[][] getBoard(){
      return this.tableau;
   }

   public boolean kill(int line, int column, int gunStrength){

        return this.tableau[line][column].die(gunStrength,this);
    }

   public void addBlork(int line, int column){
      if (line<5 && line>=0 && column<7 && column>=0){
         if (this.tableau[line][column]==null){
            this.tableau[line][column]=new Blork(line, column);
         }
     }
   }
   public void removeBlork(int line, int column){
      this.tableau[line][column]=null;
   }

   public boolean isEmpty(){
         for (int k=0;k<5;k++){
           for (int l=0;l<7;l++){
              if (this.tableau[k][l]!= null){
                 return true;
              }
           }
        }
        return false;
   }

   public boolean isFull(){
      for (int m=0;m<5;m++){
         for (int n=0;n<7;n++){
            if (this.tableau[m][n]==null){
               return true;
            }
         }
      }
      return false;
   }


          
}

Main
Code:
package g30917.td10;
import java.util.Scanner ;

public class Main{
   public static void main(String[] args){
      Board tabBlork = new Board();
      int gunStrength = 2;
      Scanner clavier = new Scanner(System.in);
      int ligne;
      int colonne;
      boolean upgrade;
      String chaineLue;
      boolean reecrire;
      reecrire = true;
      
      tabBlork.display(tabBlork.getBoard());
      
      while (tabBlork.isEmpty() && tabBlork.isFull()){
         do{
            System.out.println("Entrez la position du blork (format ligne-colonne): ");
            chaineLue = clavier.nextLine();
            tabBlork.display(tabBlork.getBoard());
            reecrire=false;
            } while (!chaineLue.matches("[1-5]-[1-7]"));
         String[]junk = chaineLue.split("-");
         ligne = Integer.valueOf(junk[0]);
         colonne = Integer.valueOf(junk[1]);            
         
         upgrade = tabBlork.kill(ligne-1,colonne-1,gunStrength);
       
         if (upgrade==true){
            gunStrength=gunStrength+1;
            upgrade=false;
         }
         if (reecrire==true){
            tabBlork.display(tabBlork.getBoard());
         }
      }
      if (tabBlork.isEmpty()){
         System.out.println("Vous avez vaincu la menace blork!");
      }
      else {
         System.out.println("Vous avez faillit à votre mission...");
      }
   }
}
       
         


Dernière édition par le Ven 30 Nov 2007, 20:49, édité 1 fois

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [résolu] Problème TD10 (java)

Message  Invité le Ven 30 Nov 2007, 19:53

J'ai pas le temps de lire mnt, mais je voudrais mettre en avant ta facon de poser la question ta démarche et les infos que tu donnes...

Pour un premier post, tu surpasses pas mal de gens... Merci de sauver le fora ! cheers

Invité
Invité


Revenir en haut Aller en bas

Re: [résolu] Problème TD10 (java)

Message  Morbid le Ven 30 Nov 2007, 20:41

Je suis encore occupé a regardé mais deja tu imprime ton tableau au mauvais endroit il me semble ... ce qui fait que tu pense qu'il supprime ou supprime pas ...

1) tu l'affiche

2) tu rentre dans ta boucle et tu demande que tuer
3) tu affiche ton tableau (et la ca t'affiche le plateau(pour la deuxieme fois alors que tu devrais l'avoir logique affiche que uen seule fois vu que tu n'a sencore rien changé au plateau) avant de supprimer)
4) tu tue --> bug

Ce qui donne donc quand tu choisit d'abord le 2-2 pusi le 1-1 :

1) affiche

2)rentre 2-2
3)affiche le plateau de departa nouveau
4) tu tue le 2-2
5)tu rentre 1-1
6) tu reaffiche le tableau avec le blork en 2-2 bien supprimé (donc ca fonctionne)
7) tu tue le 1-1 bug --> surement que tu dois sortir de ton tableau en fait


Je continue ma recherche Wink


Ton main devient :

Code:

import java.util.Scanner ;

public class Main{
  public static void main(String[] args){
      Board tabBlork = new Board();
      int gunStrength = 2;
      Scanner clavier = new Scanner(System.in);
      int ligne;
      int colonne;
      boolean upgrade;
      String chaineLue;
      boolean reecrire;
      reecrire = true;
   
     
      while (tabBlork.isEmpty() && tabBlork.isFull()){
        do{
       tabBlork.display(tabBlork.getBoard());
            System.out.println("Entrez la position du blork (format ligne-colonne): ");
            chaineLue = clavier.nextLine();
            reecrire=false;
            } while (!chaineLue.matches("[1-5]-[1-7]"));
        String[]junk = chaineLue.split("-");
        ligne = Integer.valueOf(junk[0]);
        colonne = Integer.valueOf(junk[1]); 
   
       
        upgrade = tabBlork.kill(ligne-1,colonne-1,gunStrength);
     
        if (upgrade==true){
            gunStrength=gunStrength+1;
            upgrade=false;
        }
        if (reecrire==true){
            tabBlork.display(tabBlork.getBoard());
        }
      }
      if (tabBlork.isEmpty()){
        System.out.println("Vous avez vaincu la menace blork!");
      }
      else {
        System.out.println("Vous avez faillit à votre mission...");
      }
  }
}
       

deja la tu verra que tu supprime bien Smile je regarde maintenant pour le nullpointeurexception Wink


Dernière édition par le Ven 30 Nov 2007, 20:47, édité 1 fois

Morbid

Nombre de messages : 894
Age : 30
Prénom : Christophe
Statut : Ancien (R)
Date d'inscription : 23/11/2006

Revenir en haut Aller en bas

Re: [résolu] Problème TD10 (java)

Message  LSV le Ven 30 Nov 2007, 20:46

Je pense que Null a trouvé la solution a mon probleme:

Elle vient de ma méthode kill()

je dois remplacer la remplacer par

Code:

public boolean kill(int line, int column, int strength)
    {
        if(this.tableau[line][column] != null)
            return this.tableau[line][column].die(strength, this);
        else
            return false;
    }

Ca semble effectivement marcher ^^. J'ai encore quelques lignes de code a revoir (principalement pour l'ajout de force, etc), mais le problème est donc résolu.

Merci pour vos réponses Smile

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [résolu] Problème TD10 (java)

Message  Morbid le Ven 30 Nov 2007, 20:52

Effectivement avec la modif de null et la mienne ca fonctionne maintenant pour tuer ce blork xD

Après faut voir pour les forces effectivement parceque quand je tue celui en 1-5 il se dédoublé mais c'est peut etre le jeu je sais pas j'ai pas lu les regles lol!

Bon courage Wink

Morbid

Nombre de messages : 894
Age : 30
Prénom : Christophe
Statut : Ancien (R)
Date d'inscription : 23/11/2006

Revenir en haut Aller en bas

Re: [résolu] Problème TD10 (java)

Message  Contenu sponsorisé Aujourd'hui à 08:42


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum