Clean up some funcs
This commit is contained in:
parent
756fb97414
commit
349022a7cc
1 changed files with 8 additions and 2 deletions
|
@ -212,10 +212,10 @@ latestOrZero = go . Seq.viewr
|
||||||
-- Allows wallkicks: http://tetris.wikia.com/wiki/TGM_rotation
|
-- Allows wallkicks: http://tetris.wikia.com/wiki/TGM_rotation
|
||||||
rotate :: Game -> Game
|
rotate :: Game -> Game
|
||||||
rotate g = g & block .~ nextB
|
rotate g = g & block .~ nextB
|
||||||
where nextB = fromMaybe blk $ getFirst . mconcat $ bs
|
where nextB = fromMaybe blk $ getFirst . mconcat $ First <$> bs
|
||||||
bs = map ($ blk) safeFuncs
|
bs = map ($ blk) safeFuncs
|
||||||
safeFuncs = map (mkSafe .) funcs
|
safeFuncs = map (mkSafe .) funcs
|
||||||
mkSafe b = if isValidBlockPosition brd b then First (Just b) else First Nothing
|
mkSafe = boolMaybe (isValidBlockPosition brd)
|
||||||
funcs = [rotate', rotate' . translate Left, rotate' . translate Right]
|
funcs = [rotate', rotate' . translate Left, rotate' . translate Right]
|
||||||
blk = g ^. block
|
blk = g ^. block
|
||||||
brd = g ^. board
|
brd = g ^. board
|
||||||
|
@ -280,6 +280,8 @@ isValidBlockPosition :: Board -> Block -> Bool
|
||||||
isValidBlockPosition brd = all validCoord . coords
|
isValidBlockPosition brd = all validCoord . coords
|
||||||
where validCoord = (&&) <$> isFree brd <*> isInBounds
|
where validCoord = (&&) <$> isFree brd <*> isInBounds
|
||||||
|
|
||||||
|
-- General utilities
|
||||||
|
|
||||||
-- | Shuffle a sequence (random permutation)
|
-- | Shuffle a sequence (random permutation)
|
||||||
shuffle :: Seq.Seq a -> IO (Seq.Seq a)
|
shuffle :: Seq.Seq a -> IO (Seq.Seq a)
|
||||||
shuffle xs
|
shuffle xs
|
||||||
|
@ -289,3 +291,7 @@ shuffle xs
|
||||||
let (left, right) = Seq.splitAt randomPosition xs
|
let (left, right) = Seq.splitAt randomPosition xs
|
||||||
(y :< ys) = Seq.viewl right
|
(y :< ys) = Seq.viewl right
|
||||||
fmap (y <|) (shuffle $ left >< ys)
|
fmap (y <|) (shuffle $ left >< ys)
|
||||||
|
|
||||||
|
-- | Take predicate and input and transform to Maybe
|
||||||
|
boolMaybe :: (a -> Bool) -> a -> Maybe a
|
||||||
|
boolMaybe p a = if p a then Just a else Nothing
|
||||||
|
|
Loading…
Add table
Reference in a new issue