1
Fork 0

Code cleanup: firstOfThree

Functie firstOfThree toegevoegd om zo heel wat lambda's weg te werken en
betere leesbaarheid
This commit is contained in:
Tibo De Peuter 2022-10-15 00:11:18 +02:00
parent 1f236ede83
commit 4a4aedbe20

View file

@ -97,7 +97,7 @@ match (_, c1, _) (_, c2, _) = c1 == c2
-- Wanneer een kaart gevonden is, wordt deze teruggegeven. Anders wordt -- Wanneer een kaart gevonden is, wordt deze teruggegeven. Anders wordt
-- een error teruggegeven. -- een error teruggegeven.
find :: Coordinate -> [Card] -> Card 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. -- Geef een permutatie van een gegeven lijst terug.
-- Hint: Kijk zeker eens naar de System.Random en -- Hint: Kijk zeker eens naar de System.Random en
@ -115,14 +115,14 @@ generateShuffledCards :: Int -> [Card]
-- TODO Dit moet nog verder uitgeklaard worden !! -- TODO Dit moet nog verder uitgeklaard worden !!
-- TODO Hoe bepalen we de coördinaten van de kaarten? -- 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 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) colorsOnce = generateColors (n `div` 2)
-- Controleer of een positie op het spelbord een kaart bevat. -- Controleer of een positie op het spelbord een kaart bevat.
-- Om de kaarten van het huidige speelbord op te vragen, gebruik -- Om de kaarten van het huidige speelbord op te vragen, gebruik
-- 'cards initBoard' -- 'cards initBoard'
hasCard :: Coordinate -> Bool 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 -- Controleer of de selector vanaf een gegeven locatie in een
-- gegeven richting kan bewegen. -- 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 = board{turned (1,1),generateColor 1.1,Hidden):[]}
flipCard target board flipCard target board
-- TODO Maak deze lamdba mooier. -- 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 { | otherwise = board {
cards = showCard target $ cards board -- Toon de kaart in de lijst van kaarten. cards = showCard target $ cards board -- Toon de kaart in de lijst van kaarten.
, turned = flipped ++ turned board -- Voeg toe aan 'omgedraaide 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. -- Reset de laatste omgedraaide kaarten terug naar de `Hidden` status.
resetTurned :: Board -> Board resetTurned :: Board -> Board
@ -253,3 +253,8 @@ generateColor hue = makeColor r g b 1
-- Update het bord in elke stap. -- Update het bord in elke stap.
step :: Float -> Board -> Board step :: Float -> Board -> Board
step _ b = b 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