39 lines
889 B
Haskell
39 lines
889 B
Haskell
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
|
|
|
module Game ( Bullet(..)
|
|
, GameState(..)
|
|
, Game
|
|
, runGame
|
|
) where
|
|
|
|
import Level
|
|
import Tank
|
|
import Texture
|
|
|
|
import Control.Monad
|
|
import Control.Monad.State
|
|
import Data.Fixed
|
|
import qualified Data.Map as M
|
|
|
|
|
|
data Bullet = Bullet
|
|
{ bulletX :: !Micro
|
|
, bulletY :: !Micro
|
|
, bulletDir :: !Micro
|
|
, bulletSpeed :: !Micro
|
|
, bulletBouncesLeft :: !Int
|
|
, bulletTank :: !Int
|
|
} deriving (Eq, Show)
|
|
|
|
data GameState = GameState
|
|
{ level :: !Level
|
|
, tanks :: ![Tank]
|
|
, bullets :: ![Bullet]
|
|
, textures :: !(M.Map Texture TextureObject)
|
|
} deriving (Show)
|
|
|
|
newtype Game a = Game (StateT GameState IO a)
|
|
deriving (Monad, MonadIO, MonadState GameState)
|
|
|
|
runGame :: GameState -> Game a -> IO (a, GameState)
|
|
runGame st (Game a) = runStateT a st
|