Пример #1
0
 public Field Clone()
 {
     var temp = new Field();
     for (var i=0;i<TOTAL;i++)
     {
         temp._cells[i] = _cells[i];
     }
     return temp;
 }
Пример #2
0
        static void Main(string[] args)
        {
            var field = new Field();

            while (!field.GameOver)
            {
                Console.WriteLine(field.ToString());
                field.UserMove();
                field.CPUMove();
            }

            Console.WriteLine(field.ToString());
        }
Пример #3
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");
        }