Pour mon entraînement JavaScript, je suis en train de développer un petit jeu de cartes et j’essaie de ranger le gros du code js dans des bibliothèques.

J’ai une classe greenbaize (« tapis vert »), une classe seat (place) et une classe player (joueur). Les seat « possèdent » les players, c’est-à-dire, une propriété de la classe seat est player, qui prend des instances de la classe player. Les instances de la classe seat sont regroupées dans un array. Le tout est géré dans la classe greenbaize.

Voici à quoi ressemble la méthode init de greenbaize

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    function init() {
        let positionsNames = getPositionsNames(seatscount);
        for (let i = 0; i < seatscount; i++) {
            let index = getRandomInt(0, population.length);
            let p = new player(
                population[index].name,
                population[index].type,
                population[index].activeFactor,
                population[index].agressionFactor);
            console.log(p.getName());
            let s = new seat(i, positionsNames[i], p);
            seats.push(s);
            population.splice(index, 1);
        }
        seats.forEach(function (item) {
            console.log(item.getPositionName(), item.getPlayer().getName());
        })
    }
Seat et position ce n’est pas la même chose. Un seat est associé à un joueur tout au long de la partie, c’est son siège. La position c’est en fonction du donneur (le dealer, le cut-off, la blinde, etc.), et change donc à chaque coup.

Donc, je fais une boucle d’autant d’itérations que de sièges occupés. J’instancie une classe seat autant de fois, et je l’ajoute à l’array des sièges. Jusqu’ici, tout va bien.
Le problème vient avec les joueurs. Diverses console.log() me permettent de dire qu’il y a bien un player distinct qui est créé à chaque itération, mais qu’il écrase le précédent sur toutes les instances seat.
A l’arrivée, j’ai bien un array d’objets seat distincts, mais l’attribut player de tous ces seat pointent vers une même instance de player.
Dans l’hypothèse où j’ai bien compris ce qui se passe.

Les deux console.log() du code donnent le résultat suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Molly Bloom
Lily Candide
James Bond
Doyle Brunson
Dealer Doyle Brunson
Blind Doyle Brunson
Middle Position Doyle Brunson
Cut-off Doyle Brunson
Ce qu’il faudrait, évidemment, c’est qu’une nouvelle instance de player n’écrase pas les autres.
Si vous avez une idée, je suis preneur.
Merci d’avance