Créer un jeu [Résolu]

Messages postés
77
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
5 décembre 2019
-
Bonjour,
J'essaye de réaliser un jeu cependant j'ai un problème. Dans le jeu que j'essaye de crée il y a 22 cartes différentes, quand un joueur pioche des cartes, les cartes piocher ne peuvent pas être piocher par le joueur adverse (normalement) , or c'est ce que je fait ...
Je pensais alors faire que dès que une carte est pioché la supprimé du jeu mais mon code provoque l'erreur : "java.lang.reflect.InvocationTargetException<4 internals calls"

Mon code est


public class Jeu {
    private List<Carte> jeu = FXCollections.observableArrayList();

    public Jeu() {
        jeu.add(new Carte("1", 1));
        jeu.add(new Carte("2", 2));
        jeu.add(new Carte("3", 3));
        jeu.add(new Carte("4", 4));
        jeu.add(new Carte("5", 5));
        jeu.add(new Carte("6", 6));
        jeu.add(new Carte("7", 7));
        jeu.add(new Carte("8", 8));
        jeu.add(new Carte("9", 9));
        jeu.add(new Carte("10", 10));
        jeu.add(new Carte("11", 11));
        jeu.add(new Carte("12", 12));
        jeu.add(new Carte("13", 13));
        jeu.add(new Carte("14", 14));
        jeu.add(new Carte("14", 15));
        jeu.add(new Carte("16", 16));
        jeu.add(new Carte("17", 17));
        jeu.add(new Carte("18", 18));
        jeu.add(new Carte("19", 19));
        jeu.add(new Carte("20", 20));
        jeu.add(new Carte("21", 21));
        jeu.add(new Carte("22", 22));
    }

    public void melangerJeu() {
        Collections.shuffle(jeu);
    }
/*
   Iterator<E> it = c.iterator() ;
   while(it.hasNext()){
      E  o = it.next();
 */

    public List<Carte> doRandom(int nb_carte) {
        Jeu jeu1 = new Jeu();
        Jeu jeu2 = new Jeu();
        jeu1.melangerJeu();
        jeu1.jeu = jeu1.jeu.subList(0, nb_carte);

        Iterator<Carte> itJeu1 = jeu1.jeu.iterator();
        while (itJeu1.hasNext()) {
            Iterator<Carte> itJeu2 = jeu2.jeu.iterator();
            while (itJeu2.hasNext()) {
                if (itJeu1.next().getValeur() == itJeu2.next().getValeur()) {
                    jeu2.jeu.remove(itJeu2.next());
                }
            }
        }


        return jeu1.jeu;
    }
}




Merci d'avance pour vos réponses.
Cordialement.
Afficher la suite 

1 réponse

Messages postés
16091
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 décembre 2019
2471
0
Merci
Bonjour,

Tu devrais éviter de manipuler directement du code graphique (Java FX) dans le mécanisme de ton jeu.
Il faudrait avoir le jeu d'une part, son affichage d'autre part.

Tu peux par exemple considérer cette méthode :
public static List<List<Integer>> distributionCartes(int nbCartes, int nbJoueurs) {
    List<Integer> cartes = new ArrayList<>(nbCartes);
    for (int i = 0; i < nbCartes; i++) {
        cartes.add(i);
    }
    Collections.shuffle(cartes);
    List<List<Integer>> result = new ArrayList<>(nbJoueurs);
    for (int i = 0, n = nbCartes / nbJoueurs + 1; i < nbJoueurs; i++) {
        result.add(new ArrayList<>(n));
    }
    for (int i = 0; i < nbCartes; i++) {
        result.get(i % nbJoueurs).add(cartes.get(i));
    }
    return result;
}

public static void main(String[] args) {
    System.out.println(distributionCartes(22, 2));
}

Hamster18
Messages postés
77
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
5 décembre 2019
-
Merci KX j'ai réussi grâce à toi !!
Commenter la réponse de KX