Créer un jeu

Résolu/Fermé
Hamster18 Messages postés 177 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 - Modifié le 1 déc. 2019 à 17:03
Hamster18 Messages postés 177 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 - 5 déc. 2019 à 15:24
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

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié le 1 déc. 2019 à 22:53
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));
}

0
Hamster18 Messages postés 177 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
5 déc. 2019 à 15:24
Merci KX j'ai réussi grâce à toi !!
0