-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathFlipello10.scala
56 lines (43 loc) · 1.9 KB
/
Flipello10.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package strategygames.fairysf
package variant
import strategygames.{ GameFamily, P1, P2, Player }
case object Flipello10
extends Variant(
id = 7,
key = "flipello10",
name = "Flipello10",
standardInitialPosition = true,
fishnetKey = "ps-flipello10",
boardSize = Board.Dim10x10
) {
def gameFamily: GameFamily = GameFamily.Flipello()
def perfIcon: Char = ''
def perfId: Int = 205
override def dropsVariant = true
override def onlyDropsVariant = true
override def hasGameScore = true
override def canOfferDraw = false
override def repetitionEnabled = false
// cache this rather than checking with the API everytime
override def initialFen =
format.FEN(
"10/10/10/10/4pP4/4Pp4/10/10/10/10[PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp] w - - 0 1"
)
override def specialEnd(situation: Situation) = {
(situation.board.piecesOnBoardCount == boardSize.width * boardSize.height) ||
(situation.board.apiPosition.legalMoves.size == 0) ||
pendingDoublePass(situation)
}
def pendingPass(situation: Situation) =
situation.moves.size == 1 && situation.drops.fold(0) { _.size } == 0
def applyPass(situation: Situation) =
situation.moves.values.flatMap(moves => moves.headOption.map(_.situationAfter)).headOption
def pendingDoublePass(situation: Situation) =
pendingPass(situation) && applyPass(situation).fold(false)(pendingPass(_))
override def specialDraw(situation: Situation) =
specialEnd(situation) &&
(situation.board.playerPiecesOnBoardCount(P1) == situation.board.playerPiecesOnBoardCount(P2))
override def winner(situation: Situation): Option[Player] =
(specialEnd(situation) && !specialDraw(situation)) option
situation.board.playerPiecesOnBoardCount.maxBy(_._2)._1
}