Projet java : jeu de l'oie

Fermé
ophlapetite Messages postés 5 Date d'inscription vendredi 4 mai 2018 Statut Membre Dernière intervention 4 mai 2018 - 4 mai 2018 à 01:39
baladur13 Messages postés 46395 Date d'inscription mercredi 11 avril 2007 Statut Modérateur Dernière intervention 24 avril 2024 - 6 mai 2018 à 15:20
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
A voir également:

4 réponses

ophlapetite Messages postés 5 Date d'inscription vendredi 4 mai 2018 Statut Membre Dernière intervention 4 mai 2018 1
Modifié le 4 mai 2018 à 08:47
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
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 325
Modifié le 4 mai 2018 à 02:19
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.
0
ophlapetite Messages postés 5 Date d'inscription vendredi 4 mai 2018 Statut Membre Dernière intervention 4 mai 2018 1
4 mai 2018 à 02:33
Merci!

du coup ce qui me bloque c'est au moment d’exécuter les actions des différentes cases du jeu
0
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 325
4 mai 2018 à 01:41
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 mai 2018 à 09:32
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 ?)
0
ophlapetite Messages postés 5 Date d'inscription vendredi 4 mai 2018 Statut Membre Dernière intervention 4 mai 2018 1
Modifié le 4 mai 2018 à 11:22
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..
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié le 4 mai 2018 à 16:41
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.");
    }
}

0
ophlapetite Messages postés 5 Date d'inscription vendredi 4 mai 2018 Statut Membre Dernière intervention 4 mai 2018 1
4 mai 2018 à 13:22
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.. :(
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > ophlapetite Messages postés 5 Date d'inscription vendredi 4 mai 2018 Statut Membre Dernière intervention 4 mai 2018
4 mai 2018 à 13:41
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...
0
baladur13 Messages postés 46395 Date d'inscription mercredi 11 avril 2007 Statut Modérateur Dernière intervention 24 avril 2024 13 219 > ophlapetite Messages postés 5 Date d'inscription vendredi 4 mai 2018 Statut Membre Dernière intervention 4 mai 2018
6 mai 2018 à 15:20
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/infos/25917-marquer-un-fil-de-discussion-comme-etant-resolu/
0