Browse Source

Spieler putCard() + UnitTest

- generatePool() wird nun am ende gemischt
- Unit Test fürs Mischen hinzugefügt
main
Nicolas Fritz 2 years ago
parent
commit
5aec513c7b
  1. 17
      uno/node/js/Game.js
  2. 13
      uno/node/js/Player.js
  3. 4
      uno/node/js/cards/Card.js
  4. 23
      uno/node/tests/test_Game.test.js
  5. 30
      uno/node/tests/test_Player.test.js

17
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

13
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;

4
uno/node/js/cards/Card.js

@ -32,6 +32,10 @@ class Card {
return this._onScreen;
}
set canPut(bool){
this._canPut = bool;
}
}
//Exportiert Modul Card

23
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

30
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);
});
});
Loading…
Cancel
Save