Beispiel #1
0
        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));
        }
Beispiel #2
0
        private FinalPiece GetBestPiece(List <FinalPiece> pieces)
        {
            FinalPiece finalPiece = pieces.First();

            foreach (FinalPiece piece in pieces)
            {
                if (piece.GetWeight() < finalPiece.GetWeight())
                {
                    finalPiece = piece;
                }
            }

            return(finalPiece);
        }