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.

101 lines
2.8 KiB

  1. //Klasse Player für Spieler einer Uno Runde
  2. const uno = require("./uno");
  3. const {CARD_COLORS} = require("./uno");
  4. class Player {
  5. //Erstellt ein Spieler mit einem Namen und dem Spiel, in dem er teilnimmt
  6. constructor(name, gameInstanz) {
  7. this._game = gameInstanz; //Spiel, worin der Spieler ist
  8. this._name = name; //Name des Spielers
  9. this._turn = false; //Ob Spieler gerade am Zug
  10. this._hand = []; //Deck des Spielers
  11. this._canPlay = false //Ob spieler gerade Karte legen kann
  12. }
  13. //Lässt den Spieler eine Anzahl "amount" an Karten ziehen
  14. drawCard(amount){
  15. //Ziehe so viele Karten, wie amount übergeben wurde
  16. for (let i = 0; i < amount; i++){
  17. //Füge die erste Karte aus cardPool der Hand des Spielers hinzu
  18. this._hand.push(this._game.cardPool[0]);
  19. //Lösche die erste Karte aus cardPool
  20. this._game.cardPool.splice(0, 1);
  21. }
  22. if(amount === 1)
  23. this._game.nextTurn();
  24. }
  25. //Lässt den Spieler eine Karte in seiner Hand legen
  26. //Parameter: Index vom Deck des Spielers, wo die Karte liegt
  27. putCard(index){
  28. //Karte muss hinterlegt haben, dass sie gelegt werden kann
  29. if(!this._hand[index].canPut) return;
  30. if(this._turn === false) return;
  31. //Wenn eine Karte auf dem Tisch liegt
  32. if(this._game.cardOnDeck != null){
  33. //Wenn eine "NONE" Color Karte gelegt wurde, resette die Farbe auf "NONE"
  34. if(this._game.cardOnDeck.name === "CC" || this._game.cardOnDeck.name === "+4")
  35. this._game.cardOnDeck.color = uno.CARD_COLORS[0];
  36. //Füge die Karte dem Pool wieder hinzu
  37. this._game.cardPool.push(this._game.cardOnDeck);
  38. }
  39. //Karte in der Hand wird auf den Tisch gelegt
  40. this._game.cardOnDeck = this._hand[index];
  41. //Karte wird aus dem Deck des Spielers entfernt
  42. this._hand.splice(index, 1);
  43. //führe Funktion der Karte aus
  44. this._game.cardOnDeck.putSelf();
  45. }
  46. selectColor(){
  47. //Todo: Spieler Möglichkeit geben Farbe zu wählen, nicht random
  48. return CARD_COLORS[Math.floor(Math.random() * 4) + 1];
  49. }
  50. //Gibt den Namen eines Spielers zurück
  51. get name() {
  52. return this._name;
  53. }
  54. //Gibt zurück, ob der Spieler am Zug ist
  55. get turn(){
  56. return this._turn;
  57. }
  58. //Setzt, dass der Spieler gerade am Zug ist oder nicht
  59. set turn(bool){
  60. this._turn = bool;
  61. }
  62. //Gibt zurück, ob der Spieler eine Karte legen kann
  63. get canPlay(){
  64. return this._canPlay;
  65. }
  66. set canPlay(bool){
  67. this._canPlay = bool;
  68. }
  69. //Gibt das SpielerDeck zurück
  70. get hand(){
  71. return this._hand;
  72. }
  73. }
  74. //Exportiert Modul Player
  75. module.exports = Player;