From 7327695ca3d9aee5da1d0bc98572d877dd8c8546 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Tue, 9 Mar 2010 03:49:15 +0100 Subject: Moved source files to src directory --- src/Game.hs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/Game.hs (limited to 'src/Game.hs') 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 -- cgit v1.2.3