RandomKingCaptureSearch

dicechess.engine.search.RandomKingCaptureSearch

Random bot that never declines a king it can take at once.

It plays like RandomSearch, a uniformly random legal full-turn path, with one exception: when the very first micro-move of some path captures the opponent's King (the King is under direct attack from a piece the roll lets it move), it plays one of those paths, chosen uniformly at random.

The look is deliberately one micro-move deep. A king capture that needs a preparatory micro-move (a pawn clearing a file, a second knight jump) is not looked for, and the bot does not protect its own King. That keeps it between RandomSearch and CheckmateAwareSearch, which finds multi-move captures and also keeps its King safe.

Attributes

Source
RandomKingCaptureSearch.scala
Graph
Supertypes
class Object
trait Matchable
class Any
Self type

Members list

Value members

Concrete methods

override def findBestMove(state: GameState): Option[ScoredSequence]

Finds a move using the shared internal Random instance.

Finds a move using the shared internal Random instance.

Value parameters

state

current dicechess.engine.domain.GameState; state.activeColor indicates who is moving

Attributes

Returns

the selected ScoredSequence, or None if no legal move exists (forced pass)

Definition Classes
Source
RandomKingCaptureSearch.scala
override def findBestMove(state: GameState, random: Random): Option[ScoredSequence]

Finds a move with an explicit Random instance for reproducible sampling.

Finds a move with an explicit Random instance for reproducible sampling.

Value parameters

random

RNG used to choose among the candidate paths

state

current dicechess.engine.domain.GameState

Attributes

Returns

the selected ScoredSequence, or None if no legal move exists (forced pass)

Definition Classes
Source
RandomKingCaptureSearch.scala

Inherited methods

protected def estimateWinProbability(state: GameState): Double

Estimates the winning probability in [0.0, 1.0] for the side to move. Convenience over winProbability for offer decisions, where the deciding side is the active colour; do not override it, override winProbability.

Estimates the winning probability in [0.0, 1.0] for the side to move. Convenience over winProbability for offer decisions, where the deciding side is the active colour; do not override it, override winProbability.

Attributes

Inherited from:
SearchAlgorithm
Source
SearchAlgorithm.scala
def shouldAcceptDouble(state: GameState, currentStake: Int): Boolean

Determines whether the bot should accept (Take) or decline (Drop) a double from the opponent, taking the side to move as the responder. Kept for source and binary compatibility; it delegates to the three-argument overload.

Determines whether the bot should accept (Take) or decline (Drop) a double from the opponent, taking the side to move as the responder. Kept for source and binary compatibility; it delegates to the three-argument overload.

Value parameters

currentStake

the proposed double stake (e.g. 2, 4...)

state

current game state (dice pool is empty)

Attributes

Returns

true to accept the double (Take), false to resign the current stake (Drop)

Note

Perspective hazard: this overload evaluates the win probability of state.activeColor. In a double decision state, state.activeColor is the player who offered the double, NOT the responder, so a caller that feeds the delivered position here asks whether the offerer should take. Callers must prefer shouldAcceptDouble(state, currentStake, responder); strategies must override that overload, not this one.

Inherited from:
SearchAlgorithm
Source
SearchAlgorithm.scala
def shouldAcceptDouble(state: GameState, currentStake: Int, responder: Color): Boolean

Determines whether the bot should accept (Take) or decline (Drop) a double from the opponent, evaluated from the perspective of responder.

Determines whether the bot should accept (Take) or decline (Drop) a double from the opponent, evaluated from the perspective of responder.

This is the single policy point for the take/drop decision: strategies that want their own threshold or estimator override this overload. The two-argument form below only delegates here, so a policy written against it is bypassed whenever a caller names the responder explicitly (which every caller holding a doubleDecision state must, see the hazard note there).

Value parameters

currentStake

the proposed double stake (e.g. 2, 4...)

responder

the colour of the player responding to the double offer

state

current game state (dice pool is empty); its active colour is the side to move, which in a double decision is the offerer, not the responder

Attributes

Returns

true to accept the double (Take), false to resign the current stake (Drop)

Inherited from:
SearchAlgorithm
Source
SearchAlgorithm.scala
def shouldAcceptDraw(state: GameState): Boolean

Determines whether the bot should accept a draw offered by the opponent.

Determines whether the bot should accept a draw offered by the opponent.

Value parameters

state

current game state

Attributes

Returns

true to accept the draw

Inherited from:
SearchAlgorithm
Source
SearchAlgorithm.scala
def shouldOfferDouble(state: GameState, currentStake: Int): Boolean

Determines whether the bot should offer a double before its dice roll.

Determines whether the bot should offer a double before its dice roll.

Value parameters

currentStake

the current stake of the game

state

current game state (dice pool is empty)

Attributes

Returns

true to offer a double, false otherwise

Inherited from:
SearchAlgorithm
Source
SearchAlgorithm.scala
def shouldOfferDraw(state: GameState): Boolean

Determines whether the bot should offer a draw in the current position.

Determines whether the bot should offer a draw in the current position.

Value parameters

state

current game state

Attributes

Returns

true to offer a draw

Inherited from:
SearchAlgorithm
Source
SearchAlgorithm.scala
protected def winProbability(state: GameState, color: Color): Double

Estimates the winning probability in [0.0, 1.0] of color, whichever side is to move.

Estimates the winning probability in [0.0, 1.0] of color, whichever side is to move.

This is the estimator hook: a strategy with its own equity model (for example a Monte-Carlo rollout) overrides this method, so that both the offer decision (active colour) and the take/drop decision (responder colour) see the same estimate. The default maps the centipawn evaluation to a probability with a logistic sigmoid.

Attributes

Inherited from:
SearchAlgorithm
Source
SearchAlgorithm.scala