From 0b6fd622552e118224f0fe1c6cd1d84b876ea39c Mon Sep 17 00:00:00 2001 From: Tissevert Date: Wed, 23 Oct 2019 15:25:34 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20bug=20in=20dealing=20cards=20to=20Players?= =?UTF-8?q?=20=E2=80=94=20it=20is=20supposed=20to=20reset=20the=20players'?= =?UTF-8?q?=20meld=20and=20yakus=20while=20setting=20their=20hand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Hanafuda/Player.hs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Hanafuda/Player.hs b/src/Hanafuda/Player.hs index d3eda2e..ca93ae8 100644 --- a/src/Hanafuda/Player.hs +++ b/src/Hanafuda/Player.hs @@ -5,7 +5,7 @@ module Hanafuda.Player where import Hanafuda (Card, Pack, contains, packOfCards, remove) import qualified Hanafuda.ID as Hanafuda (ID) import Data.Map ((!), Map, elemAt, insert, keys, size) -import qualified Data.Map as Map (fromList, toList) +import qualified Data.Map as Map (fromList, keys) import Control.Monad.IO.Class (MonadIO(..)) import Control.Monad.Except (MonadError(..)) import System.Random (Random(..)) @@ -18,15 +18,15 @@ data Player yakus = Player { } deriving (Show) newtype Players yakus = Players (Map (ID yakus) (Player yakus)) deriving (Show) -new :: Monoid yakus => Player yakus -new = Player { - hand = packOfCards [] +new :: Monoid yakus => [Card] -> Player yakus +new cards = Player { + hand = packOfCards cards , meld = packOfCards [] , yakus = mempty } players :: Monoid yakus => [ID yakus] -> Players yakus -players = Players . Map.fromList . fmap (\playerID -> (playerID, new)) +players = Players . Map.fromList . fmap (\playerID -> (playerID, new [])) random :: MonadIO m => Players yakus -> m (ID yakus) random (Players playersByID) = @@ -42,10 +42,9 @@ set playerID player (Players playersByID) = Players $ insert playerID player pla deal :: Monoid yakus => Players yakus -> [[Card]] -> Players yakus deal (Players playersByID) hands = - Players . Map.fromList . zipWith setHand hands $ Map.toList playersByID + Players . Map.fromList . zipWith setHand hands $ Map.keys playersByID where - setHand cards (playerID, player) = - (playerID, player {hand = packOfCards cards}) + setHand cards playerID = (playerID, new cards) plays :: MonadError String m => Player yakus -> Card -> m (Player yakus) plays player@(Player {hand}) card =