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); }
public Cell(GameLogic.eSign i_Value) { m_Value = i_Value; this.Available = true; }
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); }
public Player(bool i_IsComputer, GameLogic.eSign i_Sign) { IsComputer = i_IsComputer; Sign = i_Sign; Score = 0; }