Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème sur un jeu

    4 février 2016 à 20:18:59

    Bonsoir, je viens de faire une connerie sur mon jeu feuille pierre ciseaux, j'ai effacé la ligne après mon while et j'ai enregistré. Du coup j'ai une boucle sans fin :(

    Si vous pouviez m'aider à retrouver cette ligne vous me sauvez.

    Le reste du programme reste inchangé, il fonctionné parfaitement avant. En cours nous utilisons la bibliothèque Terminal donc ne soyez pas surpris par cette dernière

    public class Programme32 {
    	public static void main(String[] args) {
    		int o;
    		int j;
    		int scoreo = 0;
    		int scorej = 0;
    		while (scoreo < 3 && scorej < 3){
    			Terminal.ecrireString("Choisissez : 0 Pierre, 1 Feuille, 2 Ciseaux : ");
    			j = Terminal.lireInt();
    			o = (int) (Math.random() * 3);
    			if (o == 0 && j == 1) {
    				scorej = scorej + 1;
    				Terminal.ecrireString("le joueur gagne la manche");
    				Terminal.sautDeLigne();
    			} else if (o == 0 && j == 0) {
    				Terminal.ecrireString("recommencez le coup");
    				Terminal.sautDeLigne();
    			} else if (o == 0 && j == 2) {
    				scoreo = scoreo + 1;
    				Terminal.ecrireString("l'ordinateur gagne la manche");
    				Terminal.sautDeLigne();
    			}else if (scoreo == 1 && scorej == 0) {
    				scoreo = scoreo + 1;
    				Terminal.ecrireString("l'ordinateur gagne la manche");
    				Terminal.sautDeLigne();
    			 }else	if (scoreo == 1 && scorej == 1) {
    				Terminal.ecrireString("recommencez le coup");
    				Terminal.sautDeLigne();
    			 }else if (scoreo == 1 && scorej == 2) {
    				scoreo = scoreo +1;
    				Terminal.ecrireString("l'ordinateur gagne la manche");
    				Terminal.sautDeLigne();
    			 }else if (scoreo == 2 && scorej == 0) {
    				scorej = scorej +1;
    				Terminal.ecrireString("le joueur gagne la manche");
    				Terminal.sautDeLigne();
    			 }else if (scoreo == 2 && scorej == 1) {
    				scorej = scorej +1;
    				Terminal.ecrireString("le joueur gagne la manche");
    				Terminal.sautDeLigne();
    			 }else if (scoreo == 2 && scorej == 2) {
    				Terminal.ecrireString("recommencez le coup");
    				Terminal.sautDeLigne();
    			}
    		}
    	}
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      4 février 2016 à 20:40:09

      Je veux juste la ligne ou les lignes manquantes, pas de liens vers une aide quelconque, je dois le finir absolument ce soir.

      Merci d'avance à ceux qui me donnerons la solution à cette mauvaise manip.

      • Partager sur Facebook
      • Partager sur Twitter
        4 février 2016 à 20:53:03

        En le lisant comme ça je ne vois pas le soucis!

        Au passage tu pourrais mieux organiser tes if de façon à ce qu'on comprenne mieux.

        Du genre :

        if (o == 0){
            if(j == 0){
                Terminal.ecrireString("recommencez");
            }
            if(j == 1){
                Terminal.ecrireString("le joueur gagne la manche");
                scorej++;
            }
            if(j == 2){
                Terminal.ecrireString("l'ordinateur gagne la manche");
                scoreo++;
            }
        }
        /* 
        etc. C'est plus facile à lire et débugguer comme ça je trouve.
        */



        • Partager sur Facebook
        • Partager sur Twitter
          4 février 2016 à 21:00:45

          C'est gentil mais je ne veux pas changer la structure de mon programme, je veux juste une réponse pour que ma boucle while ne soit pas infinie.

          Mais merci à toi

          • Partager sur Facebook
          • Partager sur Twitter
            4 février 2016 à 21:19:22

            Il te marque quelque chose du genre:

            "

            "Choisissez : 0 Pierre, 1 Feuille, 2 Ciseaux : "

            "Choisissez : 0 Pierre, 1 Feuille, 2 Ciseaux : "

            "Choisissez : 0 Pierre, 1 Feuille, 2 Ciseaux : "

            "Choisissez : 0 Pierre, 1 Feuille, 2 Ciseaux : "

            [...]

            "

            C'est bien çà?

            Essaie de rajouter çà après ta ligne 8:

            Terminal.sautDeLigne();

            Sait on jamais.

            • Partager sur Facebook
            • Partager sur Twitter
              4 février 2016 à 21:21:42

              tu as fait de la merde dans tes else if  surtout.

              il ne faut pas faire if(scoreo == 0) mais o == 0. Et tu l'as fait plusieurs fois.

              Quand je te disais d'organiser ton code différemment pour mieux le comprendre...

              • Partager sur Facebook
              • Partager sur Twitter
                4 février 2016 à 21:32:01

                Non, tu ne comprends pas, mon programme fonctionnait parfaitement même avec les else if tels quels, mon souci n'est pas là, il vient juste du fait que ma boucle while est infinie, il me manque juste la ligne qui suit pour qu'elle boucle c'est tout. le reste du programme n'est pas à changer ni à regarder.

                En fait il me manque juste une ligne entre la 7 et la 8. je veux juste ça. pas changer le programme même si il vous agace dans sa structure :)

                Mais merci pour tes remarques

                YEEEESSSS merci Nox, je n'avais pas vu ton post, effectivement c'est exactement cette p***** de ligne qui manquait, tu me sauve la vie. tu es un dieu vivant pour moi :)

                Bon, ça merde encore un peu, par moment j'ai des résultats vides, mais ça ira quand même.

                -
                Edité par Skagrim 4 février 2016 à 21:48:36

                • Partager sur Facebook
                • Partager sur Twitter
                  4 février 2016 à 21:38:25

                  J'insiste, ton programme fonctionne mais ne fait pas ce pour quoi il est créé. Ton seul test valide est sur ton premier if et les 2 elseif suivants. Le reste est faux.

                  Autrement, ton programme fonctionne chez moi.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 février 2016 à 22:15:00

                    Je comprends, mais avant mon erreur il fonctionnait parfaitement, bon il faut changer les gagne la manche par gagne la partie. Mais je ne veux pas changer la structure, elle fonctionnait comme ça. La partie se termine quand le joueur ou l'ordinateur arrive à trois, c'est tout ce qui est demandé. Mais je vais t'écouter et changer ce que tu as écrit.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 février 2016 à 22:20:34

                      Pour info je n'ai pas changé ta structure. J'ai juste changé les scoreo par o et scorej par j dans les elsif.(Bon j'ai pas testé plus qu eç mais ça m'avait l'air de marcher comme ça) :

                      public static void main(String[] args) {
                              int o;
                              int j;
                              int scoreo = 0;
                              int scorej = 0;
                              while (scoreo < 3 && scorej < 3){
                                  System.out.println("Choisissez : 0 Pierre, 1 Feuille, 2 Ciseaux : ");
                                  Scanner sc = new Scanner(System.in);
                                  j = sc.nextInt();
                                  o = (int) (Math.random() * 3);
                                  System.out.println(o+ " "+ j + ",scoreo : " + scoreo + ", scorej : " + scorej);
                                  if (o == 0 && j == 1) {
                                      scorej = scorej + 1;
                                      System.out.println("le joueur gagne la manche");
                                      
                                  } else if (o == 0 && j == 0) {
                                      System.out.println("recommencez le coup");
                                      
                                  } else if (o == 0 && j == 2) {
                                      scoreo = scoreo + 1;
                                      System.out.println("l'ordinateur gagne la manche");
                                      
                                  }else if (o == 1 && j == 0) {
                                      scoreo = scoreo + 1;
                                      System.out.println("l'ordinateur gagne la manche");
                                      
                                   }else  if (o == 1 && j == 1) {
                                      System.out.println("recommencez le coup");
                                      
                                   }else if (o == 1 && j == 2) {
                                      scoreo = scoreo +1;
                                      System.out.println("l'ordinateur gagne la manche");
                                      
                                   }else if (o == 2 && j == 0) {
                                      scorej = scorej +1;
                                      System.out.println("le joueur gagne la manche");
                                      
                                   }else if (o == 2 && j == 1) {
                                      scorej = scorej +1;
                                      System.out.println("le joueur gagne la manche");
                                      
                                   }else if (o == 2 && j == 2) {
                                      System.out.println("recommencez le coup");
                                      
                                  }
                                  
                                  System.out.println(o+ " "+ j + ",scoreo : " + scoreo + ", scorej : " + scorej);
                              }
                          }



                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 février 2016 à 22:43:01

                        C'est sympa de l'avoir corrigé, mais je dois garder ma bibliothèque terminal et je le répète, mon programme fonctionnait très bien avant. Là je n'ai plus que quelques lignes vides , sans recommencer ou le joueur gagne ou l'ordi gagne.

                        Mais ne vous prenez pas la tête sur ça, c'est très gentil à vous d'avoir voulu me répondre. Je vais envoyer ça tel quel et passer à autre chose.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 février 2016 à 22:51:25

                          C'est absolument pas possible avec ton code précédent que ton programme fonctionne "très bien". Il fonctionnait uniquement quand l'ordinateur tombait sur 0. Sinon ça ne faisait rien.

                          Et pour ta bibliothèque, tu as juste à remplacer les System.out.println par Terminal.ecrireString, et le Scanner sc = new Scanner(System.in); sc.nextInt(); par j = Terminal.lireInt();

                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 février 2016 à 0:15:01

                            Ok merci à toi, je corrige ça demain matin :)

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Problème sur un jeu

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown