Exemple #1
0
/* Inialise the solving machinery with Face-to-face Chess
 * @param si identifies root slice of solving machinery
 */
static void initialise_solving(slice_index si,
                               slice_type generator,
                               slice_type enforcer)
{
  TraceFunctionEntry(__func__);
  TraceFunctionParamListEnd();

  solving_instrument_move_generation(si,nr_sides,generator);

  {
    stip_structure_traversal st;
    stip_structure_traversal_init(&st,&enforcer);
    stip_structure_traversal_override_single(&st,
                                             STEnforceObserverWalk,
                                             &substitute_enforce_confronted_walk);
    stip_structure_traversal_override_single(&st,
                                             STValidatingObserver,
                                             &stip_structure_visitor_noop);
    stip_structure_traversal_override_single(&st,
                                             STValidatingObservationGeometry,
                                             &stip_structure_visitor_noop);
    stip_traverse_structure(si,&st);
  }

  TraceFunctionExit(__func__);
  TraceFunctionResultEnd();
}
Exemple #2
0
/* Inialise the solving machinery with Central Chess
 * @param si identifies root slice of solving machinery
 */
void central_initialise_solving(slice_index si)
{
  TraceFunctionEntry(__func__);
  TraceFunctionParamListEnd();

  solving_instrument_move_generation(si,nr_sides,STCentralMovesForPieceGenerator);

  stip_instrument_observation_validation(si,nr_sides,STCentralObservationValidator);
  stip_instrument_check_validation(si,nr_sides,STCentralObservationValidator);

  TraceFunctionExit(__func__);
  TraceFunctionResultEnd();
}
/* Inialise the solving machinery with transmuting kings
 * @param si identifies root slice of solving machinery
 * @param side for whom
 */
void transmuting_kings_initialise_solving(slice_index si, Side side)
{
  TraceFunctionEntry(__func__);
  TraceFunctionParam("%u",si);
  TraceEnumerator(Side,side);
  TraceFunctionParamListEnd();

  solving_instrument_move_generation(si,side,STTransmutingKingsMovesForPieceGenerator);

  transmuting_kings_initialise_observing(si,side);

  TraceFunctionExit(__func__);
  TraceFunctionResultEnd();
}
Exemple #4
0
/* Instrument the move generation machinery so that there are two paths which
 * can be adapted separately.
 * @param si root slice of solving machinery
 * @param side side for which to instrument; pass nr_sides for both sides
 * @note inserts proxy slices STMoveForPieceGeneratorStandardPath and
 *       STMoveForPieceGeneratorAlternativePath that can be used for adjusting the move
 *       generation
 */
void move_generator_instrument_for_alternative_paths(slice_index si, Side side)
{
  stip_structure_traversal st;

  solving_instrument_move_generation(si,
                                     side,
                                     STMoveForPieceGeneratorPathsJoint);

  stip_structure_traversal_init(&st,0);
  stip_structure_traversal_override_single(&st,
                                           STMoveForPieceGeneratorPathsJoint,
                                           &insert_separator);
  stip_traverse_structure(si,&st);
}
Exemple #5
0
/* Inialise the solving machinery with Annan Chess
 * @param si identifies root slice of solving machinery
 */
void annan_initialise_solving(slice_index si)
{
  TraceFunctionEntry(__func__);
  TraceFunctionParamListEnd();

  solving_instrument_move_generation(si,nr_sides,STAnnanMovesForPieceGenerator);

  {
    stip_structure_traversal st;
    stip_structure_traversal_init(&st,0);
    stip_structure_traversal_override_single(&st,
                                             STEnforceObserverWalk,
                                             &substitute_enforce_annanised_walk);
    stip_traverse_structure(si,&st);
  }

  TraceFunctionExit(__func__);
  TraceFunctionResultEnd();
}
Exemple #6
0
/* Initialise the solving machinery with Vaulting Kings
 * @param si root slice of the solving machinery
 * @param side for whom
 */
void vaulting_kings_initalise_solving(slice_index si, Side side)
{
  TraceFunctionEntry(__func__);
  TraceFunctionParam("%u",si);
  TraceEnumerator(Side,side,"");
  TraceFunctionParamListEnd();

  if (nr_king_vaulters[side]==0)
  {
    king_vaulters[side][0] = EquiHopper;
    nr_king_vaulters[side] = 1;
  }

  solving_instrument_move_generation(si,side,STVaultingKingsMovesForPieceGenerator);

  stip_instrument_is_square_observed_testing(si,side,STVaultingKingIsSquareObserved);

  stip_instrument_observation_validation(si,side,STVaultingKingsEnforceObserverWalk);
  stip_instrument_check_validation(si,side,STVaultingKingsEnforceObserverWalk);

  TraceFunctionExit(__func__);
  TraceFunctionResultEnd();
}
Exemple #7
0
/* Inialise the solving machinery with Ultra-Patrol Chess
 * @param si identifies root slice of solving machinery
 */
void ultrapatrol_initialise_solving(slice_index si)
{
  solving_instrument_move_generation(si,nr_sides,STUltraPatrolMovesForPieceGenerator);
  stip_instrument_observation_validation(si,nr_sides,STUltraPatrolMovesForPieceGenerator);
  stip_instrument_check_validation(si,nr_sides,STUltraPatrolMovesForPieceGenerator);
}