57 lines
1.3 KiB
Haskell
57 lines
1.3 KiB
Haskell
{-# LANGUAGE DeriveGeneric #-}
|
|
module Game (
|
|
Game(..)
|
|
, Position(..)
|
|
, State(..)
|
|
) where
|
|
|
|
import Data.Aeson (ToJSON(..), FromJSON(..), genericToEncoding, genericParseJSON, defaultOptions)
|
|
import GHC.Generics (Generic)
|
|
|
|
import Character (Character)
|
|
import qualified Area (Key)
|
|
|
|
data Position = Position {
|
|
area :: Area.Key
|
|
, x :: Int
|
|
, y :: Int
|
|
} deriving (Generic)
|
|
|
|
instance ToJSON Position where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON Position where
|
|
parseJSON = genericParseJSON defaultOptions
|
|
|
|
data Turn = Player | Opponent deriving (Generic)
|
|
|
|
instance ToJSON Turn where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON Turn where
|
|
parseJSON = genericParseJSON defaultOptions
|
|
|
|
data State =
|
|
At Position
|
|
| Fighting {
|
|
at :: Position
|
|
, opponent :: Character
|
|
, turn :: Turn
|
|
}
|
|
deriving (Generic)
|
|
|
|
instance ToJSON State where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON State where
|
|
parseJSON = genericParseJSON defaultOptions
|
|
|
|
data Game =
|
|
Empty
|
|
| Game {
|
|
character :: Character
|
|
, state :: State
|
|
}
|
|
deriving (Generic)
|
|
|
|
instance ToJSON Game where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON Game where
|
|
parseJSON = genericParseJSON defaultOptions
|