diff --git a/src/Main.hs b/src/Main.hs index 1817c23..b1a6cde 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -97,7 +97,7 @@ match (_, c1, _) (_, c2, _) = c1 == c2 -- Wanneer een kaart gevonden is, wordt deze teruggegeven. Anders wordt -- een error teruggegeven. find :: Coordinate -> [Card] -> Card -find c0 cards = head $ filter (\(c1,_,_) -> c1 == c0) cards +find c0 cards = head $ filter ((c0 ==).firstOfThree) cards -- Geef een permutatie van een gegeven lijst terug. -- Hint: Kijk zeker eens naar de System.Random en @@ -115,14 +115,14 @@ generateShuffledCards :: Int -> [Card] -- TODO Dit moet nog verder uitgeklaard worden !! -- TODO Hoe bepalen we de coördinaten van de kaarten? generateShuffledCards n = map (\(x,y) -> (x,y,Hidden)) $ zip (zip [1..n] [1..n]) colors - where colors = shuffleList $ colorsOnce ++ colorsOnce + where colors = shuffleList $ colorsOnce ++ colorsOnce colorsOnce = generateColors (n `div` 2) -- Controleer of een positie op het spelbord een kaart bevat. -- Om de kaarten van het huidige speelbord op te vragen, gebruik -- 'cards initBoard' hasCard :: Coordinate -> Bool -hasCard c0 = any (\(c1,_,_) -> c1 == c0) $ cards initBoard +hasCard c0 = any ((c0 ==).firstOfThree) $ cards initBoard -- Controleer of de selector vanaf een gegeven locatie in een -- gegeven richting kan bewegen. @@ -162,12 +162,12 @@ flipCard :: Coordinate -> Board -> Board -- flipCard target board = board{turned (1,1),generateColor 1.1,Hidden):[]} flipCard target board -- TODO Maak deze lamdba mooier. - | target `elem` (map (\(a,_,_) -> a) (turned board)) = board -- Controleer al omgedraaid? + | target `elem` (map firstOfThree (turned board)) = board -- Controleer al omgedraaid? | otherwise = board { cards = showCard target $ cards board -- Toon de kaart in de lijst van kaarten. , turned = flipped ++ turned board -- Voeg toe aan 'omgedraaide kaarten'. } - where flipped = filter (\(a,_,_) -> a == target) $ cards board + where flipped = filter ((target ==).firstOfThree) $ cards board -- Reset de laatste omgedraaide kaarten terug naar de `Hidden` status. resetTurned :: Board -> Board @@ -253,3 +253,8 @@ generateColor hue = makeColor r g b 1 -- Update het bord in elke stap. step :: Float -> Board -> Board step _ b = b + +-- Haal het eerste element uit een drietupel, bijvoorbeeld om de +-- coördinaten uit een kaart-object te halen. +firstOfThree :: (a,b,c) -> a +firstOfThree (a,_,_) = a