Я делаю личный проект "Упаковка ленты", и я застрял.
У меня есть N
блоки произвольного размера.Мне нужно поместить все N блоков внутри ленты, чтобы иметь как можно меньшую высоту.
Это визуальный результат, который я сейчас получаю (без части else
) .
Все работает для первой строки на ленте, проблема в том, что нужно печатать другие блоки поверх блоков, уже находящихся на ленте.Я попробовал несколько вещей, но все еще ничего (я поставлю последнюю «версию» ниже).
public void algoGlouton(Graphics g) {
ArrayList<Bloc> listBlocRemaining = (ArrayList<Bloc>) blocksList.clone();
int offsetX = 13;
int offsetY = 600;
int widthAvailable= 0;
int smallestHeight= 300;
for (Bloc b : blocksList.clone) {
if(widthRemaining + b.getWidth () < ribbon.getWidth ()) {
widthAvailable += b.getWidth();
g.setColor(b.getColor());
g.fillRect(offsetX, offsetY - b.getHeight(), b.getWidth(), b.getHeight());
listBlocksIntoRibbon.add(b);
b.setX(offsetX);
b.setY(offsetY - b.getHauteur());
offsetX += b.getLargeur();
} else { //Below is the mess
// We search the smallest height
for (Bloc b1 : listBlocksIntoRibbon) {
if (b1.getHauteur() < smallestHeight) {
//when we have the smallest, we go through the blocks remaining
for (Bloc b2 : listBlocRemaining) {
// PlaceRemaining is an int into the block class and its equal to his width
// we see if the block can fit above the smallest height
if (b1.getPlaceRemaining() > b2.getWidth()){
b2.setX(b1.getX());
b2.setY(b1.getHeight() - b2.getHeight());
g.setColor(b.getColor());
g.fillRect(b1.getX(), b1.getHeight() - b2.getHeight(), b2.getWidth(), b2.getHeight());
}
}
}
}
}
}
Я действительно потерян сейчас, я сделал все возможное, чтобы решить эту проблему, но мне нужна помощьидти дальше.