public int Get(HeuristicValues values, Move move) { var currentPlayer = values.CurrentQueenNeighbours; var opponentPlayer = values.OpponentQueenNeighbours; var score = 15 * (opponentPlayer - currentPlayer); return(score); }
public int Get(HeuristicValues values, Move move) { var occupied = _hive.Cells.WherePlayerOccupies(move.Tile.PlayerId).Count(); if (occupied == 1 && (move.Tile.Creature == Creatures.Ant || move.Tile.Creature == Creatures.Queen)) { return(-HeuristicValues.ScoreMax); } return(0); }
public int Get(HeuristicValues values, Move move) { if (move.Tile.IsCreature(Creatures.Beetle) && values.MoveToLocation.HasQueen(values.OpponentId) && values.OpponentQueenNeighbours < 4) { return(30); } return(0); }
public int Get(HeuristicValues values, Move move) { if (values.GameStatus == GameStatus.Player0Win && move.Tile.PlayerId == 0 || values.GameStatus == GameStatus.Player1Win && move.Tile.PlayerId == 1 || values.GameStatus == GameStatus.Draw) { return(2 * HeuristicValues.ScoreMax); } return(0); }
public int Get(HeuristicValues values, Move move) { var((_, _, creature), _) = move; if (creature != Creatures.Beetle) { return(0); } if (_previousMoves.Peek().Coords == null && values.TilesPlaced < 2) { return(1); } return(-2); }
public int Get(HeuristicValues values, Move move) { var((_, _, creature), _) = move; if (creature != Creatures.Ant) { return(0); } if (values.TilesPlaced > 3) { return(2 * values.MoveNeighbours.Length); } return(-1); }
public override bool HeuristicApplies(TekBoard board, TekField field) { Region.Clear(); Region.AddField(field); foreach (TekField field2 in field.Influencers) { Region.AddField(field2); foreach (TekField field3 in field.Influencers) { if (field != field2 && field != field3 && field2 != field3) { if (Region.IsTriplet(field3)) { Region.AddField(field3); AddHeuristicFields(Region.Fields); AddValues(Region.GetTotalPossibleValues()); // determine affected fields foreach (TekField f in field.CommonInfluencers(field2, field3)) { foreach (int value in f.PossibleValues) { if (HeuristicValues.Contains(value)) { AddAffectedField(f); break; } } } if (AffectedFields.Count > 0) { return(true); } else { Reset(); } } } } Region.RemoveField(field2); } return(false); }
public int Get(HeuristicValues values, Move move) { var toOpponentQueen = values.MoveNeighbours.Any(c => c.HasQueen(values.OpponentId)); var fromOpponentQueen = values.MoveFromLocation != null && values.MoveFromNeighbours.Any(c => c.HasQueen(values.OpponentId)); if (fromOpponentQueen && toOpponentQueen) { return(-2 * values.MoveNeighbours.Length); } if (toOpponentQueen && (values.OpponentQueenNeighbours < 4 || values.MoveNeighbours.Length < 3)) { return(-2 * values.MoveNeighbours.Length); } if (fromOpponentQueen) { return(-values.MoveNeighbours.Length); } if (values.MoveNeighbours.Length > 1) { return(2); } return(0); }
public override bool HeuristicApplies(TekBoard board, TekField field) { HeuristicAction action = HeuristicAction.haNone; HeuristicAction found = HeuristicAction.haNone; HeuristicValues.Clear(); // clear any values already set foreach (int value in new List <int>(field.PossibleValues)) // can't use the list directly in foreach { switch (action = TryValue(board, field, value)) { case HeuristicAction.haSetValue: HeuristicValues.Clear(); AddValue(value); found = action; break; case HeuristicAction.haExcludeValue: AddValue(value); found = action; break; } if (action == HeuristicAction.haSetValue) // solution found, so we can stop { break; } // if you haven't found a solution, it doesnt hurt to continue maybe you can find a solution // or maybe you can add a second value to exclude } if (found == HeuristicAction.haSetValue || found == HeuristicAction.haExcludeValue) { SetHeuristicAction(found); AddHeuristicField(field); AddAffectedField(field); } return(AffectedFields.Count > 0); }