packages feed

deterministic-game-engine 0.3.1 → 0.4.0

raw patch · 3 files changed

+27/−44 lines, 3 filesdep ~deterministic-game-enginePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: deterministic-game-engine

API changes (from Hackage documentation)

- Game.Deterministic.GameEngine: actions :: GameEngine m a b -> GameActions m a b
- Game.Deterministic.GameEngine: state :: GameEngine m a b -> GameState a
- Game.Deterministic.GameEngine: type GameEngineIO a b = GameEngine IO a b
- Game.Deterministic.GameEngine: type GameEngineSimple a b = GameEngine Identity a b
- Game.Deterministic.GameEngine: type Symbol = Char
+ Game.Deterministic.GameEngine: gameEngineActions :: GameEngine m a b -> GameActions m a b
+ Game.Deterministic.GameEngine: gameEngineState :: GameEngine m a b -> GameState a
- Game.Deterministic.GameEngine: Player :: Symbol -> Player
+ Game.Deterministic.GameEngine: Player :: String -> Player
- Game.Deterministic.GameEngine: playIO :: GameEngineIO a b -> IO Int
+ Game.Deterministic.GameEngine: playIO :: GameEngine IO a b -> IO Int
- Game.Deterministic.GameEngine: playSimple :: GameEngineSimple a b -> Int
+ Game.Deterministic.GameEngine: playSimple :: GameEngine Identity a b -> Int

Files

deterministic-game-engine.cabal view
@@ -1,5 +1,5 @@ name:                deterministic-game-engine-version:             0.3.1+version:             0.4.0 synopsis:            Simple deterministic game engine description:         Haskell library for creating simple deterministic games,                      such as tic-tac-toe. The engine requires a minimal set of@@ -42,6 +42,6 @@   type:                exitcode-stdio-1.0   build-depends:       base <5.0,                        hspec >=2.1 && <2.2,-                       deterministic-game-engine ==0.3.1+                       deterministic-game-engine ==0.4.0    default-language:    Haskell2010
src/Game/Deterministic/GameEngine.hs view
@@ -1,7 +1,7 @@ {- | -Haskell library for creating simple deterministic games,-such as tic-tac-toe. The engine requires a minimal set of+Library for creating simple deterministic games, such+as tic-tac-toe. The engine requires a minimal set of actions related to the game, and then will run the game until a terminal state is reached. @@ -9,10 +9,10 @@  > import Game.Deterministic.GameEngine >-> game :: Monad m => GameEngine m Int Int+> game :: Monad m => GameEngine m [Char] [(Int, Char)] > game = GameEngine gameActions initialState >-> gameActions :: Monad m => GameActions m Int Int+> gameActions :: Monad m => GameActions m [Char] [(Int, Char)] > gameActions = GameActions { >    getPlayer  = -- find the next player from a game state, >    getMove    = -- find a move from the game state,@@ -21,26 +21,21 @@ >    getScore   = -- get score from a terminal state >  } >-> initialState :: GameState Int-> initialState = GameState 0+> initialState :: GameState [Char]+> initialState = GameState ['x', 'x', 'x'] > > -- run the game engine until a terminal state is reached > playSimple game  -} -{-# LANGUAGE RankNTypes #-} - module Game.Deterministic.GameEngine (-    Symbol,+    GameActions(..),     GameState(..),-    Player(..),     Move(..),-    GameActions(..),+    Player(..),     GameEngine(..),-    GameEngineSimple,-    GameEngineIO,     play,     playSimple,     playIO@@ -48,6 +43,8 @@   import           Control.Monad.Identity++ import           Game.Deterministic.GameEngine.GameActions import           Game.Deterministic.GameEngine.GameState import           Game.Deterministic.GameEngine.Move@@ -55,49 +52,39 @@   data GameEngine m a b = GameEngine {-    actions :: GameActions m a b,+    gameEngineActions :: GameActions m a b,     -- ^ Defines how the game will be played -    state   :: GameState a+    gameEngineState   :: GameState a     -- ^ The current state of the game   } -- ^ Holds information about how the game is played, and the current state of the game.  -type GameEngineSimple a b = GameEngine Identity a b-type GameEngineIO a b = GameEngine IO a b-- play :: Monad m => GameEngine m a b -> m Int -- ^ Run the provided game engine under a monadic context until a terminal state is reached.-play engine = do-  isTerm <- isTerminal gameActions gameState+play (GameEngine actions state) = do+  isTerm <- isTerminal actions state    if isTerm then do-    player <- getPlayer gameActions gameState-    getScore gameActions gameState player+    player <- getPlayer actions state+    getScore actions state player     else do-      nextState <- getNextState engine-      play $ GameEngine (actions engine) nextState-  where-    gameActions = actions engine-    gameState = state engine+      nextState <- getNextState actions state+      play $ GameEngine actions nextState  -playSimple :: GameEngineSimple a b -> Int+playSimple :: GameEngine Identity a b -> Int -- ^ Run the provided game engine without a context until a terminal state is reached. playSimple = runIdentity . play  -playIO :: GameEngineIO a b -> IO Int+playIO :: GameEngine IO a b -> IO Int -- ^ Run the provided game engine within an IO context until a terminal state is reached. playIO = play  -getNextState :: Monad m => GameEngine m a b -> m (GameState a)-getNextState engine = do-  nextMove <- getMove gameActions gameState-  getResult gameActions gameState nextMove-  where-    gameActions = actions engine-    gameState = state engine+getNextState :: Monad m => GameActions m a b -> GameState a -> m (GameState a)+getNextState actions state = do+  nextMove <- getMove actions state+  getResult actions state nextMove
src/Game/Deterministic/GameEngine/Player.hs view
@@ -1,10 +1,6 @@ module Game.Deterministic.GameEngine.Player (-    Symbol,     Player(..)   ) where  -type Symbol = Char---data Player = Player Symbol deriving (Eq, Show)+data Player = Player String deriving (Eq, Show)