packages feed

hcheckers-0.1.0.2: src/Rules/Brazilian.hs

{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
module Rules.Brazilian (Brazilian, brazilian) where

import Data.Typeable

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

newtype Brazilian = Brazilian GenericRules
  deriving (Typeable, HasBoardOrientation)

instance HasTopology Brazilian where
  boardTopology _ = Diagonal

instance Show Brazilian where
  show = rulesName

instance GameRules Brazilian where
  type EvaluatorForRules Brazilian = SimpleEvaluator

  boardSize _ = (8, 8)

  initBoard rnd _ = initBoard rnd russian

  initPiecesCount _ = 24

  dfltEvaluator r = defaultEvaluator r

  boardNotation _ = boardNotation international
  parseNotation _ = parseNotation international

  rulesName _ = "brazilian"

  pdnId _ = "26"

  updateRules r _ = r

  possibleMoves (Brazilian rules) side board = gPossibleMoves rules side board
  mobilityScore (Brazilian rules) side board = gMobilityScore rules side board

  getGameResult = genericGameResult
  getAllAddresses r = addresses8 r

brazilian :: Brazilian
brazilian = Brazilian $
  let rules = internationalBase rules
  in  rules