private void AIMoved(MoveMgr.Move move, List <MoveMgr.Move> availableMoves, AIMoveCallback callback) { try { Debug.Assert(null != move); availableMoves.Remove(move); callback(move); } finally { // Release to pool availableMoves.ForEach(delegate(MoveMgr.Move m) { m.Dispose(); }); } }
public IEnumerator GetMove(int playerNum, GameState.PlayerType playerType, AIMoveCallback callback) { MoveMgr.Move bestMove = null; List <MoveMgr.Move> availableMoves = GetPlayableCells(playerNum); yield return(null); switch (playerType) { case GameState.PlayerType.AI_Easy: { bestMove = WorstMove(playerNum, availableMoves); break; } case GameState.PlayerType.AI_Medium: { bestMove = RandomMove(playerNum, availableMoves); break; } case GameState.PlayerType.AI_Hard: { bestMove = BestMove(playerNum, availableMoves); break; } case GameState.PlayerType.AI_Hard_MCTS: { bestMove = BestMove_MCTS(playerNum, availableMoves); break; } default: { Debug.LogAssertion("Unhandled AI type: " + playerType.ToString()); break; } } AIMoved(bestMove, availableMoves, callback); }