public Action GetBestPlacement(State state) { Queue <FinalPiece> finalPieces = new Queue <FinalPiece>( GenerateAllFinalPossibilities(state, state.currentPiece).OrderBy(finalPiece => finalPiece.GetWeight())); if (state.currentHeldPiece != PieceType.Empty) { FinalPiece heldPiece = GetBestPiece(GenerateAllFinalPossibilities(state, new Piece(state.currentHeldPiece))); if (heldPiece.GetWeight() < finalPieces.Peek().GetWeight()) { return(new Action(ActionType.Hold, null)); } } else { return(new Action(ActionType.Hold, null)); } Stack <PathNode> finalPath = null; while (finalPath == null) { if (finalPieces.Count <= 0) { return(null); } finalPath = Pathfinder.pathfinder.FindPath(state, state.currentPiece, finalPieces.Dequeue().Piece); } return(new Action(ActionType.Place, finalPath)); }
private FinalPiece GetBestPiece(List <FinalPiece> pieces) { FinalPiece finalPiece = pieces.First(); foreach (FinalPiece piece in pieces) { if (piece.GetWeight() < finalPiece.GetWeight()) { finalPiece = piece; } } return(finalPiece); }