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.

97 lines
2.7 KiB

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