示例#1
0
    public void GeneratesRandomPiecesWithSimilarProbability()
    {
        var sampleSize = 1000;
        var provider   = new BalancedRandomPieceProvider();
        var pieceCount = new Dictionary <PieceType, int>();

        for (int i = 0; i < sampleSize; i++)
        {
            var pieceType = provider.GetPiece().Type;

            if (pieceCount.ContainsKey(pieceType))
            {
                pieceCount[pieceType] += 1;
            }
            else
            {
                pieceCount[pieceType] = 1;
            }
        }

        var averageCount = (float)sampleSize / (float)AvailablePieces.All().Length;

        foreach (float count in pieceCount.Values)
        {
            var difference = (count - averageCount) / averageCount;
            Assert.True(Math.Abs(difference) < 0.05f);
        }
    }
示例#2
0
 //Tell the player to randomly play a piece on the board
 static void RandomPlayPiece(ref Player player, ref Board board, ref AvailablePieces available)
 {
     int[] location = player.ai.RandomPlayPiece(board, player.selectedPiece, available);
     board.SetPiece(player.selectedPiece, location[0], location[1]);
     player.Turns        += 1;
     player.selectedPiece = null;
 }
示例#3
0
        //Pit to AI models against eachother with search depth 0
        static void QuickPlay(ref DNA p1, ref DNA p2)
        {
            AvailablePieces available    = new AvailablePieces();
            Board           board        = new Board();
            Player          player1      = new Player("Player 1", ref p1);
            Player          player2      = new Player("Player 2", ref p2);
            int             player1First = rnd.Next(0, 2);

            if (player1First == 0)
            {
                player1.active = true;
                player2.active = false;
                QuickGivePiece(ref player1, ref player2, ref board, ref available);
            }
            else
            {
                player1.active = false;
                player2.active = true;
                QuickGivePiece(ref player2, ref player1, ref board, ref available);
            }
            while (true)
            {
                if (player1.active)
                {
                    QuickPlayPiece(ref player1, ref board, ref available);
                    if (board.CheckWin())
                    {
                        GameWon(ref player1, ref player2); break;
                    }
                    if (available.GetRemainingCount() == 0)
                    {
                        GameTie(ref player1, ref player2); break;
                    }
                    QuickGivePiece(ref player1, ref player2, ref board, ref available);
                }
                else
                {
                    QuickPlayPiece(ref player2, ref board, ref available);
                    if (board.CheckWin())
                    {
                        GameWon(ref player2, ref player1); break;
                    }
                    if (available.GetRemainingCount() == 0)
                    {
                        GameTie(ref player1, ref player2); break;
                    }
                    QuickGivePiece(ref player2, ref player1, ref board, ref available);
                }
            }
        }
示例#4
0
        //Tell player to play a piece on the board (MinMax)
        static Piece PlayPiece(ref Player player, ref Board board, ref AvailablePieces available)
        {
            object[] play       = player.ai.MinMaxPlay(board, player.selectedPiece, available, 2, 0, false);
            int[]    location   = (int[])play[0];
            Piece    piece_play = (Piece)play[1];

            board.SetPiece(player.selectedPiece, location[0], location[1]);
            player.Turns        += 1;
            player.selectedPiece = null;
            if (piece_play != null)
            {
                available.RemovePiece(piece_play);
            }
            return(piece_play);
        }
示例#5
0
        //Play AI against another AI with standard search depth (calls MinMax function)
        static void PlayAgainstSmartAI(ref Player player1, ref Player player2)
        {
            AvailablePieces available    = new AvailablePieces();
            Board           board        = new Board();
            int             player1First = rnd.Next(0, 2);

            if (player1First == 0)
            {
                player1.active = true;
                player2.active = false;
                RandomGivePiece(ref player1, ref player2, ref board, ref available);
            }
            else
            {
                player1.active = false;
                player2.active = true;
                RandomGivePiece(ref player2, ref player1, ref board, ref available);
            }
            while (true)
            {
                if (player1.active)
                {
                    Piece give = PlayPiece(ref player1, ref board, ref available);
                    if (board.CheckWin())
                    {
                        GameWon(ref player1, ref player2); break;
                    }
                    if (available.GetRemainingCount() == 0)
                    {
                        GameTie(ref player1, ref player2); break;
                    }
                    GivePiece(ref player1, ref player2, ref give);
                }
                else
                {
                    Piece give = PlayPiece(ref player2, ref board, ref available);
                    if (board.CheckWin())
                    {
                        GameWon(ref player2, ref player1); break;
                    }
                    if (available.GetRemainingCount() == 0)
                    {
                        GameTie(ref player1, ref player2); break;
                    }
                    GivePiece(ref player2, ref player1, ref give);
                }
            }
        }
示例#6
0
        //Tell the player to randomly give the opposing player a piece
        static void RandomGivePiece(ref Player picker, ref Player receiver, ref Board board, ref AvailablePieces available)
        {
            Piece p = picker.ai.RandomPickPiece(board, available);

            receiver.selectedPiece = p;
            picker.Turns          += 1;
            available.RemovePiece(p);
            ChangeTurns(ref picker, ref receiver);
        }