Projet java : jeu de l'oie

[Fermé]
Signaler
Messages postés
5
Date d'inscription
vendredi 4 mai 2018
Statut
Membre
Dernière intervention
4 mai 2018
-
Messages postés
41146
Date d'inscription
mercredi 11 avril 2007
Statut
Modérateur
Dernière intervention
2 août 2021
-
Bonjour,
je suis en L1 informatique et j'ai un projet à faire en java qui est un jeu de l'oie, seulement il me reste 5 jours et je n'y arrive toujours pas , j'ai essayé des tas de choses qui ne marchent pas je suis donc un peu désespérée,
merci d'avance si vous m'aidez

4 réponses

Messages postés
5
Date d'inscription
vendredi 4 mai 2018
Statut
Membre
Dernière intervention
4 mai 2018
1
package jeudeloie;

import java.util.Scanner;

/**
 *
 * @author ophel
 */
public class Jeu {
    private Case[] lesCases;
    private Joueur[] lesJoueurs;
    private Joueur joueurCourant;
    
    
public Jeu(){
    lesCases= new Case[64];
    initJoueurs();
    joueurCourant=lesJoueurs[0];
   // initTours();
    
}

public void initJoueurs(){
    Scanner sc= new Scanner(System.in);
    System.out.println("Veuillez entrer le nombre de joueurs:");
    int nb= sc.nextInt();
    sc.nextLine();
    lesJoueurs= new Joueur[nb];
    for(int i=0; i<nb; i++)
        {System.out.println("Veuillez entrer le pseudo du joueur"+(i+1));
        String s= sc.nextLine();
        lesJoueurs[i]= new Joueur(s); 
        }
}
public void initTours(){
    
        
        while(joueurCourant.getCasej().getNumero()!=64){
        for(int i=0; i<lesJoueurs.length;i++ )
        {   joueurCourant=lesJoueurs[i];
            System.out.println("Vous êtes sur la case numéro "+lesJoueurs[i].getCasej().getNumero()+" intitulée "+lesJoueurs[i].getCasej().getLibelle());
            lesJoueurs[i].getCasej().execute();
        }
        }
}

public void finJeu(){
    System.out.println("Le joueur gagnant est: "+joueurCourant);
    System.exit(0);
    
}
}

package jeudeloie;

/**
 *
 * @author ophel
 */
public class Case {
    private String libelle;
    private int numero;
    private Action act;
    private Joueur joueur;
    
    public String getLibelle() {
        return libelle;
    }

    public void setLibelle(String libelle) {
        this.libelle = libelle;
    }
    
    public Joueur getJoueur() {
        return joueur;
    }

    public void setJoueur(Joueur joueur) {
        this.joueur = joueur;
    }
    
    public int getNumero() {
        return numero;
    }

    public void setNumero(int num) {
        this.numero = num;
        
        if (num==0)
    {
        libelle="Départ";
        act.setType("Lancer");
        
    }
    if(num>0&&num<6)
    {
        libelle="case standart";
         act.setType("Lancer");  
    }
      
    if (num==6)
    {
        libelle="Pont";
         act.setType("Redirection");
         
    } 
    if (num==9||num==18||num==27||num==36||num==45||num==54||num==63)
    {
        libelle="Oie";
        act.setType("Redirection");  
    }
    if (num==7||num==8)
    {
        libelle="Case standart";
        act.setType("Lancer");  
    }
    if(num>9&& num<18)
    {
        libelle="Case standart";
        act.setType("Lancer");  
    }   
    if( num== 19)
    {
        libelle="Hotel";
        act.setType("LancerOccasionel");  
    }
    if(num>19&&num<27)
    {
        libelle="Case standart";
        act.setType("Lancer"); 
    }
    if(num>27&&num<31)
    {
        libelle="Case standart";
        act.setType("Lancer"); 
    }
    if( num==31)
    {
        libelle="Puits";
        act.setType("LancerOccasionnel"); 
    }
    
    if(num>31&&num<36)
    {
        libelle="Case standart";
        act.setType("Lancer"); 
    }
    if( num>36&&num<42)
    {
        libelle="Case standart";
        act.setType("Lancer"); 
    }
    if (num==42)
    {
        libelle="Labyrinthe";
        act.setType("Redirection");  
    }
    if(num>42&&num<45)
    {
         libelle="Case standart";
         act.setType("Lancer"); 
    }
    if(num>45&&num<52)
    {
         libelle="Case standart";
         act.setType("Lancer"); 
    }
    if(num==52)
    {
        libelle="Prison";
    }
    if(num==53)
    {
         libelle="Case standart";
         act.setType("Lancer"); 
    }
    if(num>54&&num<58)
    {
         libelle="Case standart";
         act.setType("Lancer"); 
    }
    if(num==58)
    {
        libelle="Mort";
        act.setType("Redirection");  
    }
    if(num>58&&num<63)
    {
         libelle="Case standart";
         act.setType("Lancer"); 
    }
    if(num==63)
    {
        libelle="Arrivée";
        act.setType("Gain");  
    }
    
    }

