diff --git a/src/Skat/AI/Online.hs b/src/Skat/AI/Online.hs index 509f7b8..3cc3c5b 100644 --- a/src/Skat/AI/Online.hs +++ b/src/Skat/AI/Online.hs @@ -119,7 +119,8 @@ choose :: (HasCard b, HasCard a) => (Communicator c, MonadPlayer m) => [CardS Pl choose table mayOuvert hand' = do gm <- game let hand = sortRender (getTrump gm) $ map toCard hand' - query (BS.unpack $ encode $ ChooseQuery hand table $ fmap (map toCard) mayOuvert) + ouvertCards = fmap (sortRender (getTrump gm) . map toCard) mayOuvert + query (BS.unpack $ encode $ ChooseQuery hand table ouvertCards) r <- response case decode (BS.pack r) of Just (ChosenResponse card) -> do diff --git a/src/Skat/Card.hs b/src/Skat/Card.hs index d1c27d1..db9f458 100644 --- a/src/Skat/Card.hs +++ b/src/Skat/Card.hs @@ -177,7 +177,7 @@ compareRender trump c1@(Card tp1 col1) c2@(Card tp2 col2) = EQ -> compare col1 col2 v -> v (False, False) -> case compare col1 col2 of - EQ -> compare tp1 tp2 + EQ -> compareTypes trump tp1 tp2 v -> v _ -> compare trp1 trp2 where trp1 = isTrump trump c1 @@ -198,12 +198,15 @@ compareTypes None tp1 tp2 = compare (toNullType tp1) (toNullType tp2) toNullType Ace = NAce compareTypes _ tp1 tp2 = compare tp1 tp2 +-- | ascending sort of cards, depending on turn colour sortCards :: HasCard c => Trump -> Maybe TurnColour -> [c] -> [c] sortCards trump turnCol cs = sortBy f cs where f c1 c2 = compareCards trump turnCol (toCard c1) (toCard c2) +-- | descending sort of cards, independent of turn colour sortRender :: HasCard c => Trump -> [c] -> [c] sortRender trump cs = sortBy f cs + -- note: reversed order of c1 and c2 to get a descending sort where f c1 c2 = compareRender trump (toCard c2) (toCard c1) highestCard :: HasCard c => Trump -> Maybe TurnColour -> [c] -> c