You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//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
}
//Lässt den Spieler eine Anzahl "amount" an Karten ziehen
drawCard(amount){
//Ziehe so viele Karten, wie amount übergeben wurde
for (let i = 0; i < amount; i++){
//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);
}
if(amount === 1) this.game.nextTurn();
}
//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();
}
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; }
}
|