//Klasse Player für Spieler einer Uno Runde import {CARD_COLORS} from "./uno.js"; export default class Player { //Erstellt ein Spieler mit einem Namen und dem Spiel, in dem er teilnimmt constructor(name, gameInstanz) { this._game = gameInstanz; //Spiel, worin der Spieler ist this._name = name; //Name des Spielers this._turn = false; //Ob Spieler gerade am Zug this._hand = []; //Deck des Spielers this._canPlay = false //Ob spieler gerade Karte legen kann this._mustSayUno = false; } //Lässt den Spieler eine Anzahl "amount" an Karten ziehen drawCard(amount, nextTurn, anim) { if (this.game.stack !== 0) { if (!this.game.currentPlayerInstanz.mustSayUno) { let cards = this.game.stack; this.game.stack = 0; if (this.game.cardOnDeck.name === '+4') this.drawCard(cards, true, true); else this.drawCard(cards, false, true); return; } } //Ziehe so viele Karten, wie amount übergeben wurde for (let i = 0; i < amount; i++) { if (anim) { setTimeout(() => { //Füge die erste Karte aus cardPool der Hand des Spielers hinzu this.hand.push(this.game.cardPool[0]); //Lösche die erste Karte aus cardPool this.game.cardPool.splice(0, 1); this.game.style.showPlayerDeck(this, false, true, false); }, 200 + 500 * (i)); } else { //Füge die erste Karte aus cardPool der Hand des Spielers hinzu this.hand.push(this.game.cardPool[0]); //Lösche die erste Karte aus cardPool this.game.cardPool.splice(0, 1); } } setTimeout(() => { this.game.refreshCanPutCard(); this.game.style.showPlayerDeck(this.game.currentPlayerInstanz, true, false, false); if (nextTurn) { this.game.nextTurn(); } }, 300 + 500 * amount); } //Lässt den Spieler eine Karte in seiner Hand legen //Parameter: Index vom Deck des Spielers, wo die Karte liegt putCard(index) { //Karte muss hinterlegt haben, dass sie gelegt werden kann if (!this.turn) return; if (!this.hand[index].canPut) return; if (this.turn === false) return; //Wenn eine Karte auf dem Tisch liegt if (this.game.cardOnDeck != null) { //Wenn eine "NONE" Color Karte gelegt wurde, resette die Farbe auf "NONE" if (this.game.cardOnDeck.name === "CC" || this._game.cardOnDeck.name === "+4") this.game.cardOnDeck.color = CARD_COLORS[0]; //Füge die Karte dem Pool wieder hinzu this.game.cardPool.push(this._game.cardOnDeck); } //Karte in der Hand wird auf den Tisch gelegt this.game.cardOnDeck = this._hand[index]; //Karte wird aus dem Deck des Spielers entfernt this.hand.splice(index, 1); //führe Funktion der Karte aus this.game.cardOnDeck.putSelf(); } sayUno() { this._mustSayUno = false; } selectColor() { //Todo: Spieler Möglichkeit geben Farbe zu wählen, nicht random return CARD_COLORS[Math.floor(Math.random() * 4) + 1]; } //Gibt den Namen eines Spielers zurück get name() { return this._name; } //Gibt zurück, ob der Spieler am Zug ist get turn() { return this._turn; } //Setzt, dass der Spieler gerade am Zug ist oder nicht set turn(bool) { this._turn = bool; } //Gibt zurück, ob der Spieler eine Karte legen kann get canPlay() { return this._canPlay; } set canPlay(bool) { this._canPlay = bool; } //Gibt das SpielerDeck zurück get hand() { return this._hand; } get game() { return this._game; } get mustSayUno() { return this._mustSayUno; } set mustSayUno(bool) { this._mustSayUno = bool; } }