/// <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)]);
        }
Beispiel #2
0
 // Use this for initialization
 void Start()
 {
     grid    = GameObject.FindObjectOfType <TicTacToeGrid>();
     playing = true;
 }
Beispiel #3
0
        /// <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)]);
        }