示例#1
0
        public int Minimax(Field field, Cell cell, int depth = 1)
        {
            if (field.GameOver)
            {
                var eval = field.Evaluate(depth);
                return eval;
            }

            var moves = new List<EvaluatedMove>();

            foreach (var move in field.AvailableMoves)
            {
                var clone = field.Clone().Set(move, cell);

                var evaluation = new EvaluatedMove()
                {
                    Move = move,
                    Score = Minimax(clone, cell.Reverse(), depth + 1)
                };
                moves.Add(evaluation);
            }
            { }
            if (cell == Cell.O)
            {
                var move = moves.Max();
                _move = move.Move;
                return move.Score;
            }
            if (cell == Cell.X)
            {
                var move = moves.Min();
                _move = move.Move;
                return move.Score;
            }
            throw new Exception("cant evaluate empty cell");
        }