public UnitMoveInfo(SimpleUnit unit, UnitMove unitMove, float distance) { this.unit = unit; this.unitMove = unitMove; this.distance = distance; }
int PerformMiniMax(GridState gridState, int depth, int alpha, int beta) { if (depth == 0 || gridState.IsGameOver()) { return(gridState.Evaluate()); } if (gridState.CurrentSimple.UnitSide == UnitSide.MAX_UNIT) { List <UnitMove> legalMoves = gridState.GetLegalMoves(); gridState.EvaluateMoves(legalMoves); legalMoves = legalMoves.OrderByDescending(move => move.MoveEvaluation).ToList(); for (int i = 0, len = legalMoves.Count; i < len; ++i) { GridState newGridState = new GridState(gridState); newGridState.MoveUnit(legalMoves[i]); int evaluation = PerformMiniMax(newGridState, depth - 1, alpha, beta); if (evaluation > alpha) { alpha = evaluation; if (depth == depthSearch) { bestUnitMove = legalMoves[i]; } } if (beta <= alpha) { break; } } return(alpha); } else { List <UnitMove> legalMoves = gridState.GetLegalMoves(); gridState.EvaluateMoves(legalMoves); legalMoves = legalMoves.OrderByDescending(move => move.MoveEvaluation).ToList(); for (int i = 0, len = legalMoves.Count; i < len; ++i) { GridState newGridState = new GridState(gridState); newGridState.MoveUnit(legalMoves[i]); int evaluation = PerformMiniMax(newGridState, depth - 1, alpha, beta); if (evaluation < beta) { beta = evaluation; } if (beta <= alpha) { break; } } return(beta); } }