Partage
  • Partager sur Facebook
  • Partager sur Twitter

Amelioration ?

    13 janvier 2011 à 19:00:13

    Voila j'ai un projet a faire en java qui est le jeu du MasterMind et je voulait avoir votre avis sur le code que j'ai fait.Toute remarque et amélioration sont les bienvenues.(j'ai mis des commentaire pour que vous sachiez ce que j'ai codé)

    import java.util.*;
    
    class MasterMind {
        private static Scanner scanner = new Scanner(System.in);
        
      public static void main(String[] args) {
        mastermind(4, 9, 10);
      }
    
     
    //Tirage d'un entier au hasard entre 1 et max
       static int hasard(int max) {
        return (1 + (int) (Math.random() * max));
      }
    
        //Tire une combinaison à deviner
    
      static void tirerCombinaison(int[] combinaison, int n, int m) {
        for (int i = 0; i < n; i++) {
          combinaison [i] = hasard(m);
          }
      }
    
      /*Permet de lire la combinaison proposée
       par le joueur*/   
    
      static void demanderCoup(int[] combinaison, int n){
          int i;
        System.out.print("Entrez les " +n+ " chiffres de votre proposition");
        System.out.println("(faite des espace entre chaque chiffres et terminés par un retour chariot) :");
        for (i = 0; i < n; i++) {
          combinaison[i] = scanner.nextInt();
        }
      }
    
      /*Permet de comparer la combinaison à deviner avec la 
       combinaison proposée par le joueur.
       Dans reponse[0] sera stocké le nombre d'éléments bien devinés 
       et correctement placés.
       Dans reponse[1] sera stocké le nombre d'éléments bien devinés
       mais mal placés.
       return true si la bonne combinaison est trouvée et sinon sa return false*/
       
       
       static boolean compare(int n, int[] combinaison1, int[] combinaison2,
                 int[] reponse) {
        int i;
        int nbMp = 0;
        int nbOk = 0;
        boolean [] marque = new boolean[n];
        boolean trouve = true;
        /*cette première boucle sert à trouver 
        les éléments bien devinés et correctement placés.
        Le tableau marque permet de marquer de tels
        éléments pour qu'ils ne soient pas compter
        plusieurs fois.*/
        for (i = 0; i < n; i++) {
          if (combinaison1 [i] == combinaison2 [i]) {
            nbOk++;
            marque[i] = true;
          } else {
            trouve = false;
            marque[i] = false;
          }
        }
        /*la boucle suivante sert à identifier les
         éléments bien devinés mais mal placés.*/
        for (i = 0; i < n; i++) {
          if (combinaison1[i] != combinaison2[i]) {
            int j = 0;
            boolean trouveMalPlace = false;
            while ((j < n) && !trouveMalPlace) {
              if (!marque[j] && (combinaison1[i] == combinaison2[j])) {
                nbMp++;
                marque[j] = true;
                trouveMalPlace = true;
              }
              j++;
            }
          }
        }
    
        reponse[0] = nbOk;
        reponse[1] = nbMp;
        return trouve;
      }
    
        //Affichage d'une combinaison 
        
      static void afficheCombinaison(int[] combinaison, int n) {
          int i;
        for (i = 0; i < n; i++)
          System.out.print(combinaison[i]);
        System.out.println(" ");
      };
    
       /*Affichage des indications destinées au joueur
       @param reponse*/
        
      static void afficheReponse(int[] reponse) {
          int i;
        for (i = 0; i < reponse[0]; i++)
    	System.out.print('#');
        for (i = 0; i < reponse[1]; i++)
          System.out.print('O');
        System.out.println();
      }
    
        //Affichage du texte d'acceuil
       
         
      static void bienvenue(int n, int m, int maxCoups) {
         System.out.println(" **- BIENVENUE DANS LE JEU DU MASTERMIND -**\n ");
         System.out.printf(" chiffres [compris entre 1 et " +m+ " avec répétitions possibles]\n");
         System.out.printf(" Saurez vous là trouver en moins de " +maxCoups+ "coups ?\n");
         System.out.println(" O = chiffre mal placée ; # = chiffre bien placée ");
      }
    
      
      
        //Regle du MasterMind
    static void mastermind(int size, int maxDigit, int maxCoups) {
        int[] solution = new int[size];
        int[] proposition = new int[size];
        int nbCoups = 0;
        boolean trouve = false;
        int[] reponse = new int[2];
    
        bienvenue(size, maxDigit, maxCoups);
        tirerCombinaison(solution, size, maxDigit);
    
        do {
          demanderCoup(proposition, size);
          nbCoups++;
          trouve = compare(size, solution, proposition, reponse);
          afficheReponse(reponse);
        }
        while (!trouve && (nbCoups < maxCoups));
    
        if (trouve) {
          System.out.print("Bravo ! Vous avez trouvé le code en ");
          System.out.print(nbCoups);
          System.out.println(" coups");
        }
        else {
          System.out.println("Désolé ! Vous n'avez pas trouvé le bon code ...");
          System.out.println("Le bon code était : ");
          afficheCombinaison(solution, size);
          System.out.println("Au Revoir !!");
        }
      }
    
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      13 janvier 2011 à 19:20:54

      A ta place, je supprimerais la fonction hasard(). Tu dois l'appeler une fois en début de partie et elle ne comporte qu'une ligne, c'est pas vraiment un gain de place.

      Dans compare(), si trouve == true, tu peux t'épargner le parcours de la 2nde boucle, elle est inutile dans ce cas.

      RAS pour le reste.
      • Partager sur Facebook
      • Partager sur Twitter
        13 janvier 2011 à 21:16:12

        Merci pour ta reponse mais comment je fait pour le random si je supprime la fonction ?
        • Partager sur Facebook
        • Partager sur Twitter
          13 janvier 2011 à 21:24:24

          static void tirerCombinaison(int[] combinaison, int n, int m) {    
              for (int i = 0; i < n; i++) {
                combinaison [i] = (1 + (int) (Math.random() * m));
              }
          }
          


          Tout simplement, non ?
          • Partager sur Facebook
          • Partager sur Twitter
            13 janvier 2011 à 21:34:33

            Bah oui!logique! Désole c'était une question idiote,merci pour ton aide!
            Donc si j'ai bien compris maintenant le code devient :

            import java.util.*;
            
            class MasterMind {
                private static Scanner scanner = new Scanner(System.in);
                
              public static void main(String[] args) {
                mastermind(4, 9, 3);
              }
            
             
            //Tire une combinaison à deviner
            
                static void tirerCombinaison(int combinaison [], int n, int max) {
            	int i;
                for (i = 0; i < n; i++) {
            	combinaison [i] =(1 + (int) (Math.random() * max));
                  }
              }
            
              /*Permet de lire la combinaison proposée
               par le joueur*/   
            
              static void demanderCoup(int combinaison [], int n){
                  int i;
                System.out.print("Entrez les " +n+ " chiffres de votre proposition");
                System.out.println("(faite des espace entre chaque chiffres et terminés par un retour chariot) :");
                for (i = 0; i < n; i++) {
                  combinaison[i] = scanner.nextInt();
                }
              }
            
              /*Permet de comparer la combinaison à deviner avec la 
               combinaison proposée par le joueur.
               Dans reponse[0] sera stocké le nombre d'éléments bien devinés 
               et correctement placés.
               Dans reponse[1] sera stocké le nombre d'éléments bien devinés
               mais mal placés.
               return true si la bonne combinaison est trouvée et sinon sa return false*/
               
               
               static boolean compare(int n, int combinaison1 [], int combinaison2 [],int reponse []) {
                int i;
                int nbMp = 0;
                int nbOk = 0;
                boolean [] marque = new boolean[n];
                boolean trouve = true;
                /*cette sert à trouver 
                les éléments bien devinés et correctement placés.
                Le tableau marque permet de marquer de tels
                éléments pour qu'ils ne soient pas compter
                plusieurs fois.*/
                  for (i = 0; i < n; i++) {
                  if (combinaison1 [i] == combinaison2 [i]) {
                    nbOk++;
                    marque[i] = true;
                  } else {
                    trouve = false;
                    marque[i] = false;
                  }
                }
                reponse[0] = nbOk;
                reponse[1] = nbMp;
                return trouve;
              }
            
                //Affichage d'une combinaison 
                
              static void afficheCombinaison(int combinaison [], int n) {
                  int i;
                for (i = 0; i < n; i++)
                  System.out.print(combinaison[i]);
                System.out.println(" ");
              };
            
                /*Affichage des indications destinées au joueur*/
              
                
              static void afficheReponse(int reponse []) {
                  int i;
                for (i = 0; i < reponse[0]; i++)
            	System.out.print('#');
                for (i = 0; i < reponse[1]; i++)
                  System.out.print('O');
                System.out.println();
              }
            
                //Affichage du texte d'acceuil
               
                 
              static void bienvenue(int n, int max, int maxCoups) {
                 System.out.println(" **- BIENVENUE DANS LE JEU DU MASTERMIND -**\n ");
                 System.out.printf(" chiffres [compris entre 1 et " +max+ " avec répétitions possibles]\n");
                 System.out.printf(" Saurez vous là trouver en moins de " +maxCoups+ "coups ?\n");
                 System.out.println(" O = chiffre mal placée ; # = chiffre bien placée ");
              }
            
              
              
                //Regle du MasterMind
            static void mastermind(int size, int maxDigit, int maxCoups) {
                int[] solution = new int[size];
                int[] proposition = new int[size];
                int nbCoups = 0;
                boolean trouve = false;
                int[] reponse = new int[2];
            
                bienvenue(size, maxDigit, maxCoups);
                tirerCombinaison(solution, size, maxDigit);
            
                do {
                  demanderCoup(proposition, size);
                  nbCoups++;
                  trouve = compare(size, solution, proposition, reponse);
                  afficheReponse(reponse);
                }
                while (!trouve && (nbCoups < maxCoups));
            
                if (trouve) {
                  System.out.print("Bravo ! Vous avez trouvé le code en ");
                  System.out.print(nbCoups);
                  System.out.println(" coups");
                }
                else {
                  System.out.println("Désolé ! Vous n'avez pas trouvé le bon code ...");
                  System.out.println("Le bon code était : ");
                  afficheCombinaison(solution, size);
                  System.out.println("Au Revoir !!");
                }
              }
            
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              13 janvier 2011 à 21:55:31

              Pas tout à fait ^^

              int i;
              for(i = 0; ...)
              


              équivaut à : for(int i = 0; ...)

              Dans compare(), on ne sait pas compris. Je t'ai dit de sauter la 2nde boucle si trouve vaut true et non de virer la boucle de ta fonction !
              • Partager sur Facebook
              • Partager sur Twitter
                13 janvier 2011 à 22:00:07

                ah ok :D je corrige ça tout de suite encore merci

                désolé je ré-ouvre ce sujet car aujourd'hui(Vendredi 14 Janvier) j'ai montré mon projet a ma prof de java et elle ma dit de le faire avec une interface graphique pour Mercredi,alors qu'on n'as jamais vu ça en cours donc je voudrai de l'aide s'il vous plait car je suis overbooké !je vous remercie d'avance
                • Partager sur Facebook
                • Partager sur Twitter
                  15 janvier 2011 à 11:58:26

                  désolé je ré-ouvre ce sujet car aujourd'hui(Vendredi 14 Janvier) j'ai montré mon projet a ma prof de java et elle ma dit de le faire avec une interface graphique pour Mercredi,alors qu'on n'as jamais vu ça en cours donc je voudrai de l'aide s'il vous plait car je suis overbooké !je vous remercie d'avance
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 janvier 2011 à 12:00:27

                    Interface graphique faite à la main ? Ou tu peux utiliser l'éditeur de Netbeans ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 janvier 2011 à 12:16:42

                      je suis sous Linux sa doit-être fait dans emacs
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 janvier 2011 à 12:39:23

                        C'est tendu à faire en moins d'une semaine sans connaissance. Il y a le tuto qui est sur le SdZ mais il est particulièrement long.

                        Tu dois prévoir plusieurs zones :
                        • une grille de JButton qui représentera ta grille de jeu
                        • une zone de texte pour afficher au joueur ce qu'il doit faire

                        Si tu veux, je peux t'envoyer un morpion codé en Java. Ca ressemble pas mal au puissance 4.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 janvier 2011 à 12:45:38

                          OK mais moi c'est le MasterMind en version chiffre en faite.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 janvier 2011 à 12:49:13

                            Ha oui désolé, je confonds avec un autre topic. Mais ça reste le même principe, y a une grille :p

                            Je te MP le code source.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 janvier 2011 à 12:52:36

                              ok Merci.Mais sinon tu peux m'aider pour ce projet ?!
                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 janvier 2011 à 12:55:24

                                Bah je te MP le code source justement pour t'aider ^^
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 janvier 2011 à 15:24:45

                                  Interface graphique ou non, pour moi ce projet vaut 0 : il n'y a aucun objet !
                                  Merde, un programme avec que des méthodes statiques dans un gros fichier, c'est pas du Java !

                                  Je ne sais pas si ta prof t'a parlé des objets, mais si elle ne t'en a pas parlé et qu'elle te demande de faire "une interface graphique" elle mérite la porte.
                                  Idem si elle te demande d'en faire sans avoir fait le cours.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    15 janvier 2011 à 18:06:22

                                    SpaceFox ma prof mérite la porte comme tu dit.Car elle nous a pas parler d'interface graphique n'y des objets.Ma profs nous donne des définition et aucun code n'y de manip ,elle nous dit c'est a nous de chercher!Donc voilà!Mais ce projet fonctionne mais maintenant a moins d'une semaine de la remise des projet elle nous impose de le faire avec une interface graphique!Donc tu vois dans quelle problème elle nous mets ?!
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      15 janvier 2011 à 18:13:00

                                      Du coup ça mérite d'aller faire un petit tour du côté de la direction une situation pareille.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        15 janvier 2011 à 18:15:23

                                        c'est déja fait!Bref tu peut m'aider sinon pour mon probleme
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          15 janvier 2011 à 18:17:43

                                          Ben... tu peux jeter un œil du côté du tuto Java pour voir comment on fait les interfaces graphiques, mais en faire une sans maîtriser l'objet c'est l'échec presque sûr. Je ne peux pas faire grand-chose d'autre.
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Amelioration ?

                                          × 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