diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2010-03-09 03:49:15 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2010-03-09 03:49:15 +0100 |
commit | 7327695ca3d9aee5da1d0bc98572d877dd8c8546 (patch) | |
tree | e733714968ae0a041f76b213ffe31cca70ada6fb /src/Game.hs | |
parent | 2bb85618366681c7c97f8b36cc85a18c45beb924 (diff) | |
download | htanks-7327695ca3d9aee5da1d0bc98572d877dd8c8546.tar htanks-7327695ca3d9aee5da1d0bc98572d877dd8c8546.zip |
Moved source files to src directory
Diffstat (limited to 'src/Game.hs')
-rw-r--r-- | src/Game.hs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/Game.hs b/src/Game.hs new file mode 100644 index 0000000..b31009e --- /dev/null +++ b/src/Game.hs @@ -0,0 +1,52 @@ +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +module Game ( Tank(..) + , Shoot(..) + , GameState(..) + , Game + , runGame + ) where + +import Level +import Texture + +import Control.Monad +import Control.Monad.State +import Data.Fixed +import qualified Data.Map as M + + +data Tank = Tank + { tankX :: !Micro + , tankY :: !Micro + , tankDir :: !Micro + , tankAim :: !Micro + , tankSpeed :: !Micro + , tankTurnspeed :: !Micro + , tankMoving :: !Bool + , tankShootSpeed :: !Micro + , tankShootBounces :: !Int + , tankShootsLeft :: !Int + } deriving Show + +data Shoot = Shoot + { shootX :: !Micro + , shootY :: !Micro + , shootDir :: !Micro + , shootSpeed :: !Micro + , shootBouncesLeft :: !Int + , shootTank :: !Int + } deriving Show + +data GameState = GameState + { level :: !Level + , tanks :: ![Tank] + , shoots :: ![Shoot] + , 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 |