2 votes

Code du jeu de bataille navale à tableau unidimensionnel

Je débute en Java. J'essayais d'émuler le code de bataille navale à une seule dimension du livre Java Head First. Le code ne plante pas, mais je n'arrive pas à le faire fonctionner correctement.

Exemple : [1,2,3] est le tableau qui contient l'emplacement du navire de guerre. Si je devine un nombre autre que 1, cela s'affiche comme raté. Mais si je devine 1 trois fois de suite (longueur du navire de guerre), je le considère comme coulé. Je n'arrive pas à comprendre ce problème.

Pouvez-vous s'il vous plaît m'aider ici. Le code est posté ci-dessous :

package battleship;

public class battleship {
    public int[] battleship = new int[3];
    public int numofhits = 0;
    String result = "raté"; // variables d'instance complètes

    // méthode setter pour initialiser le tableau contenant l'emplacement du navire de guerre
    public void setbattleshiploc(int startpos) {
        int i = 0;
        for(i = 0; i < battleship.length; i++) {
            battleship[i] = startpos + i;
            System.out.println(battleship[i]);
        }
        System.out.println("le tableau initialisé est : " + java.util.Arrays.toString(battleship));
    }

    // méthode getter pour imprimer le tableau du navire de guerre défini
    public  int[] getbattleshiploc() {
        System.out.println("Le tableau du navire de guerre est : " + battleship);
        return battleship;
    }

    // vérifier si la supposition de l'utilisateur est à l'intérieur de l'emplacement du tableau du navire de guerre
    public String guessloc(int guessnum) {
        //int i = 0;
        for(int cell : battleship) {
            System.out.println("Nombre deviné : " + guessnum + " élément du tableau : " + battleship[cell]);
            System.out.println("cellule : "+ cell + " ,battleship[cell] : " + battleship[cell] );

            if(cell == guessnum) {
                numofhits++;                
                if(numofhits == 3) {
                    result = "coulé";
                    return result;
                } // si les coups sont à 3 alors retourner coulé indiquant qu'il n'y a plus de navire de guerre disponible
                else {
                    result = "touché";
                    return result;
                } // fin du else interne                
            } // fin du if externe

            else {
                //numofhits++;
                result = "raté";
                return result;
            } // fin du if-else

        } // fin de la boucle for

        return "terminé";
    } // fin de la fonction guessloc

} // fin de la classe

package battleship;
import java.util.Scanner; 

public class gamelauncher {
public Scanner[] reader;    

    public static void main(String[] args) {
        String result = "raté";
        int numofguess = 0;
        //int loopnum = 0;
        battleship launchgame = new battleship(); // lancer le jeu
        int startpos = (int) (Math.random() * 5); // générer un nombre aléatoire entre 0 et 4
        //int[] location = {startpos, startpos + 1, startpos + 2}; // initialiser trois éléments de tableau consécutifs 
        launchgame.setbattleshiploc(startpos); // définir le tableau comme emplacement du navire de guerre en utilisant le setter

        // afficher la position du navire de guerre
        System.out.println("Positions du navire de guerre sont : " +  startpos +" ," + startpos+1 + " ," + startpos+2);
        System.out.println("Le tableau du navire de guerre est : " + launchgame.getbattleshiploc());
        //int[] battleshiplocation = launchgame.getbattleshiploc();
        System.out.println(java.util.Arrays.toString(launchgame.getbattleshiploc()));

        while(result != "coulé") {

            Scanner reader = new Scanner(System.in); // Lecture depuis System.in
            System.out.println("Entrez un nombre : ");
            int guess = reader.nextInt(); // obtenir l'entier de l'entrée utilisateur
            //reader.close(); // fermer le scanner
            //loopnum++;

            numofguess++;
            if(guess < 0 || guess > 7) {
                System.out.println("L'espace maximum disponible est de 7 unités (0 à 6) et la longueur du navire de guerre est de 3 unités, veuillez fournir la localisation en conséquence");
                continue;
            } // fermer la boucle if et passer à l'exécution de la boucle si la supposition n'est pas dans les limites
            else {
                result = launchgame.guessloc(guess);
                System.out.println("Réponse de la méthode de devinette : " + result);
                // récupérer le statut (touché/raté/coulé) de la méthode de devinette

                if(result == "coulé") {
                    System.out.println("Nous avons détruit toutes les parties du navire de guerre et cela a pris " + numofguess +" devinettes"  );
                    break; // sortir de la boucle car nous avons tout détruit
                } // fin coulé
                else if(result == "touché") {
                    System.out.println("Vous avez détruit " + launchgame.numofhits + " parties du navire de guerre, veuillez continuer");
                    continue;
                }
                else {
                    System.out.println("C'est un raté, idiot, réessayez");
                    continue;
                }
            } // fin de l'instruction else externe
        } // fin de la boucle while

    } // fin de la méthode main

} // fin de la classe

1voto

G T Points 46

Je peux vous aider en vous donnant cette fonction un peu modifiée. Essayez de corriger le reste de votre code par vous-même. Cela vous donnera une expérience importante.

public String guessloc(int guessnum) {
    for(int i=0;i

0voto

nerfyies Points 9

Je pense que le problème est que lorsque vous comparez des chaînes de caractères, vous utilisez == au lieu de .equals(), donc votre code devrait ressembler à ceci :

if(result.equals("kill"))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X