|
@ -15,16 +15,14 @@ class Game { |
|
|
constructor(playerAmount, rules) { |
|
|
constructor(playerAmount, rules) { |
|
|
|
|
|
|
|
|
this._cardOnDeck = null; //Karte die auf dem Tisch liegt
|
|
|
this._cardOnDeck = null; //Karte die auf dem Tisch liegt
|
|
|
this._currentPlayer = 0; //Aktueller Spieler Index im Player Array
|
|
|
|
|
|
|
|
|
this._currentPlayer = -1; //Aktueller Spieler Index im Player Array
|
|
|
this._direction = 1; //Spielrichtung
|
|
|
this._direction = 1; //Spielrichtung
|
|
|
this._players = []; //Array mit allen Spielern drin
|
|
|
this._players = []; //Array mit allen Spielern drin
|
|
|
this._cardPool = [] //Pool aus Karten
|
|
|
|
|
|
|
|
|
this._cardPool = []; //Pool aus Karten
|
|
|
|
|
|
|
|
|
this._playerAmount = playerAmount; //Anzahl der Spieler
|
|
|
this._playerAmount = playerAmount; //Anzahl der Spieler
|
|
|
this._rules = rules; //Array mit Regeln für das Spiel
|
|
|
this._rules = rules; //Array mit Regeln für das Spiel
|
|
|
|
|
|
|
|
|
//Spiel einrichten
|
|
|
|
|
|
this.initGame(); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//Richtet das Spiel ein
|
|
|
//Richtet das Spiel ein
|
|
@ -36,23 +34,51 @@ class Game { |
|
|
//Spieler werden erstellt
|
|
|
//Spieler werden erstellt
|
|
|
this.createPlayers(this._playerAmount); |
|
|
this.createPlayers(this._playerAmount); |
|
|
|
|
|
|
|
|
//Die Erste Karte wird auf den Tisch gelegt
|
|
|
|
|
|
this._cardOnDeck = this._cardPool[0]; |
|
|
|
|
|
this._cardPool.splice(0,1); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//Startet das Spiel
|
|
|
//Startet das Spiel
|
|
|
start(){ |
|
|
start(){ |
|
|
|
|
|
if(this._currentPlayer !== -1) return; |
|
|
|
|
|
|
|
|
//Wenn das Spiel noch nicht initialisiert wurde, initialisiere es
|
|
|
//Wenn das Spiel noch nicht initialisiert wurde, initialisiere es
|
|
|
if (this._cardPool === [] || this._players === []) |
|
|
|
|
|
|
|
|
if (this._cardPool.length === 0 || this._players.length === 0) |
|
|
this.initGame(); |
|
|
this.initGame(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let firstCardIndex = 0; |
|
|
|
|
|
let boolFirstSpecial = false; |
|
|
|
|
|
|
|
|
|
|
|
if (this._rules !== null){ |
|
|
|
|
|
if('startCards' in this.rules) |
|
|
|
|
|
for (let i = 0; i < this.players.length; i++) |
|
|
|
|
|
this.players[i].drawCard(this.rules.startCards); |
|
|
|
|
|
|
|
|
|
|
|
if('firstPlaySpecial' in this.rules) |
|
|
|
|
|
boolFirstSpecial = this.rules.firstPlaySpecial; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!boolFirstSpecial){ |
|
|
|
|
|
for (let i = 0; i < this.cardPool.length; i++){ |
|
|
|
|
|
if (!(this.cardPool[i].name === 'R' || this.cardPool[i].name === 'S' |
|
|
|
|
|
|| this.cardPool[i].name === 'CC' || this.cardPool[i].name === '+2' |
|
|
|
|
|
|| this.cardPool[i].name === '+4')){ |
|
|
|
|
|
firstCardIndex = i; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//Die Erste Karte wird auf den Tisch gelegt
|
|
|
|
|
|
this._cardOnDeck = this._cardPool[firstCardIndex]; |
|
|
|
|
|
this._cardPool.splice(firstCardIndex,1); |
|
|
|
|
|
|
|
|
|
|
|
//Karten Funktion der Karte auf dem Deck ausführen
|
|
|
|
|
|
this.cardOnDeck.putSelf(); |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//
|
|
|
//
|
|
@ -114,20 +140,26 @@ class Game { |
|
|
|
|
|
|
|
|
//Beendet den Zug des aktuellen Spielers und beginnt den Zug des nächsten Spielers
|
|
|
//Beendet den Zug des aktuellen Spielers und beginnt den Zug des nächsten Spielers
|
|
|
nextTurn(){ |
|
|
nextTurn(){ |
|
|
|
|
|
|
|
|
//Testet, ob Spiel Gewonnen
|
|
|
//Testet, ob Spiel Gewonnen
|
|
|
for (let i = 0; i < this._players.length; i++){ |
|
|
|
|
|
if(this._players[i].hand.length <= 0){ |
|
|
|
|
|
|
|
|
for (let i = 0; i < this.players.length; i++){ |
|
|
|
|
|
if(this.players[i].hand.length <= 0){ |
|
|
|
|
|
|
|
|
//Breche den Loop ab
|
|
|
//Breche den Loop ab
|
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//Wenn Zug nicht der Erste vom ganzen Spiel
|
|
|
|
|
|
if(this.currentPlayer !== -1){ |
|
|
|
|
|
|
|
|
//Aktuellen Spieler kann, darf nicht mehr Spielen
|
|
|
//Aktuellen Spieler kann, darf nicht mehr Spielen
|
|
|
this.players[this._currentPlayer].canPlay = false; |
|
|
|
|
|
|
|
|
this.players[this.currentPlayer].canPlay = false; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
//nächster Spieler wird gesetzt
|
|
|
//nächster Spieler wird gesetzt
|
|
|
this._currentPlayer = this.nextPlayer(); |
|
|
|
|
|
|
|
|
this.currentPlayer = this.nextPlayer(); |
|
|
|
|
|
|
|
|
//Aktualisiere das Deck des aktuellen Spielers, welche Karten er legen kann
|
|
|
//Aktualisiere das Deck des aktuellen Spielers, welche Karten er legen kann
|
|
|
this.refreshCanPutCard(); |
|
|
this.refreshCanPutCard(); |
|
@ -137,7 +169,7 @@ class Game { |
|
|
//Testet alle Karten des aktuellen Spielers in seiner Hand, ob er sie legen kann
|
|
|
//Testet alle Karten des aktuellen Spielers in seiner Hand, ob er sie legen kann
|
|
|
refreshCanPutCard(){ |
|
|
refreshCanPutCard(){ |
|
|
//Deck des aktuellen Spielers
|
|
|
//Deck des aktuellen Spielers
|
|
|
let currentPlayerCards = this._players[this._currentPlayer].hand; |
|
|
|
|
|
|
|
|
let currentPlayerCards = this.players[this.currentPlayer].hand; |
|
|
|
|
|
|
|
|
//Gehe alle Karten vom Deck durch
|
|
|
//Gehe alle Karten vom Deck durch
|
|
|
for(let i = 0; i < currentPlayerCards.length; i++){ |
|
|
for(let i = 0; i < currentPlayerCards.length; i++){ |
|
@ -167,6 +199,8 @@ class Game { |
|
|
|
|
|
|
|
|
//Errechne, wer der nächste Spieler ist
|
|
|
//Errechne, wer der nächste Spieler ist
|
|
|
nextPlayer(){ |
|
|
nextPlayer(){ |
|
|
|
|
|
if(this.currentPlayer === -1) |
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
//Anhand der Spielrichtung errechnen
|
|
|
//Anhand der Spielrichtung errechnen
|
|
|
if(this._direction === 1) |
|
|
if(this._direction === 1) |
|
@ -196,11 +230,16 @@ class Game { |
|
|
this._cardOnDeck = card; |
|
|
this._cardOnDeck = card; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//Gibt den aktuellen Spieler zurück
|
|
|
|
|
|
|
|
|
//Gibt den Index des aktuellen Spielers im players Array zurück
|
|
|
get currentPlayer(){ |
|
|
get currentPlayer(){ |
|
|
return this._currentPlayer; |
|
|
return this._currentPlayer; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//Gibt das Objekt des aktuellen Spielers zurück
|
|
|
|
|
|
get currentPlayerInstanz(){ |
|
|
|
|
|
return this._players[this.currentPlayer]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
set currentPlayer(player){ |
|
|
set currentPlayer(player){ |
|
|
this._currentPlayer = player |
|
|
this._currentPlayer = player |
|
|
} |
|
|
} |
|
@ -214,6 +253,10 @@ class Game { |
|
|
this._direction = direction; |
|
|
this._direction = direction; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
get rules(){ |
|
|
|
|
|
return this._rules; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//Exportiert Modul Game
|
|
|
//Exportiert Modul Game
|