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
-- 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