Exemplo n.º 1
0
Arquivo: Actor.cs Projeto: Blecki/CCDC
        public virtual void Create(Gem.PropertyBag Properties)
        {
            CurrentAction = null;
            NextAction = null;

            this.Properties = Properties.Clone();
        }
Exemplo n.º 2
0
        public Move GetBestMove(Gem[,] gems, int movesToLookAhead, List<Position> lockedOutPositions)
        {
            if (movesToLookAhead < 1)
                throw new Exception();
            List<Move> possibleMoves = new List<Move>();
            //for now simply return the first match (from the top left) we find
            for (int row = 0; row < 8; row++)
            {
                for (int column = 0; column < 8; column++)
                {
                    Position position = new Position(row, column);
                    if (lockedOutPositions.Contains(position))
                        continue;
                    List<Direction> validDirections = new List<Direction>();
                    if (row > 0)
                        validDirections.Add(Direction.Up);
                    if (row < 7)
                        validDirections.Add(Direction.Down);
                    if (column > 0)
                        validDirections.Add(Direction.Left);
                    if (column < 7)
                        validDirections.Add(Direction.Right);
                    foreach (Direction direction in validDirections)
                    {

                        int newRow = row;
                        int newColumn = column;
                        switch (direction)
                        {
                            case Direction.Up:
                                newRow = row - 1;
                                break;
                            case Direction.Down:
                                newRow = row + 1;
                                break;
                            case Direction.Left:
                                newColumn = column - 1;
                                break;
                            case Direction.Right:
                                newColumn = column + 1;
                                break;
                        }
                        Position newPosition = new Position(newRow, newColumn);
                        if (lockedOutPositions.Contains(newPosition))
                            continue;
                        Gem[,] newArray = (Gem[,])gems.Clone();
                        SwapSlots(newArray, row, column, newRow, newColumn);
                        List<Position> involvedGems = MatchedGemsAt(newArray, new Position(newRow, newColumn));
                        if (involvedGems.Count >= 2)
                            possibleMoves.Add(new Move(new Position(row, column), new Position(newRow, newColumn), involvedGems) { GuaranteedScore = involvedGems.Count * 100 });
                    }
                }
            }
            if (possibleMoves.Count == 0)
                return new Move(new Position(0, 0), new Position(0, 0)) {ValidMove = false};
            Random rand = new Random();
            return possibleMoves[rand.Next(possibleMoves.Count)];
        }