Esempio n. 1
0
        /* methods. */
        public void Start()
        {
            InitBoard();
            /* init score. */
            board.SetScore(1, 0);
            board.SetScore(2, 0);
            /* init player tiles. */
            Piece p1 = new Piece(4, 3, player1);
            Piece p2 = new Piece(3, 4, player1);
            Piece p3 = new Piece(3, 3, player2);
            Piece p4 = new Piece(4, 4, player2);

            board.AddPiece(p1);
            board.AddPiece(p2);
            board.AddPiece(p3);
            board.AddPiece(p4);
            state         = GameState.waitPlayer;
            currentPlayer = player1;
            /* set bots boards. */
            player1.SetBoard(board);
            player2.SetBoard(board);
            /* launch the thread that will let the 2 bots to play. */
            botThread = new Thread(new ParameterizedThreadStart(BotPlay));
            botThread.Start(cancelToken);
        }
Esempio n. 2
0
        private void BotPlay(object token)
        {
            Console.WriteLine("[CCGame] worker thread started!");
            CancellationTokenSource cancelToken = (CancellationTokenSource)token;

            lastMove = null;
            while (board.IsFinished(currentPlayer) == false && state != GameState.stopped &&
                   cancelToken.IsCancellationRequested != true)
            {
                /* let the current player play. */
                currentPlayer.SetBoard(board);
                Thread.Sleep(1000);
                /* obtain move. */
                Piece move = currentPlayer.MakeMove();
                /* print new move. */
                //Console.WriteLine("Player:" + currentPlayer.GetColor().ToString() + " moved " + move.X + ":" + move.Y);
                /* modify board. */
                pieceMutex.WaitOne();
                board.AddPiece(move);
                List <Piece> neigh = board.GetPieceNeighbors(move);
                foreach (Piece n in neigh)
                {
                    board.AddPiece(move, n);
                }
                lastMove = move;
                /* release board mutex. */
                pieceMutex.ReleaseMutex();
                /**/
                if (currentPlayer.GetType() == typeof(MCTSPlayer))
                {
                    currentPlayer.SetBoard(board);
                }
                /* set next player. */
                if (currentPlayer == player1)
                {
                    currentPlayer = player2;
                }
                else
                {
                    currentPlayer = player1;
                }
                // Hopefully, one day, you will get rid of this call.
                GC.Collect();
            }
            state = GameState.stopped;
            Console.WriteLine("[CCGame] Game thread exit!");
        }