/// <inheritdoc /> public GridSlot ChooseSlot(TicTacToeGrid grid) { //look for a row, column or diagonal that would be almost full var lines = grid.Rows.ToList(); lines.AddRange(grid.Cols); lines.AddRange(grid.Diagonals); //for us foreach (var line in lines) { GridSlot slot; if (ChooseRemainingFreeSlot(line, Symbol.SymbolType.Cross, out slot)) { return(slot); } } //for player foreach (var line in lines) { GridSlot slot; if (ChooseRemainingFreeSlot(line, Symbol.SymbolType.Circle, out slot)) { return(slot); } } //If a corner is available, choose a corner var cornersIndexes = new [] { 0, 2, 6, 8 }; var cornersFreeSlots = grid.Slots.ByIndexes(cornersIndexes).Where(s => s.IsFree).ToList(); if (cornersFreeSlots.Any()) { return(cornersFreeSlots[new Random(DateTime.Now.Millisecond).Next(cornersFreeSlots.Count())]); } //in this end, choose a random slot if all other cases are not encountered var freeSlots = grid.Slots.Where(s => s.IsFree).ToList(); return(freeSlots[new Random(DateTime.Now.Millisecond).Next(freeSlots.Count)]); }
// Use this for initialization void Start() { grid = GameObject.FindObjectOfType <TicTacToeGrid>(); playing = true; }
/// <inheritdoc /> public GridSlot ChooseSlot(TicTacToeGrid grid) { var freeSlots = grid.Slots.Where(s => s.IsFree).ToList(); return(freeSlots[new Random(DateTime.Now.Millisecond).Next(freeSlots.Count)]); }