IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Le pendu (bientot moi)


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Le pendu (bientot moi)
    Bonjour,

    intéressé par les langages de programmation en général et reprenant mes études d'informatique en septembre, j'ai décidé de me mettre au java en attendant la rentrée de septembre.
    pour commencer, j'ai déjà codé un petit morpion et je m'apprete à coder un pendu.
    Seulement voila, je suis bloqué et si ça continue c'est moi qui risque de finir pendu ...

    le but est de faire un pendu en console très simple (pour m'aider à comprendre et à manipuler le langage). Il s'agit de stocker 10 mots de 10 lettres chacun dans une liste elle même mise dans une classe "bibliothèque" et l'utilisateur devrait deviner le bon mot parmi les 10 à l'aide d'un random qui sélectionne un mot parmi les 10.
    Bien sur, l'utilisateur ne sait pas qu'il n'y a que 10 mots de stocker.
    En gros, le random sélectionne un mot parmi les 10 présent dans la bibliothèque et c'est ce mot là que l'utilisateur doit pouvoir deviner. Pour ce faire on lui demande un certain nombre de fois de rentrer une lettre afin qu'il réussisse à complèter le mot et si au dela d'un certain nombre de fois il n' pas réussit à trouver le mot alors on lui envois un message du style "dommage, c'est perdu".
    Donc on demanderait à l'utilisateur d'entrer une lettre et ensuite si la lettre est présente on la met dans le plateau de jeu (j'ai choisis un tableau de caractère pour représenter ce plateau).
    Pour ce faire, j'ai donc crée mes 4 classes et j'ai commencé à coder.

    voici la classe main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package Pendu;
     
    public class Main {
     
            public static void main(String[] args){
     
                    // initialisation
                    Plateau plateau1 = new Plateau(1,10);
                    Bibliotheque bibliotheque1 = new Bibliotheque();
                    Partie partie1 = new Partie();
                    String mot;
                    int compteur;
     
                    // méthode
                    System.out.println("BIENVENUE DANS LE JEU DU PENDU");
     
                    bibliotheque1.listeMot();
                    mot = bibliotheque1.motADeviner();
                    partie1.deroulementPartie(mot);
     
     
            }
     
    }
    la classe Bibliotheque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    package Pendu;
     
    import java.util.ArrayList;
    import java.util.Random;
     
    public class Bibliotheque {
     
     
            ArrayList<String> liste = new ArrayList<String>();
     
            public void listeMot(){
                    liste.add("multimedia");
                    liste.add("acceptable");
                    liste.add("abominable");
                    liste.add("beneficier");
                    liste.add("certificat");
                    liste.add("enseignant");
                    liste.add("facilement");
                    liste.add("dromadaire");
                    liste.add("rapidement");
                    liste.add("longuement");
            }
     
            public String motADeviner(){
                    Random r = new Random();
                    int valeur = r.nextInt(11);
                    System.out.println("Le mot à deviner est " +valeur);
                    String motretourner = liste.get(valeur);
                    System.out.println(" Le mot à deviner est " +motretourner);
                    return motretourner;
            }
     
            public void verifierLettre(char c, String motretourner){
     
     
            }
    }
    la classe Partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    package Pendu;
     
    import java.util.Scanner;
     
    public class Partie {
     
            public void deroulementPartie(String mot){
     
                    Scanner sc = new Scanner(System.in);
                    char reponse = 'O';
                    char lettrerecupere;
                    do{
                    System.out.println("Bonjour, voulez - vous commencer la partie ? (O/N)");
                    reponse = sc.nextLine().charAt(0);
                    }while(reponse != 'O' && reponse !='N');
                    while (reponse == 'O'){
                            Plateau p1 = new Plateau (1,10);
                            p1.afficherPlateau();
     
                            System.out.println("Veuillez entrer une lettre SVP");
                            lettrerecupere = sc.nextLine().charAt(0);
     
                    }
                    if(reponse == 'N'){
                            System.out.println("Très bien merci, au revoir!");
                    }
            }
     
    }

    et la classe Plateau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    package Pendu;
     
    public class Plateau {
     
            //Les attributs
            private int nbLig;
            private int nbCol;
            private char [][] plateau;
     
            //Constructeur
            public Plateau(int n, int p){
                    nbLig = n;
                    nbCol = p;
                    plateau = new char[nbLig][nbCol];
     
                    for(int i=0; i<nbLig; i++){
                            for(int j=0; j<nbCol; j++){
                                    plateau[i][j] = '.';
                            }
                    }
            }
     
            //Les méthodes
     
            public void afficherPlateau(){
                    System.out.println();
                    for(int i = 0; i<nbLig; i++){
                            for(int j=0; j<nbCol; j++){
                            //plateau[i][j] = 'x';
     
                                    System.out.print("  | " +plateau[i][j]);
                            }
     
                            System.out.println("  |  ");
                    }
     
                    System.out.println();
            }
    }
    merci à toutes les personnes qui m'aideront

  2. #2
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    Bon, j'ai récupéré ton code et j'y ai vu des choses un peu bizarre à plusieurs niveau (conception, code, autres).

    Tout d'abord, j'ai l'impression que tu as commencé la programmation avec du C. Je veux dire par là que ça se "sent" dans ton code, ce n'est pas vraiment réfléchi objet même si le fait de tout séparer en classe est une bonne habitude (tu verras, après tu en feras trop, des classes, mauvaise habitude du codeur java ^^).

    C'est très bien d'avoir séparer le "business", le vrai code du jeu, de la partie "UI", la partie qui va gérer seulement l'affichage. Pareil pour la bibliothèque, là c'est des mots en dur mais plus tard, pourquoi pas aller fouiller dans un fichier qui contient tous les mots du dictionnaires (c'est très bien aussi de se mettre des objectifs "facile" pour avancer petit à petit, ainsi tu verras ton application avancée et c'est très motivant).Au niveau des problèmes (que je vois à mon humble niveau), tu devrais améliorer le découpage en classe. Par exemple, Bibliothèque ne devrait que fournir le mot mystère. Pourquoi est-ce que tu demande dans le Main à Bibliothèque de générer la liste (sans la stocker), puis (la ligne d'après), demander le mot mystère à ta Bibliothèque ? Je pense que ta méthode listeMot() devrait être privé et c'est motADeviner() qui va l'appeler en interne. Toi tu t'en fout de savoir comment il fait (si tu es dans Main), tu veux juste un mot mystère. Donc tu ne dois faire appel à Bibliothèque qu'une et une seule fois. Si ça se trouve, c'est pas toi qui code Bibliothèque, et tu t'en fiche de savoir comment le mec il a fait, tu veux juste un mot mystère, t'imagine si le mec il avait fait appel à 10 méthodes différente pour générer sa liste ? Tu te vois faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bibliotheque1.methodGenStack0();
    bibliotheque1.methodGenSuite0();
    bibliotheque1.listCreation();
    bibliotheque1.listEnhanced();
    bibliotheque1.listShake();
    ...
    Horrible non ? Tu veux juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bibliotheque1.donneMoiMonMotMystèreJeMenFicheDeCommentTuFais();
    et c'est une notion très importante en Java (et en objet), la séparation. C'est pour ça que j'insiste (un peu)

    Ensuite, je vais te faire une remarque un peu personnelle et peut-être que d'autres me le reprocheront mais j'aime pas du tout gérer des char. C'est toujours chiant, la plupart des trucs intéressant utilise des String, du coup, tu dois toujours t'emmerder à caster et re-caster, tronquer, pour au final retrouver ton char. Et puis, le test d'équivalence avec '==', j'aime pas, ça fais trop impératif, j'aime pas.
    Alors que si tu gères une String, là c'est mieux, là tu as le equals(), tu à le nextLine(), là tu t'amuses un peu plus. Alors on va me dire que c'est con d'avoir une String avec un seul caractère, je répondrais que oui mais j'ai pas envie de m'emmerder pour quelques octets et quelques millisecondes (je parle dans le cas d'un projet perso, aller pas me sortir le projet haute dispo sur atari...).
    Donc tu peux faire un passage dans ta classe Partie, histoire de voir. Par contre, essaie de peut-être plus découper tes méthodes (bon, là, ça m'a l'air pas mal mais c'est important) et un peu plus d'attribut de classe. Tiens, ça me fait penser que dans Bibliothèque t'as "liste" qui n'a pas de visibilité (par défaut, c'est package la visibilité, je te rassure tout de suite, personne ne l'utilise) donc tu peux mettre ta liste private. C'est pas bien de ne pas mettre de visibilité, essaie de prendre l'habitude.

    Plateau : J'ai rien compris au code C'est moche, et il faut arrêter avec les tableaux, sincèrement, c'est un truc très marrant en C mais en Java utilise un ArrayList, pour commencer, ça va largement couvrir tes besoins. Ah oui, ça me fait penser (encore!) dans Bibliothèque, tu as déclarer ta liste comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<String> liste = new ArrayList<String>();
    alors (outre le fait que tu as oublié le scope), il ne faut pas type liste avec ArrayList mais avec son interface List. Ça te permet de changer l'implémentation de ta "liste" sans foutre en l'air ton code. Bon, c'est peut-être un peu poussé pour ton niveau mais bon. Imaginons que là, tu utilises un ArrayList parce que ça te va, donc si tu veux manipuler ta "liste" tu dois foutre des ArrayList partout. Plus tard, imaginons que tu veuilles mettre ton pendu sur plusieurs processeurs (c'est pour l'exemple) et tu t'aperçois que mince ArrayList n'est pas synchronisé et que du coup, y'a des bugs bizarre quand les 2 processeurs veulent lire "liste" en même temps. Mais tu vois que ouf, y'a un SynchronizedList qui existe. Donc tu va changer tous les endroits où y'a ArrayList par des SynchronizedList. Alors que si tu avais déclaré ta "liste" en List qui est une interface implémenté par ArrayList et SynchronizedList, il te suffisait juste de changer le new ArrayList par un new SynchronizedList. Je sais pas si j'ai été très clair mais c'est aussi un truc important en Java donc je me devais de te le dire.
    Revenons à Plateau, j'ai l'impression que tu t’embête la vie pour rien. Pourquoi ne pas gérer une liste et gérer le '|' et les '.' à part.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<String> lettresJouees = new ArrayList();
    for(int i = 0; i < nbEssais; i++)
    print(lettresJouees.get(i) + '|');//enfin un truc dans le genre, j'ai écrit le code à la va vite
    Un dernier truc, mais qui est important. J'espère que tu bosses via un IDE (eclipse, intellij, autre on s'en fout), si c'est pas le cas, fonce en télécharger un, ça change la vie, vraiment (les vieux qui grognent au fond de la salle, on se calme). Et donc, avec un IDE, tu peux facilement, grâce à l’auto complétion, accélérer ta vitesse de frappe. Donc on ARRÊTE de nommer ses variables avec un 1 ou 2 caractères ! Les Random r, Valeur v ou Plateau p parce que si je commence à t'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c = p.get(v,s);
    c.do(k,l,m/n);
    tu fais comment pour débugger ce truc... DONC, on écrit des nom de variable et de méthode et de tout avec un ou deux mots qui expliquent le fonctionnelle (oui parce que faire Valeur valeur, ça change rien par contre Valeur nombreEssais, là ça parle).

    Voilà pour ma modeste contribution, j'espère que ça t'a aidé !

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Salut !

    Justement, je me suis aussi lancé dans la fabrication d'un pendu. Cependant, je créé aussi l'interface graphique, je gère trois langues (anglais, Français et Vietnamien ..) et je gère un score.
    Tu peux jetter un oeuil à mon code si tu veux :
    https://github.com/franckyy/jeux/tree/master/testZjeu


Discussions similaires

  1. TP pendu en C.(segmentation fault) aidez moi.
    Par glonglon dans le forum C
    Réponses: 6
    Dernier message: 09/12/2010, 18h38
  2. Affichez les enregistrements du mois en cours ?
    Par Koala-Prog dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/08/2003, 15h14
  3. Regroupement par mois
    Par fplanglois dans le forum SQL
    Réponses: 7
    Dernier message: 29/07/2003, 16h32
  4. texture cube glTexImage2D et moi
    Par Toukan dans le forum OpenGL
    Réponses: 3
    Dernier message: 04/06/2003, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo