roguelike/src/Game.hs

35 lines
1002 B
Haskell

{-# LANGUAGE TemplateHaskell #-}
module Game where
import System.Random
import Lens.Micro.TH
import Lens.Micro
import Dungeon
import Player
import Direction
import Action
data Game = Game
{ _dungeon :: Dungeon
, _player :: Player
}
makeLenses ''Game
newGame :: (RandomGen r) => r -> Game
newGame gen = Game (makeDungeon gen 30 10) (Player (0,0))
runAction :: Action -> Game -> Maybe Game
runAction (Walk N) game = Just $ game & player . pos . _2 -~ 1
runAction (Walk S) game = Just $ game & player . pos . _2 +~ 1
runAction (Walk W) game = Just $ game & player . pos . _1 -~ 1
runAction (Walk E) game = Just $ game & player . pos . _1 +~ 1
runAction (Walk NW) game = Just $ game & player . pos . both -~ 1
runAction (Walk NE) game = Just $ game & player . pos %~ (\(x,y) -> (x+1, y-1))
runAction (Walk SW) game = Just $ game & player . pos %~ (\(x,y) -> (x-1, y+1))
runAction (Walk SE) game = Just $ game & player . pos . both +~ 1
runAction None g = Just g
runAction ExitGame _ = Nothing