From 5aec513c7bcf84f95c20c6d1ba8838069569a84a Mon Sep 17 00:00:00 2001 From: Nicolas Fritz Date: Fri, 20 Jan 2023 21:35:50 +0100 Subject: [PATCH] =?UTF-8?q?Spieler=20putCard()=20+=20UnitTest=20-=20genera?= =?UTF-8?q?tePool()=20wird=20nun=20am=20ende=20gemischt=20-=20Unit=20Test?= =?UTF-8?q?=20f=C3=BCrs=20Mischen=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- uno/node/js/Game.js | 17 +++++++++++++++++ uno/node/js/Player.js | 13 +++++++++++++ uno/node/js/cards/Card.js | 4 ++++ uno/node/tests/test_Game.test.js | 23 +++++++++++++++++++++++ uno/node/tests/test_Player.test.js | 30 +++++++++++++++++++++++++++--- 5 files changed, 84 insertions(+), 3 deletions(-) diff --git a/uno/node/js/Game.js b/uno/node/js/Game.js index bfc1ba4..b02c059 100644 --- a/uno/node/js/Game.js +++ b/uno/node/js/Game.js @@ -17,6 +17,7 @@ class Game { this._currentPlayer = 0; this._direction = 0; this._players = []; + this._cardPool = [] this._playerAmount = playerAmount; this._rules = rules; @@ -27,6 +28,9 @@ class Game { initGame(){ this._cardPool = this.generatePool(); this.createPlayers(this._playerAmount); + + this._cardOnDeck = this._cardPool[0]; + this._cardPool.splice(0,1); } //Gibt ein Array zurück mit allen Karten, die in einem Uno Spiel sind @@ -64,6 +68,8 @@ class Game { } + pool.sort(()=> Math.random() - 0.5); //mischen + //Array mit Karten wird zurückgegeben return pool; } @@ -74,6 +80,9 @@ class Game { } } + nextTurn(){ + } + //Gib den Pool mit allen UnoKarten zurück get cardPool(){ return this._cardPool; @@ -83,6 +92,14 @@ class Game { return this._players; } + get cardOnDeck(){ + return this._cardOnDeck; + } + + set cardOnDeck(card){ + this._cardOnDeck = card; + } + } //Exportiert Modul Game diff --git a/uno/node/js/Player.js b/uno/node/js/Player.js index 5b735ae..7490560 100644 --- a/uno/node/js/Player.js +++ b/uno/node/js/Player.js @@ -19,6 +19,19 @@ class Player { } } + putCard(index){ + if(!this._hand[index].canPut) return; + + if(this._game.cardOnDeck != null){ + this._game.cardPool.push(this._game.cardOnDeck); + } + + this._game.cardOnDeck = this._hand[index]; + this._hand.splice(index, 1); + + this._game.nextTurn(); + } + //Gibt den Namen eines Spielers zurück get name() { return this._name; diff --git a/uno/node/js/cards/Card.js b/uno/node/js/cards/Card.js index 8e0a0f2..943a2a1 100644 --- a/uno/node/js/cards/Card.js +++ b/uno/node/js/cards/Card.js @@ -32,6 +32,10 @@ class Card { return this._onScreen; } + set canPut(bool){ + this._canPut = bool; + } + } //Exportiert Modul Card diff --git a/uno/node/tests/test_Game.test.js b/uno/node/tests/test_Game.test.js index 25ea3ec..95c2e11 100644 --- a/uno/node/tests/test_Game.test.js +++ b/uno/node/tests/test_Game.test.js @@ -13,6 +13,7 @@ describe('Pool aus Karten generieren', () => { //Game wird erstellt mit 0 Spielern und ohne Regeln let game = new Game(0, []); + game._cardPool = game.generatePool(); //Speichert die Art der Karten let reverse = [], @@ -151,6 +152,28 @@ describe('Pool aus Karten generieren', () => { }); + it('gemischt', () => { + + //Teste 1000x ob generatePool 2 unterschiedliche Arrays erstellt + for(let i = 0; i < 1000; i++){ + + //Bool für Gleichheit + let bool = true; + + //Arrays generiert mit "generatePool()" + let array1 = game.generatePool(); + let array2 = game.generatePool(); + + //Testen ob beide gleich + if(JSON.stringify(array1) === JSON.stringify(array2)) + bool = false; + + //Bool muss true sein, wenn die Arrays ungleich sind + expect(bool).toBe(true); + } + + }); + }) //Setzt die Kartenanzahl der Farben für array diff --git a/uno/node/tests/test_Player.test.js b/uno/node/tests/test_Player.test.js index 33685a5..76477a5 100644 --- a/uno/node/tests/test_Player.test.js +++ b/uno/node/tests/test_Player.test.js @@ -58,13 +58,17 @@ describe('Spieler Funktionalitäten', () => { //Erstellt ein Spiel let game = new Game(2, null); + let cardAmount; + + //Nimmt die Anzahl der Karten im Deck und speichert sie in cardAmount vor jedem Test + beforeEach(() => { + cardAmount = game.cardPool.length; + }) + //Testet, ob ein Spieler eine Karte aus dem CardPool vom Game ziehen kann it('Karten ziehen', () => { - //Nimmt die Anzahl der Karten im Deck und speichert sie - let cardAmount = game.cardPool.length; - //Funktion vom Player ausführen zum Karte ziehen game.players[0].drawCard(1); @@ -76,4 +80,24 @@ describe('Spieler Funktionalitäten', () => { }); + //Testet, ob ein Spieler eine Karte von seiner Hand legen kann. + it('Karte legen', () => { + + //holt das Objekt der Karte, welche der Spieler in der hand hat + let card = game.players[0].hand[0]; + + //Um die Karte zu legen, muss der Wert "canPut" der Karte auf true sein + card.canPut = true; + + //Funktion um Spieler seine erste Karte im Deck zu legen + game.players[0].putCard(0); + + //Testen, ob die gelegte Karte jetzt auf dem Tisch liegt + expect(game.cardOnDeck).toEqual(card); + + //Testen ob der Karten Pool um eins Größer geworden ist durch das Legen der Karte + expect(game.cardPool.length).toBe(cardAmount + 1); + + }); + }); \ No newline at end of file