diff --git a/uno/node/js/Game.js b/uno/node/js/Game.js index 411714c..920e5be 100644 --- a/uno/node/js/Game.js +++ b/uno/node/js/Game.js @@ -16,7 +16,7 @@ class Game { this._cardOnDeck = null; //Karte die auf dem Tisch liegt this._currentPlayer = 0; //Aktueller Spieler Index im Player Array - this._direction = 0; //Spielrichtung + this._direction = 1; //Spielrichtung this._players = []; //Array mit allen Spielern drin this._cardPool = [] //Pool aus Karten @@ -124,7 +124,7 @@ class Game { } //Aktuellen Spieler kann, darf nicht mehr Spielen - this._currentPlayer.canPlay = false; + this.players[this._currentPlayer].canPlay = false; //nächster Spieler wird gesetzt this._currentPlayer = this.nextPlayer(); diff --git a/uno/node/js/Player.js b/uno/node/js/Player.js index 3dcf9d0..0ada326 100644 --- a/uno/node/js/Player.js +++ b/uno/node/js/Player.js @@ -1,5 +1,6 @@ //Klasse Player für Spieler einer Uno Runde const uno = require("./uno"); +const {CARD_COLORS} = require("./uno"); class Player { @@ -57,6 +58,12 @@ class Player { 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; @@ -77,6 +84,10 @@ class Player { return this._canPlay; } + set canPlay(bool){ + this._canPlay = bool; + } + //Gibt das SpielerDeck zurück get hand(){ return this._hand; diff --git a/uno/node/js/cards/special/ChooseColor.js b/uno/node/js/cards/special/ChooseColor.js index c731034..68cdaf9 100644 --- a/uno/node/js/cards/special/ChooseColor.js +++ b/uno/node/js/cards/special/ChooseColor.js @@ -17,9 +17,8 @@ class ChooseColor extends Card { //Führt eigene Logik aus (Wählt farbe aus) putSelf() { - //Todo: Spieler Möglichkeit geben Farbe zu wählen, nicht random //Setzt die Farbe der Karte auf eine Random Farbe - this._color = CARD_COLORS[Math.floor(Math.random() * 4) + 1]; + this._color = this.game.players[this.game.currentPlayer].selectColor(); //Logik von Card.js ausführen super.putSelf(); diff --git a/uno/node/js/cards/special/PlusAmount.js b/uno/node/js/cards/special/PlusAmount.js index da2b099..6476343 100644 --- a/uno/node/js/cards/special/PlusAmount.js +++ b/uno/node/js/cards/special/PlusAmount.js @@ -23,6 +23,10 @@ class PlusAmount extends Card { //lässt den nächsten Spieler den PlusAmount der Karte ziehen this.game.players[this.game.nextPlayer()].drawCard(this._plus); + if(this._plus === 4){ + this._color = this.game.players[this.game.currentPlayer].selectColor(); + } + //Logik von Card.js ausführen super.putSelf(); } diff --git a/uno/node/tests/test_Card.test.js b/uno/node/tests/test_Card.test.js index f560bc5..5f249ff 100644 --- a/uno/node/tests/test_Card.test.js +++ b/uno/node/tests/test_Card.test.js @@ -5,6 +5,7 @@ const ChooseColor = require('../js/cards/special/ChooseColor'); const Skip = require('../js/cards/special/Skip'); const Reverse = require('../js/cards/special/Reverse'); const PlusAmount = require('../js/cards/special/PlusAmount'); +const Game = require('../js/Game'); //Instanz CARD_COLORS aus uno.js const CARD_COLORS = uno.CARD_COLORS; @@ -99,6 +100,103 @@ describe('Karten erstellen', () => { }); +describe('Kartenfunktionen', () => { + + let game = new Game(2, null); + let card; + + //Spieler brauchen karten, sonst beendet sich das Spiel + game.players[0].canPlay = true; + game.players[1].canPlay = true; + game.players[0].drawCard(2); + game.players[1].drawCard(2); + + it('Card - nächster Spieler an der Reihe', () => { + + card = new Card('8', CARD_COLORS[2], game); + + let player = game.currentPlayer; + + card.putSelf(); + + //Der nächste Spieler muss an der Reihe sein + expect(player).toBe(game.nextPlayer()); + + }); + + it('CC - Setzen der KartenFarbe', () => { + + card = new ChooseColor(game); + + card.putSelf(); + + //Die farbe von CC muss gesetzt werden + let bool = (card.color === "NONE"); + expect(bool).toBe(false); + + }); + + it('R - Wechseln der Spielrichtung', () => { + + card = new Reverse(CARD_COLORS[2], game); + + card.putSelf(); + + //Die Spielrichtung muss geändert werden + expect(game.direction).toBe(2); + + }); + + it('S - nächster Spieler wird übersprungen', () => { + + card = new Skip(CARD_COLORS[2], game); + + let currentPlayer = game.currentPlayer; + + card.putSelf(); + + //Der 2te Spieler wurde übersprungen, der Gleiche Spieler muss an der Reihe sein + expect(currentPlayer).toBe(game.currentPlayer); + + }); + + it('+2 - nächster Spieler +2 Karten', () => { + + card = new PlusAmount(game, CARD_COLORS[2]); + + let nextPlayer = game.players[game.nextPlayer()]; + + let playerDeck = nextPlayer.hand.length + + card.putSelf(); + + //Der nächste Spieler muss 2 Karten mehr auf der Hand haben + expect(playerDeck).toBe(nextPlayer.hand.length - 2); + + }); + + it('+4 - Farbe gesetzt, nächster Spieler +4 Karten', () => { + + card = new PlusAmount(game); + + let nextPlayer = game.players[game.nextPlayer()]; + + let playerDeck = nextPlayer.hand.length + + card.putSelf(); + + //Der nächste Spieler muss 4 Karten mehr auf der Hand haben + expect(playerDeck).toBe(nextPlayer.hand.length - 4); + + //Die farbe von +4 muss gesetzt werden + let bool = (card.color === "NONE"); + expect(bool).toBe(false); + + }); + + +}); + //Testet eine Karte auf die Eigenschaften von Card.js function testCreatedCard(card, number, card_colors){