/// <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."); } }
/// <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; }