Ejemplo n.º 1
0
    public int Get(HeuristicValues values, Move move)
    {
        var currentPlayer  = values.CurrentQueenNeighbours;
        var opponentPlayer = values.OpponentQueenNeighbours;

        var score = 15 * (opponentPlayer - currentPlayer);

        return(score);
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
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);
    }
Ejemplo n.º 4
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);
    }
Ejemplo n.º 5
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);
 }
Ejemplo n.º 6
0
 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);
 }
Ejemplo n.º 7
0
 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);
 }
Ejemplo n.º 8
0
    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);
    }
Ejemplo n.º 9
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);
        }