Jeu de guerre sur console
Fermé
Nelson_EU
Messages postés
3
Date d'inscription
samedi 12 décembre 2015
Statut
Membre
Dernière intervention
13 décembre 2015
-
12 déc. 2015 à 22:57
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 13 déc. 2015 à 14:09
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 13 déc. 2015 à 14:09
A voir également:
- Waptrick jeux de guerre
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick xxx - Télécharger - Divers TV & Vidéo
- Waptrick film de guerre - Forum Cinéma / Télé
- Waptrick jeux java itel - Forum Mobile
- Waptrick jeux pes 2016 java ✓ - Forum Jeux PC
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
12 déc. 2015 à 23:08
12 déc. 2015 à 23:08
Bonjour,
Je ne sais pas comment tu as mis en place le système de nouvelle partie, mais si tu as ce genre d'effet de bords c'est probablement que tu as essayés d'effacer les données de la partie précédente et qu'il t'en manque un morceau, le plus simple et sûr aurait été de ne pas réutiliser les données de la première partie mais de les recréer de toute pièce comme tu l'as fait la première fois.
Par exemple, tu as une classe Game avec un attribut boolean[] privileges; tu as un objet Game g; et une méthode reset() qui parcourt privileges pour tout remettre à false. Ce genre de code est pas terrible. Il vaut mieux oublier l'objet Game g, et le reconstruire complètement avec un new Game() et ce pour chaque partie, la première, comme les suivantes.
Je ne sais pas comment tu as mis en place le système de nouvelle partie, mais si tu as ce genre d'effet de bords c'est probablement que tu as essayés d'effacer les données de la partie précédente et qu'il t'en manque un morceau, le plus simple et sûr aurait été de ne pas réutiliser les données de la première partie mais de les recréer de toute pièce comme tu l'as fait la première fois.
Par exemple, tu as une classe Game avec un attribut boolean[] privileges; tu as un objet Game g; et une méthode reset() qui parcourt privileges pour tout remettre à false. Ce genre de code est pas terrible. Il vaut mieux oublier l'objet Game g, et le reconstruire complètement avec un new Game() et ce pour chaque partie, la première, comme les suivantes.
Nelson_EU
Messages postés
3
Date d'inscription
samedi 12 décembre 2015
Statut
Membre
Dernière intervention
13 décembre 2015
13 déc. 2015 à 13:40
13 déc. 2015 à 13:40
J'ai cree une methode reset() qui est directement appelee dans le main quand le programme se lance.
Cette methode ne fonctionne pourtant pas. Pourquoi ?
Methode privilege:
Et dans le main j'ai appelee la methode comme ceci: EquipeGuerriers.reset();
Une idee du probleme ?
Cette methode ne fonctionne pourtant pas. Pourquoi ?
public static void reset(){ barbare.setPrivileges(2); archer.setPrivileges(3); mage.setPrivileges(3); geant.setPrivileges(1); dragon.setPrivileges(1); sorciere.setPrivileges(2); }
Methode privilege:
public void setPrivileges(int privilege) { for (int i = 0; i < tableDesPrivileges.length; i++) { if (i == privilege - 1) { this.privileges[i] = true; } else { this.privileges[i] = false; } } }
Et dans le main j'ai appelee la methode comme ceci: EquipeGuerriers.reset();
Une idee du probleme ?
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
13 déc. 2015 à 14:09
13 déc. 2015 à 14:09
Mon explication n'était peut-être pas clair hier :
Quand je regarde ta méthode EquipeGuerriers.reset(); je vois qu'elle est static, c'est à dire que tu ne construits pas d'objet pour avoir une équipe, mais que c'est la classe ton équipe et ça c'est pas bon. Ça veut dire que barbare, archer, mage, etc. sont static aussi, d'où les effets de bords.
Il vaut mieux avoir un objet EquipeGuerrier, que tu instancie avec un new EquipeGuerriers(), qui initialise les privilèges de barbare, archer, mage etc. localement à cette instance d'EquipeGuerriers, de sorte que quand tu recommences ton jeu, tu recréés une nouvelle EquipeGuerriers construites de zéro, sans dépendre des modifications précédentes.
De manière générale, les attributs static dans une classe sont censés être relativement peu fréquent, cela sert dans certains cas, mais ils ne doivent pas remplacer les attributs non-static liés aux objets de la classe.
Par exemple, tu as [...] une méthode reset() qui parcourt privileges pour tout remettre à false. Ce genre de code est pas terrible. Il vaut mieux oublier l'objet Game g, et le reconstruire complètement avec un new Game() [...]
Quand je regarde ta méthode EquipeGuerriers.reset(); je vois qu'elle est static, c'est à dire que tu ne construits pas d'objet pour avoir une équipe, mais que c'est la classe ton équipe et ça c'est pas bon. Ça veut dire que barbare, archer, mage, etc. sont static aussi, d'où les effets de bords.
Il vaut mieux avoir un objet EquipeGuerrier, que tu instancie avec un new EquipeGuerriers(), qui initialise les privilèges de barbare, archer, mage etc. localement à cette instance d'EquipeGuerriers, de sorte que quand tu recommences ton jeu, tu recréés une nouvelle EquipeGuerriers construites de zéro, sans dépendre des modifications précédentes.
De manière générale, les attributs static dans une classe sont censés être relativement peu fréquent, cela sert dans certains cas, mais ils ne doivent pas remplacer les attributs non-static liés aux objets de la classe.
Modifié par Nelson_EU le 12/12/2015 à 23:36
En gros j'ai une classe Guerrier (de laquelle j'instance mes differents guerriers: barbare, archer,...), une classe EquipeGuerriers (de laquelle j'instance mes deux equipes), une classe Combat qui contient le main, classe qui "gere" vraiment le jeu. Mes nouvelles parties ne sont donc pas instancees, il faut run le programme pour lancer une partie...
Edit: Ma table de privilege se trouve dans la classe guerrier, elle est propre a chaque guerrier et fait partie du constructeur (lorsque je cree par exemple mon barbare, je lui donne un nom, un nombre de PV, et le numero de son privilege