останній тиждень я працював над системою інвентаризації Unity3D. Спочатку я отримав допомогу від хлопців у Design3, але це було не так довго, поки ми не розкололи шлях, тому що мені дуже не сподобалося, як вони зробили свій код, у нього не було жодного запаху OOP.
Я зробив наступні кроки вперед - елементи займають більше одного слота, вдосконалена система розміщення (предмети намагаються зробити все можливе, щоб найкраще підійти), локальна система миші (миша потрапляє в пастку в зоні активного мішка) тощо
Ось демонстрація моєї роботи.
Те, що ми хотіли б мати у нашій грі, - це функція автоматичної організації, а не автоматичне сортування. Ми хочемо цю функцію, оскільки наш інвентар буде в режимі реального часу - не так, як в Resident Evil 1,2,3 і т.д. А тепер уявіть себе у стихій ситуації, оточеній зомбі, і у вас немає куль, ви озираєтесь, бачите, що поблизу на землі є кулі, тож ви йдете за ними і намагаєтеся забрати їх, але вони не не підходить! ви подивитеся на свій інвентар і дізнаєтесь, що якщо ви реорганізуєте деякі елементи, він підійде! - тепер гравець - у цій ситуації не встигає реорганізуватися, тому що він оточений зомбі і помре, якщо він зупиниться і організує інвентар для створення місця (запам’ятайте інвентар в режимі реального часу, не робивши пауз) - не хотів би ' t приємно, щоб це відбувалося автоматично? - Так!
(Я вважаю, що це було реалізовано в деяких іграх, таких як облога Dungeon або щось подібне, тому впевнений, що це можливо)
Погляньте, наприклад, на цю картинку:
Так, якщо ви автоматично сортуєте проблему, ви отримаєте пробіли, але це погано, тому що: 1– Дорога: для звільнення цих пробілів не потрібна ціла операція сортування, на першому малюнку просто пересуньте червоний елемент на знизу вліво, і ви отримуєте ті самі пробіли, які отримали від автоматичного сортування. 2- Це гравцеві дратує: "Хто F сказав вам, щоб ви замовили мої речі?"
Я не прошу "Як написати код" для цього, я просто прошу деякі вказівки, куди шукати, які алгоритми задіяні? Це щось пов’язане з графіками та найкоротшими матеріалами шляху? Я сподіваюся, не тому, що мені не вдалося продовжити навчання в коледжі: / Але навіть якщо це так, просто скажіть мені, і я дізнаюся, що стосується цього.
Зауважте, що може бути більше ніж одне рішення. Тому я здогадуюсь, що перше, що я повинен зробити, - це зрозуміти, чи ситуація є "вирішуваною" - якщо я знаю, як визначити, ситуація вирішувана чи ні, то я можу "вирішити" її. Мені просто потрібно знати умови, які роблять це "вирішуваним". І я вважаю, що для цього повинен бути якийсь алгоритм / структура даних.
Ось картинка для декількох рішень спроби вмістити елемент 1x3:
Стрілки показують лише одне з рішень, але якщо ви подивитеся, ви знайдете більше одного. Це те, що в кінцевому рахунку я не сортую автоматично, але знаходжу рішення та застосовую його.
Зауважте, що якщо я витрачу на це час, я придумаю спосіб її вирішити, але це був би не найкращий спосіб, це як, тримаючи колесо автомобіля ногами замість рук! XD Або просто, як намагатися вирішити проблему, яка потребує масивів, але ви ще не знаєте про їх існування! То який правильний підхід до цього?
Оновлення з коментаря
@Stephen Я справді не є гуру в Alogs, ви згадали про «рюкзак» та @BlueRaja - Денні Пфлюгхофт згадав про альго-2D-упаковку. Вони якось споріднені / однакові? - Я все ще розгублений, як слід підходити до цього.
Так, я вже використовую "евристику", але я не знав, що це таке: D він знаходить перший доступний слот, і дивись, чи підходить цей предмет.
Я не знаю, чи вдасться замовити елементи на основі їх «громіздкості» (яку я називаю nSlotsRequired = nRowsReq * nColsRec), оскільки у вас є, наприклад, елементи 2х2 та 1x4, вони мають однакову об'ємність, але різні форми і матимуть по-різному впливає на те, як пройдуть інші предмети. ТАК... :/
Я переглянув це відео, мені дуже сподобалась ідея упаковки, але мені цікаво, як це зробити, оскільки інвентар 2D. Я навіть не впевнений, що пакування бін є ключовим тут, бо, правда, я можу мати більше ніж один мішок, але в нашій грі це буде просто один мішок. Отже, справа в тому, щоб помістити предмети в «одну» сумку і не більше того. Тож приклади в цьому відео (труби та шини) насправді не відповідають моїй проблемі. Також переглянув деякі речі про цю рюкзаку, я не побачив, як "значення" пов'язане з моїми предметами / інвентарем, але я здогадуюсь, що "вага" такий же, як громіздкість, не впевнений.