Créer un jeu

Résolu
Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention   -  
Hamster18 Messages postés 176 Date d'inscription   Statut Membre Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 176 Date d'inscription   Statut Membre Dernière intervention  
 
Merci KX j'ai réussi grâce à toi !!
0