Créer un jeu [Résolu]

Signaler
Messages postés
139
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 juin 2020
-
Messages postés
139
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 juin 2020
-
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.

1 réponse

Messages postés
16039
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 septembre 2020
2 676
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));
}

Messages postés
139
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 juin 2020

Merci KX j'ai réussi grâce à toi !!