68 lines
1.6 KiB
Haskell
68 lines
1.6 KiB
Haskell
{-# LANGUAGE DeriveGeneric #-}
|
|
module Game (
|
|
Game(..)
|
|
, stub
|
|
) where
|
|
|
|
import Data.Aeson (ToJSON(..), FromJSON(..), genericToEncoding, genericParseJSON, defaultOptions)
|
|
import GHC.Generics (Generic)
|
|
|
|
import Character (Character)
|
|
import qualified Character (stub)
|
|
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 InitProcess = Name | Gender | OpponentsName deriving (Generic)
|
|
|
|
instance ToJSON InitProcess where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON InitProcess where
|
|
parseJSON = genericParseJSON defaultOptions
|
|
|
|
data State =
|
|
At Position
|
|
| Fighting {
|
|
at :: Position
|
|
, opponent :: Character
|
|
, turn :: Turn
|
|
}
|
|
| Initializing InitProcess deriving (Generic)
|
|
|
|
instance ToJSON State where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON State where
|
|
parseJSON = genericParseJSON defaultOptions
|
|
|
|
data Game = Game {
|
|
character :: Character
|
|
, state :: State
|
|
} deriving (Generic)
|
|
|
|
instance ToJSON Game where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON Game where
|
|
parseJSON = genericParseJSON defaultOptions
|
|
|
|
stub :: Game
|
|
stub = Game {
|
|
character = Character.stub
|
|
, state = Initializing Name
|
|
}
|