Jeu

Résolu/Fermé
Signaler
-
 cc -
Bonjour,

J'ai crée en java un petit programme de jeu style jeu de l'oie.
Deux pions qui avancent l'un apres l'autre.
Pour le lancement du dé, j'ai mis la méthode toto.auSort()
Donc le pion avance petit à petit suivant le nombre de cases tirées au sort.

Mon problème c'est le calcul que je fais dans ma boucle :

while (place<51){

for (int joueur=1; joueur<=nbre; joueur++){

System.out.println ("Joueur " + joueur + " : tirage au sort en cours...");

tirage= TOTO.auSort(1,6);

System.out.println (" Le dé affiche : " + tirage);

place1=tirage+place;

place=place1;

System.out.println (" Le pion se trouve en case numéro : " + place);


Comment faire pour que le calcul se fasse joueur par joueur ?
ex : 1er tour :
lancement du dé pour joueur 1 : 3
position1 =3 ---> ok

lancement dé du joueur 2 : 4
position2 =7 (au lieu de 4)

2 eme tour :
lancement dé joueur 1 : 5
position 1 = 12 (au lieu 8)

lancement dé du joueur 2 : 2
position2= 14 (au lieu de 6)

merci pour votre aide,
CC

1 réponse

Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
106
Hello, fais voir ton code mais je parie que tu as des variables static.

As-tu fais différentes classes ?
0
Bonjour greg

Je suis débutante et il s'agit donc d'un exercice simple. Oui je n'ai crée qu'une seule classe à ce programme (String args[] )
Je suis sensée faire déplacer le pion dans le tableau mais je ne sais pas comment faire....
0
public class jeuOie{
public static void main(String[] args) {

int nbre=0;
int place=0;
int tirage=0;
int place1;

System.out.println ("veuillez choisir le nombre de pions (moins de 10)");
nbre=TOTO.readInt();
if (nbre<2 || nbre>10 ){
System.out.println (" erreur ! veuillez choisir un nombre compris entre 2 et 10 ");
}
else {
System.out.println ("Vous avez choisi" + " " + nbre + " " + " pions");
}
int tab[] = new int[50];
while (place<51){
for (int joueur=1; joueur<=nbre; joueur++){
System.out.println ("Joueur " + joueur + " : tirage au sort en cours...");
tirage= TOTO.auSort(1,6);
System.out.println (" Le dé affiche : " + tirage);
place1=tirage+place;
place=place1;
System.out.println (" Le pion se trouve en case numero : " + tab[place]);

//if (place>51){
//System.out.println ("le gagnant est le joueur :" + joueur );}
}
}
}
}


Merci pour ton aide,
0
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
106
Alors d'abord, si jamais l'utilisateur saisie un nbr de joueur < 2 ou > 10 ton programme ne s'arrête pas et tu aura une erreur derrière.

Ensuite ton soucis viens des lignes
place1=tirage+place; 
    place=place1; 


Exemple en faisant une petite trace :

Au premier tour pour le joueur 1
place = 0
disons que tirage donne 4 on a donc
place1 = 4 + 0 = 4
et
place = place1 = 4

Ensuite pour le joueur 2
place = 4
et par exemple tirage donne 2,
place1 = 2 + 4 = 6 


Autrement dis ici tu ne peux conserver la même variable pour tous tes joueurs. L'idéal ici serai de créer une classe Joueur et donc un nouvel objet avec dedans des méthodes
getPlace()
qui retournerai la place courante dans le tableau d'un pions.
0
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017
106
Voici un exemple qui n'utilise volontairement pas de tableau d'entiers pour le plateau mais qui utilises un type Joueur qui a été défini. Je t'invite à essayer de comprendre le code pour que tu puisses faire TA version en utilisant un tableau. Je reste bien sur si tu as besoin d'aide et d'explication :)

public class Joueur {

 private int id;
 private int place;
 
 public Joueur(int id) {
  this.id = id;
  this.place = 0;
 }
 
 public int getID(){
  return this.id;
 }

 public int getPlace() {
  return place;
 }

 public void setPlace(int place) {
  this.place = place;
 }

}


import java.util.Random;
import java.util.Scanner;

public class jeuOie{ 

 public static void main(String[] args) { 
  //Un scanner sert à lire des données saisies par l'utilisateur
  Scanner s = new Scanner(System.in);
  System.out.println ("veuillez choisir le nombre de pions (moins de 10)"); 
  int nbr = s.nextInt();
  //Initialisation du plateau de jeu
  Joueur[] plateau = new Joueur[nbr];
  //On créé les joueurs
  for (int i = 0; i < nbr; i++){
   Joueur j = new Joueur(i + 1); //On fait i + 1 pour avoir 1 < ID < nbr, on pourrait aussi démarrer la boucle à 1 et changer la condition
   plateau[i] = j;
  }
  //Si nbr < 2 || nbr > 10 on quitte avec un message d'erreur
  if (nbr < 2 || nbr > 10){
   System.out.println("Erreur, il doit y avoir au moins 2 et au plus 10 joueurs pour jouer");
   System.exit(0);
  }
  //Utilisation d'un random pour le jet de dés
  Random ran = new Random();
  //Utilisation d'un booléen pour le final
  boolean fin = false;
  //Lancement du jeu
  while (!fin){
   for (int i = 0; i < nbr; i++){
    int dé = ran.nextInt(6) + 1; //Car l'entier généré est compris entre 0 inclus et 6 exclus Cf. Javadoc Random
    Joueur j = plateau[i];
    j.setPlace(j.getPlace() + dé);
    fin = (j.getPlace() >= 51);
    if (fin){
     System.out.println("Le joueur "+j.getID()+" a gagné !");
     break;
    }
   }
  }
 } 
} 
0
>
Messages postés
592
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
3 juin 2017

Bonjour Greg

Tout d'abord je voudrai encore te remercier pour ton aide.
Le soucis c'est que je n'ai pas encore appris les méthodes car je débute complètement en Java et que cet exo nous a été demandé avec nos connaissances : tableau et boucles imbriquées...
J'ai donc regardé ton deuxième programme que je comprends mieux que le premier. Peux tu me dire toutefois ce que sont j.setPlace et j.getPlace ?
je ne vais pas pouvoir les utiliser car le prof verra que ce n'est pas de mon niveau et que je me suis faite aidée. LOL
Pour mon erreur sur la boucle, j'ai compris. Et j'avais vu que le calcul n'était pas correct, mais je n'arrivais pas à distinguer le calcul pour chaque joueur simultané.

ID = utilisateur ?
merci
0