Jeu de plateau

Fermé
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - Modifié par KX le 3/12/2016 à 13:14
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017 - 7 déc. 2016 à 01:04
Bonjour, à tous voilà je suis entrain de codé un petit jeux de société qui se joue a 2 , toute fois je suis confronté à un petit problème quant à ma méthode public static String ChangerJoueur();
par exemple quand le joueur "rouge" a fini son tour j'aimerais que se soit au tour de mon joueur "bleu" de jouer et vice versa , j'ai donc crée une variable temporaire qui me permetra de recueillir la valeur du joueur rouge ou bleu mais ma méthode présente des failles lors de l'exécution autrement dis c'est toujours le joueur rouge qui joue , une âme charitable serait-il en mesure de m'aider ? Merci.
A voir également:

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
1 déc. 2016 à 22:36
Bonjour,

Sans code on ne va pas aller bien loin...
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
2 déc. 2016 à 02:20
Merci pour votre réponse ,
 
 public static String joueurCourant= "Rouge"; // par défaut c'est le rouge qui commence la parti 
  String blanc = "Rouge" ;
   String noir = "Bleu";
   if(joueurCourant == Rouge)
   joueurCourant =  Bleu;
    else{
   joueurCourant = Rouge;
   }
   return joueurCourant;
   }
j'avais penser a utiliser une variable de temporaire qui me permettrais de recueillir la valeurs de mes variable mais j'ai du mal a matérialiser ma méthode , ainsi qu'avec le type de retour sachant que c'est une String , je me doute que dans se cas je devrais utiliser le "equals" plutôt que l'opérateur == (pour évité de regarder la référence mémoire) mais sa reste tout de même ambiguë. .
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
2 déc. 2016 à 11:40
Ton code est très confus (et incomplet).

blanc = "Rouge";
noir = "Bleu";

C'est un peu bizarre, à quoi ça correspond d'avoir des joueurs blanc qui sont rouge et noir qui sont bleu ? C'est a minima très maladroit...

if (joueurCourant == Rouge)
    joueurCourant =  Bleu;
else {
    joueurCourant = Rouge;
}

Tu l'as dis, deux String devraient être comparés par la méthode equals, même si ici ça pourrait fonctionner grâce à un mécanisme très technique que tu ne maîtrises sans doute pas (les String intern).

Autre point obscur : que valent les variables Bleu et Rouge ? En tout cas ton extrait de code ne l'indique pas.

Je t'inviterais à regarder comment fonctionnent les enum en Java, il semble que cela soit plus pertinent qu'un String pour manipuler tes joueurs.

https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
2 déc. 2016 à 17:49
Merci pour votre réflexion Oui , j'ai oublié de changer le nom de mes variables , bien que sa n’apporte rien au code en terme d’efficacité si ce n'est qu'une clarté à ne pas négligé en gros

public static String changementDeJoueur(){
public static String joueurCourant= "Rouge"; // par défaut c'est le rouge qui commence la parti 
  String rouge = "Rouge" ;
   String bleu = "Bleu";
   if(joueurCourant == Rouge)
   joueurCourant =  Bleu;
    else{
   joueurCourant = Rouge;
   }
   return joueurCourant;
   }

"que valent les variables Bleu et Rouge " je n'comprends pas votre question :/

Mais pour la comparaison de String avec l'opérateur == sa regarde l'égalité révérenciel et pas structurelle non ? donc comment cela pourrait il fonctionner ce mécanisme de "String interne" et dans quelle cas ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
2 déc. 2016 à 18:06
"que valent les variables Bleu et Rouge " je n'comprends pas votre question :/
Avant tu avais des variables
blanc
et
noir
que tu as désormais renommé
rouge
et
bleu
(avec un
r
et un
b
minuscule) mais on ne sait toujours pas quelle valeur tu donnes aux variables
Rouge
et
Bleu
(avec un
R
et un
B
majuscule) que tu utilises dans ton
if
... Java est sensible à la casse, donc
rouge
et
Rouge
ce n'est pas la même variable (idem pour
bleu
et
Bleu
)

mécanisme de "String interne"
Lorsque je parle de String "intern", je fais référence au résultat de la méthode
intern()
de la classe String :
https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#intern--
Comme indiqué dans la documentation "All literal strings and string-valued constant expressions are interned". Ici c'est ton cas, quand tu initialises
"Rouge"
dans
joueurCourant
c'est un littéral donc il est intern, au même titre que
"Rouge"
quand tu initialises
rouge
. Donc une comparaison de
joueurCourant
pourra se faire avec
==
sur la variable
rouge
(r minuscule).
En revanche, comme je ne sais pas ce que vaut
Rouge
(avec un R majuscule) je ne peux rien dire sur la comparaison
joueurCourant == Rouge
. Mais dans le mesure où tu ne sais pas que ce mécanisme de String intern existe, cela relève de la chance si ça fonctionne. La seule manière propre de faire une comparaison de deux objets, c'est la méthode equals.

Et j'insiste sur le fait que dans ton cas, choisir un String comme type de donnée est une mauvaise idée. Un enum aurait beaucoup plus de sens (et tu pourrais utiliser des
==
sans te poser aucune question).
0
Jiko-java Messages postés 186 Date d'inscription dimanche 25 septembre 2016 Statut Membre Dernière intervention 22 juillet 2017
2 déc. 2016 à 19:01
D'accord je vois merci , en ce qui concerne mes branchements où j'utiliser rouge et bleu
les voici :
public static void deplacement(){
if(tableau[choix] == " ")
      System.out.println("le joueur " + joueurCourant + " doit passez son tour"); if(changementDeJoueur() != tableau[choix])
      System.out.println("vous devez passer votre tour vous avez choisi un mauvais pion à deplacer"); 
}


donc selon l'état de la condition JoueurCourant prendras Rouge ou bleu, donc mon jeux se joue a deux , les 2 joueurs possèdent chacun 3 jetons si un des joueurs essaie de déplacer un jeton qu'il ne possèdent pas sur une case son tour passé , par conséquent c'est à l'autre de jouer .. pour ce faire j'utilise ma methode changementDeJoueur() de joueur qui renverras une String que je compare avec la tableau qui est aussi une String mais qui prend un entier "choix". Pour l'Utilisation de Enum pouvez vous m'en dire d'avantage quant à sa fonctionnalité ? et quant au type de retour dans l'utilisation d'une méthode merci
0