packages feed

hcheckers-0.1.0.2: src/Rules/Diagonal.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TypeFamilies #-}
module Rules.Diagonal (DiagonalRussian, diagonal) where

import Data.Typeable

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

newtype DiagonalRussian = DiagonalRussian GenericRules
  deriving (Typeable, HasBoardOrientation)

instance Show DiagonalRussian where
  show = rulesName

instance HasTopology DiagonalRussian where
  boardTopology _ = Core.Types.Diagonal

instance GameRules DiagonalRussian where
  type EvaluatorForRules DiagonalRussian = SimpleEvaluator
  initBoard rnd r =
    let board = buildBoard rnd r (boardOrientation r) (8, 8)
        labels1 = ["c1", "e1", "g1",
                   "d2", "f2", "h2",
                   "e3", "g3",
                   "f4", "h4",
                   "g5",
                   "h6"]
        labels2 = ["b8", "d8", "f8",
                   "a7", "c7", "e7",
                   "b6", "d6",
                   "a5", "c5",
                   "b4",
                   "a3"]
    in  setManyPieces' labels1 (Piece Man First) $ setManyPieces' labels2 (Piece Man Second) board

  boardSize _ = (8, 8)

  initPiecesCount _ = 24

  dfltEvaluator r = defaultEvaluator r

  boardNotation _ = boardNotation russian

  parseNotation _ = parseNotation russian

  rulesName _ = "diagonal"

  possibleMoves _ = possibleMoves russian
  mobilityScore _ = mobilityScore russian

  updateRules r _ = r

  getGameResult = genericGameResult

  pdnId _ = "42"
  getAllAddresses r = addresses8 r

diagonal :: DiagonalRussian
diagonal = DiagonalRussian $
  let rules = russianBase rules
  in  rules