Rename currBlock -> block

This commit is contained in:
Sam Tay 2017-06-15 23:21:37 -04:00
parent 7bea4fc3be
commit 4de0c3d8d3

View file

@ -46,7 +46,7 @@ type Board = Map Coord Tetrimino
-- | Game state -- | Game state
data Game = Game data Game = Game
{ _level :: Int { _level :: Int
, _currBlock :: Block , _block :: Block
, _nextShape :: Tetrimino , _nextShape :: Tetrimino
, _nextShapeBag :: Seq.Seq Tetrimino , _nextShapeBag :: Seq.Seq Tetrimino
, _rowClears :: Seq.Seq Int , _rowClears :: Seq.Seq Int
@ -136,7 +136,7 @@ initGame lvl = do
(s2, bag2) <- bagFourTetriminoEach bag1 (s2, bag2) <- bagFourTetriminoEach bag1
return $ return $
Game { _level = lvl Game { _level = lvl
, _currBlock = initBlock s1 , _block = initBlock s1
, _nextShape = s2 , _nextShape = s2
, _nextShapeBag = bag2 , _nextShapeBag = bag2
, _score = 0 , _score = 0
@ -144,10 +144,10 @@ initGame lvl = do
, _board = mempty } , _board = mempty }
isGameOver :: Game -> Bool isGameOver :: Game -> Bool
isGameOver g = currBlockStopped g && g ^. currBlock ^. origin == startOrigin isGameOver g = blockStopped g && g ^. block ^. origin == startOrigin
timeStep :: Game -> IO Game timeStep :: Game -> IO Game
timeStep g = if (currBlockStopped g) timeStep g = if (blockStopped g)
then return . coreUpdater $ g then return . coreUpdater $ g
else stopUpdater . coreUpdater $ g else stopUpdater . coreUpdater $ g
where where
@ -192,17 +192,17 @@ points n = 800
-- | Handle counterclockwise block rotation (if possible) -- | Handle counterclockwise block rotation (if possible)
-- 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 & currBlock .~ nextB rotate g = g & block .~ nextB
where nextB = fromMaybe blk $ getFirst . mconcat $ bs where nextB = fromMaybe blk $ getFirst . mconcat $ bs
bs = map ($ blk) safeFuncs bs = map ($ blk) safeFuncs
safeFuncs = map (mkSafe .) funcs safeFuncs = map (mkSafe .) funcs
mkSafe b = if isValidBlockPosition b brd then First (Just b) else First Nothing mkSafe b = if isValidBlockPosition b brd then First (Just b) else First Nothing
funcs = [rotate', rotate' . translate Left, rotate' . translate Right] funcs = [rotate', rotate' . translate Left, rotate' . translate Right]
blk = g ^. currBlock blk = g ^. block
brd = g ^. board brd = g ^. board
currBlockStopped :: Game -> Bool blockStopped :: Game -> Bool
currBlockStopped g = isStopped (g ^. board) (g ^. currBlock) blockStopped g = isStopped (g ^. board) (g ^. block)
-- | Check if a block on a board is stopped from further gravitation -- | Check if a block on a board is stopped from further gravitation
isStopped :: Board -> Block -> Bool isStopped :: Board -> Block -> Bool
@ -211,21 +211,21 @@ isStopped b = any (`M.member` b) . map (translate Down) . blockCoords
-- | Freeze current block -- | Freeze current block
freezeBlock :: Game -> Game freezeBlock :: Game -> Game
freezeBlock g = g & board %~ (M.union blkMap) freezeBlock g = g & board %~ (M.union blkMap)
where blk = g ^. currBlock where blk = g ^. block
blkMap = M.fromList $ zip (blk ^. to blockCoords) (repeat $ blk ^. shape) blkMap = M.fromList $ zip (blk ^. to blockCoords) (repeat $ blk ^. shape)
-- | Replace currBlock with next block -- | Replace block with next block
nextBlock :: Game -> IO Game nextBlock :: Game -> IO Game
nextBlock g = do nextBlock g = do
(t, ts) <- bagFourTetriminoEach (g ^. nextShapeBag) (t, ts) <- bagFourTetriminoEach (g ^. nextShapeBag)
return $ return $
g & currBlock .~ initBlock (g ^. nextShape) g & block .~ initBlock (g ^. nextShape)
& nextShape .~ t & nextShape .~ t
& nextShapeBag .~ ts & nextShapeBag .~ ts
-- | Try to shift current block; if shifting not possible, leave block where it is -- | Try to shift current block; if shifting not possible, leave block where it is
shift :: Direction -> Game -> Game shift :: Direction -> Game -> Game
shift d g = g & currBlock %~ shiftBlock shift d g = g & block %~ shiftBlock
where shiftBlock b = if isValidBlockPosition (translate d b) (g ^. board) where shiftBlock b = if isValidBlockPosition (translate d b) (g ^. board)
then translate d b then translate d b
else b else b