packages feed

hcheckers-0.1.0.0: src/Rules/Spancirety.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Rules.Spancirety (Spancirety, spancirety) where

import Data.Typeable

import Core.Types
import Core.Board
import Core.Evaluator
import Rules.Generic
import Rules.Russian

newtype Spancirety = Spancirety GenericRules
  deriving (Typeable, HasBoardOrientation)

instance Show Spancirety where
  show = rulesName

instance GameRules Spancirety where
  initBoard rnd r =
    let board = buildBoard rnd (boardOrientation r) (8, 10)
        labels1 = ["a1", "c1", "e1", "g1", "i1",
                   "b2", "d2", "f2", "h2", "j2",
                   "a3", "c3", "e3", "g3", "i3"]
        labels2 = ["b8", "d8", "f8", "h8", "j8",
                   "a7", "c7", "e7", "g7", "i7",
                   "b6", "d6", "f6", "h6", "j6"]
    in  setManyPieces' labels1 (Piece Man First) $ setManyPieces' labels2 (Piece Man Second) board

  boardSize _ = (8, 10)

  boardNotation _ = boardNotation russian

  dfltEvaluator r = SomeEval $ defaultEvaluator r

  parseNotation _ = parseNotation russian

  rulesName _ = "spancirety"

  possibleMoves _ = possibleMoves russian
  mobilityScore _ = mobilityScore russian

  updateRules r _ = r

  getGameResult = genericGameResult

  pdnId _ = "41"

spancirety :: Spancirety
spancirety = Spancirety $
  let rules = russianBase rules
  in  rules