packages feed

minesweeper-0.9: Configuration.hs

module Configuration
    ( Configuration
        ( Configuration
        , tableConfig
        , strategy 
        , deathProbRange
        )
    , TableConfig
    , tConfig
    , size
    , mines
    , numOfSolutions
    , Strategy (..)
    , Probability
    , defaultConfiguration
    , showConfiguration
    ) where

import Core.Square
import Core.SquareConstraints 
import Data.Data

--import Control.Monad

----------------------------------

data TableConfig 
    = TableConfig 
        { tsize     :: BoardSize
        , tmines    :: Int
        , numOfSolutions_ :: Integer    -- cached
        }
        deriving (Eq, Ord, Show, Typeable, Data)

tConfig :: BoardSize -> Int -> TableConfig
tConfig s m = TableConfig s m (solutions $ initConstraints s m)

-----------------

data Configuration 
    = Configuration
        { tableConfig     :: TableConfig

        , strategy        :: Strategy
        , deathProbRange  :: (Probability, Probability)  
            -- (a, b): ha p valséggel halnánk meg, akkor p>a esetén meghalunk, p<b esetén életben maradunk
        }
        deriving (Eq, Ord, Show, Typeable, Data)

data Strategy
    = Random
    | HighestProb
        deriving (Eq, Ord, Show, Enum, Typeable, Data)

type Probability 
    = Rational


---------------------------------

numOfSolutions :: Configuration -> Integer
numOfSolutions = numOfSolutions_ . tableConfig

size :: Configuration -> BoardSize
size = tsize . tableConfig

mines :: Configuration -> Int
mines = tmines . tableConfig

------------------------

defaultConfiguration :: Configuration
defaultConfiguration = Configuration
    { tableConfig       = tConfig (boardSize 10 10) 20
    , strategy          = Random
    , deathProbRange    = (1,1)
    }

-------------------------

showConfiguration c
    = unlines $ filter (not . null)
        [ unwords [show (xSize s) ++ "×" ++ show (ySize s), "table,", show $ mines c, "mines"]
        , showStrategy $ strategy c
        , showDPR $ deathProbRange c
        ]
 where
    s = size c

    showStrategy Random = ""
    showStrategy HighestProb = "least information game"

    showDPR (0,1) = ""
    showDPR (1,1) = "lucky game"
    showDPR _ = ""
            -- (a, b): ha p valséggel halnánk meg, akkor p>a esetén meghalunk, p<b esetén életben maradunk