    public Action getAct() {
        return act;
    }

    public void setAct(Action act) {
        this.act = act;
    }
        
    public Case(){
    libelle="Départ";
    numero=0;
    act= null;
    }
    
    public void execute(){
        if (act.getType().equals("Lancer"))
        {act= new Lancer(joueur);
        act.execute();
        }
    }
}

package jeudeloie;

/**
 *
 * @author ophel
 */
public abstract class Action {
    private String type;
    
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
         
    }
    public abstract void execute();
}

package jeudeloie;

/**
 *
 * @author ophel
 */
public class Joueur {
    private String pseudo;
    private Case casej;

    public String getPseudo() {
        return pseudo;
    }

    public void setPseudo(String pseudo) {
        this.pseudo = pseudo;
    }

    public Case getCasej() {
        return casej;
    }

    public void setCasej(Case casej) {
        this.casej = casej;
    }
    
    public Joueur(String s){
        setPseudo(s);
        casej= new Case();
        casej.setNumero(0);
    }
}

package jeudeloie;

import java.util.Scanner;

/**
 *
 * @author ophel
 */
public class Lancer extends Action {
    private Joueur j;

public Lancer(Joueur joueur){
    j=joueur;
}
public void execute(){
    Scanner sc= new Scanner(System.in);
    System.out.println(j.getPseudo()+" ,veuillez entrer le résultat du premier dé:");
    int de1= sc.nextInt();
    System.out.println(j.getPseudo()+" ,veuillez entrer le résultat du deuxième dé:");
    int de2= sc.nextInt();
    int som= de1+de2;
    j.getCasej().setNumero( j.getCasej().getNumero()+som);
    System.out.println("Vous êtes sur la case numéro "+j.getCasej().getNumero()+" intitulée "+j.getCasej().getLibelle());
}
}

voila ce que j'ai fait pour l'instant
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
50798
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
30 janvier 2021
7 209
Le bouton
<>|▼
, en haut de la fenêtre d'édition, te permets de choisir une présentation adaptée au langage.

Je ne pourrais pas t'aider moi-même, c'est hors de mes compétences. Essaye de décrire ce qui bloque ou bugue quand tu fais tourner ton code.
Messages postés
5
Date d'inscription
vendredi 4 mai 2018
Statut
Membre
Dernière intervention
4 mai 2018
1
Merci!

du coup ce qui me bloque c'est au moment d’exécuter les actions des différentes cases du jeu
Messages postés
50798
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
30 janvier 2021
7 209
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 861
Bonjour,

Est-ce que tu pourrais nous donner ton main(), moi j'ai un NullPointerException dès la saisie des pseudos...

Et au passage, c'est quoi qui te bloque ? (comme je n'ai pas pu tester ce n'est pas forcément évident)
Tu as une erreur, ou juste un truc que tu voudrais faire (quoi ?) qui ne marche pas comme tu voudrais ? (qu'est-ce que tu voudrais ?)
Messages postés
5
Date d'inscription
vendredi 4 mai 2018
Statut
Membre
Dernière intervention
4 mai 2018
1
Ah oui ça marchait avant que je mette le casej.setNumero(0) dans le constructeur de la classe joueur normalement;

Mon main :

package jeudeloie;

/**
 *
 * @author ophel
 */
public class Jeudeloie {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
     Jeu j= new Jeu();
        // TODO code application logic here
    }
    
}

