/** * Putting of $card by $player in pile * Implemented games can override this metod by should call it for this action * * @param Card $card * @param Player $player */ public function putCardInPileByPlayer(Card $card, Player $player) { $player->checkPlayerHasCard($card); $this->checkPlayerCanPutCardInPile($player, $card); $playerCard = $player->getCards()->collect($card); $this->gameTable->getCardsPile()->append($playerCard); }
/** * @param Player[] $players * @param Card[] $firstPlayerCards * @param Card[] $cardsInPile * @return GameTable */ private function prepareGameTable(array $players, array $firstPlayerCards, array $cardsInPile) : GameTable { $gameTable = new GameTable($players); $gameTable->getPlayerCards(reset($players))->appendMany($firstPlayerCards); $gameTable->getCardsPile()->appendMany($cardsInPile); return $gameTable; }