Exemplo n.º 1
0
        private Pos findBestMove(Board i_Board, GameLogic.eSign i_PlayerSign)
        {
            List <Pos> possibleMoves = i_Board.AllEmptyCells();

            if (possibleMoves.Count == i_Board.Size * i_Board.Size)
            {
                return(new Pos(GameLogic.sr_Rnd.Next(0, i_Board.Size - 1), GameLogic.sr_Rnd.Next(0, i_Board.Size - 1)));
            }

            List <int> movesScore = new List <int>(possibleMoves.Count);

            foreach (Pos currentPosition in possibleMoves)
            {
                i_Board[currentPosition].Value = Sign;
                movesScore.Add(getPlayerMoveScore(i_Board));
                i_Board[currentPosition].Value = GameLogic.eSign.Empty;
            }

            int bestScore      = movesScore.Min();
            int indexBestScore = movesScore.IndexOf(bestScore);
            Pos result         = possibleMoves[indexBestScore];

            ///make sure next move don't make the AI lose
            while (moveMakePlayerLose(i_Board, result) == true)
            {
                if (possibleMoves.Count == 1)
                {
                    break;
                }

                possibleMoves.RemoveAt(indexBestScore);
                movesScore.RemoveAt(indexBestScore);
                bestScore      = movesScore.Min();
                indexBestScore = movesScore.IndexOf(bestScore);
                result         = possibleMoves[indexBestScore];
            }

            return(result);
        }
Exemplo n.º 2
0
 public Cell(GameLogic.eSign i_Value)
 {
     m_Value        = i_Value;
     this.Available = true;
 }
Exemplo n.º 3
0
        public int GetSequenceCounter(int i_SequenceSize, GameLogic.eSign i_Sign)
        {
            int counter = 0;

            for (int i = 0; i <= r_Matrix.GetUpperBound(0) + 1 - i_SequenceSize; i++)
            {
                for (int j = 0; j <= r_Matrix.GetUpperBound(1) + 1 - i_SequenceSize; j++)
                {
                    Cell currentCell = this[i, j];
                    if (currentCell.Value == GameLogic.eSign.Empty || currentCell.Value != i_Sign)
                    {
                        continue;
                    }

                    if (i_SequenceSize == 1)
                    {
                        if (currentCell.Value == i_Sign)
                        {
                            counter++;
                        }
                    }
                    else
                    {
                        int tempCounter = 1;
                        for (int k = 1; k < i_SequenceSize; k++)
                        {
                            if (this[i, j + k].Value == i_Sign)
                            {
                                tempCounter++;
                            }
                            else
                            {
                                break;
                            }
                        }

                        if (tempCounter == i_SequenceSize)
                        {
                            counter++;
                        }

                        tempCounter = 1;
                        for (int k = 1; k < i_SequenceSize; k++)
                        {
                            if (this[i + k, j].Value == i_Sign)
                            {
                                tempCounter++;
                            }
                            else
                            {
                                break;
                            }
                        }

                        if (tempCounter == i_SequenceSize)
                        {
                            counter++;
                        }

                        tempCounter = 1;
                        for (int k = 1; k < i_SequenceSize; k++)
                        {
                            if (this[i + k, j + k].Value == i_Sign)
                            {
                                tempCounter++;
                            }
                            else
                            {
                                break;
                            }
                        }

                        if (tempCounter == i_SequenceSize)
                        {
                            counter++;
                        }
                    }
                }
            }

            return(counter);
        }
Exemplo n.º 4
0
 public Player(bool i_IsComputer, GameLogic.eSign i_Sign)
 {
     IsComputer = i_IsComputer;
     Sign       = i_Sign;
     Score      = 0;
 }