Bah du coup j'aimerai déja que ma classe lancer marche pour pouvoir coder les autres actions possibles des cases..
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 861
Voici ce que je te propose :

1) utiliser des enum à la place des classes Action et Case.
https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

2) utiliser des références de méthodes (par exemple avec un Consumer) pour tes actions.
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html

Exemple (partiel) pour les case 0 à 10 :

package jeudeloie;

import java.util.function.Consumer;

public enum Action {
    LANCER("Lancer", Action::executeLancer),
    STANDARD("Case standard", Action::executeStandard),
    REDIRECTION("Redirection", Action::executeRedirection);

    private final String libelle;
    private final Consumer<Joueur> executeMethod;

    private Action(String libelle, Consumer<Joueur> executeMethod) {
        this.libelle = libelle;
        this.executeMethod = executeMethod;
    }

    public String getLibelle() {
        return libelle;
    }

    public void execute(Joueur joueur) {
        executeMethod.accept(joueur);
    }

    private static void executeLancer(Joueur joueur) {
        int numero = joueur.getPosition();
        System.out.println("Vous êtes sur la case numéro " + numero + " intitulée " + Case.findByNumero(numero).getLibelle());
    }

    private static void executeStandard(Joueur joueur) {
        //TODO
    }

    private static void executeRedirection(Joueur joueur) {
        //TODO
    }
}

package jeudeloie;

public enum Case {
    DEPART("Départ", Action.LANCER, 0),
    STANDARD("Case standard", Action.LANCER, 1, 2, 3, 4, 5, 7, 8),
    PONT("Pont", Action.REDIRECTION, 6),
    OIE("Oie", Action.REDIRECTION, 9);

    private final String libelle;
    private final Action action;
    private final int[] numeros;

    private Case(String libelle, Action action, int... numeros) {
        this.libelle = libelle;
        this.action = action;
        this.numeros = numeros;
    }

    public String getLibelle() {
        return libelle;
    }

    public Action getAction() {
        return action;
    }

    public static Case findByNumero(int numero) {
        for (Case c : Case.values())
            for (int n : c.numeros)
                if (n == numero)
                    return c;
        throw new IllegalArgumentException("La case " + numero + " n'existe pas.");
    }
}

Messages postés
5
Date d'inscription
vendredi 4 mai 2018
Statut
Membre
Dernière intervention
4 mai 2018
1
Merci beaucoup! cependant je ne suis pas sure d'avoir le droit d'utiliser cela étant donné qu'on ne l'a pas vu en cours.. :(
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 861 >
Messages postés
5
Date d'inscription
vendredi 4 mai 2018
Statut
Membre
Dernière intervention
4 mai 2018

Aucun cours ne pourra t'apprendre tout un langage comme Java, il y a forcément des choses que tu devras découvrir par toi même, et celles-ci en font partie.

Remarque : pour les enum c'est même surprenant qu'on ne les enseigne pas, c'est vraiment basique.

Après, est-ce que c'est autorisé ou non dans le cadre de ton projet, seul ton prof pourra y répondre, mais faire preuve d'initiative est rarement sanctionné. Après tout, tu es à l'université, plus au collège...
Messages postés
41146
Date d'inscription
mercredi 11 avril 2007
Statut
Modérateur
Dernière intervention
2 août 2021
11 453 >
Messages postés
5
Date d'inscription
vendredi 4 mai 2018
Statut
Membre
Dernière intervention
4 mai 2018

Bonjour
Puisque vous dites dans une alerte le problème résolu, et comme on est jamais aussi bien servi que par soi-même

==> https://www.commentcamarche.net/faq/11365-marquer-un-fil-de-discussion-comme-etant-resolu