예제 #1
0
    /// <summary>
    /// 电脑落子
    /// </summary>
    void computerPlacePiece()
    {
        MCTS mcts = new MCTS(gameState, N_SIMULATION_TIMES);
        GobangMove nextMove;
        MCTSGameMove MCTSMove = mcts.decideMove();
        if (MCTSMove is GobangMove)
        {
            nextMove = (GobangMove) MCTSMove;
            GobangPoint point = nextMove.point;
            if (gameState.boardState[point.coord[0], point.coord[1]].pieceType != PieceType.Unplaced)
                Debug.LogWarning("Selected a point already had a piece.");
            point.pieceType = PieceType.Computer;
            gameState.placePiece(new GobangMove(point));
            paintCube(point.coord, computerColor);
            GameResult result = gameState.judgeLastMove();
            if (result != GameResult.NoOutcome)
            {
                gameRunning = false;
                reminder.GetComponent<CanvasGroup>().alpha = 1;
                if (result == GameResult.ComputerWon) showReminder("胜败乃兵家常事\n大侠请重新来过");
                else if (result == GameResult.Draw) showReminder("平局");
            }

            if (gameRunning) hideReminder();
            playersTurn = true;
        }
        else
        {
            Debug.LogError("Cannot convert variable nextMove to type GobangMove.");
        }
    }
예제 #2
0
    /// <summary>
    /// 玩家落子
    /// </summary>
    /// <param name="mousePos">鼠标位置</param>
    void playerPlacePiece(Vector3 mousePos)
    {
        int[] cubeCoord = physicsCast(mousePos);
        if (cubeCoord == null) return;
        if (gameState.getPieceType(cubeCoord) != PieceType.Unplaced) return;
        GobangPoint point = gameState.boardState[cubeCoord[0], cubeCoord[1]];
        point.pieceType = PieceType.Player;
        GobangMove move = new GobangMove(point);
        gameState.placePiece(move);
        paintCube(cubeCoord, playerColor);
        GameResult result = gameState.judgeLastMove();
        if (result != GameResult.NoOutcome)
        {
            gameRunning = false;
            reminder.GetComponent<CanvasGroup>().alpha = 1;
            if (result == GameResult.PlayerWon) showReminder("你赢了!");
            else if (result == GameResult.Draw) showReminder("平局");
        }

        playersTurn = false;
    }