Пример #1
0
        /// <summary>
        /// Creates a new instance of the MaxN Algorithm for a board
        /// </summary>
        /// <param name="board">Board</param>
        public MPMix(Board board, double offensiveThreshold, double defensiveThreshold) : base(board)
        {
            maxNAlgorithm      = new MaxN(board);
            paranoidAlgorithm  = new Paranoid(board);
            offensiveAlgorithm = new Offensive(board);

            this.offensiveThreshold = offensiveThreshold;
            this.defensiveThreshold = defensiveThreshold;
        }
 public ComputerPlayer(sbyte team, Personality personality, Difficulty difficulty, BoardView boardView)
     : base(team, false, boardView)
 {
     Difficulty         = difficulty;
     Personality        = personality;
     maxNAlgorithm      = new MaxN(boardView.Board);
     paranoidAlgorithm  = new Paranoid(boardView.Board);
     offensiveAlgorithm = new Offensive(boardView.Board);
     mixAlgorithm       = new MPMix(boardView.Board, 0.5, 0.5);
     mctsAlgorithm      = new MCTS(boardView.Board);
 }
Пример #3
0
        public static sbyte SimulateGame()
        {
            Board     board     = new Board();
            Algorithm mpMix     = new MPMix(board, 1, 0.5);
            Algorithm maxN      = new MaxN(board);
            Algorithm paranoid  = new Paranoid(board);
            Algorithm offensive = new Offensive(board);
            Algorithm mcts      = new MCTS(board);

            int   doublesCount = 0;
            sbyte lastTeam     = 0;
            sbyte team         = 0;
            int   turns        = 0;

            while (!board.IsGameOver())
            {
                Console.Title = turns.ToString();
                lastTeam      = team;

                DiceRoll roll = board.GetRandomRoll();
                Move     m    = null;
                switch (team)
                {
                case 0:
                    m = board.ThinkBest(mcts, roll, team, 0);
                    break;

                case 1:
                    m = board.ThinkBest(maxN, roll, team, 0);
                    break;

                case 2:
                    m = board.ThinkBest(mcts, roll, team, 0);
                    break;

                case 3:
                    m = board.ThinkBest(mcts, roll, team, 0);
                    break;
                }
                if (m != null)
                {
                    board.PerformMove(m);
                }

                if (roll.IsDoubles())
                {
                    doublesCount++;
                    if (doublesCount >= 3)
                    {
                        board.RemoveFrontMarble(team);
                        doublesCount = 0;
                        team         = board.NextPlayer(team);
                        turns++;
                    }
                }
                else
                {
                    doublesCount = 0;
                    team         = board.NextPlayer(team);
                    turns++;
                }
            }

            Console.WriteLine("{0} won ({1} turns)", GetName(lastTeam), turns);
            return(lastTeam);
        }