Функция за подсказка, базирана на движения на AI

правя игра, подобна на Greedy Spiders. Накратко казано, това е походова игра, в която има един или повече паяци, които се опитват да стигнат до мухите, за да ги изядат. Задачата на потребителя е да предотврати това, като отреже малка част от мрежата, за да освободи мухата или да хване в капан паяка. Има функция за подсказка, която показва как да завършите нивото и да освободите мухите или да хванете паяците в капан с възможно най-малко съкращения (движения).

Използвам алгоритъм A*, за да намеря най-краткия път до една от мухите. Алгоритъмът все още не е много интелигентен, тъй като намира само най-краткия път и не взема предвид изрязването на потребителя.

Това, което се чудя, е как да внедря функцията за подсказване. Това, за което мисля в момента, е да използвам дърво на играта и да оценя всеки резултат и да избера най-добрия, но не съм сигурен дали това е най-добрият подход.

Какво бихте препоръчали за внедряване на такава функция?

PS. Не се опитвам да копирам приложението. Искам да направя нещо подобно със собствените си усилия, за да мога да стана по-добър в решаването на проблеми. Искам идея, не решение...


person axel    schedule 25.10.2013    source източник
comment
Значи се опитвате да копирате нечие друго приложение и вместо да го копирате със собствените си усилия, се опитвате да накарате SO да ви каже как да го направите?   -  person nhgrif    schedule 26.10.2013
comment
Вероятно ще има относително малко възможности за всяка игра, която се побира на екрана. Просто бих ги пробвал всичките и бих избрал най-доброто.   -  person IVlad    schedule 26.10.2013
comment
Хей, пич, не искам внедряване или псевдокод... Просто идея..   -  person axel    schedule 26.10.2013
comment
Въпрос, който не изисква код, вероятно не е мястото тук. Вместо това опитайте programmers.stackexchange.com.   -  person Jon Reid    schedule 31.12.2013


Отговори (1)


Ето моето предположение.

  1. Във всеки ход използвайте A* с всички паяци, за да намерите най-краткия път до най-близката муха за всички тях. По някакъв начин запазете всички ръбове в някаква подредена структура от данни за всеки най-кратък път за всеки паяк. Ако паяк има няколко достъпни пътя, които споделят най-късата дължина на пътя, запазете всички. напр. ако един паяк има 3 достъпни пътя за 3 различни мухи и всички тези пътища имат дължина 2, запазете всички.

  2. „Сортирайте“ пътищата, намерени в стъпка 1, по дължина на пътя. Намерете най-късите сред тях (тези с минимална дължина). Нека ги наречем най-кратките най-кратки пътища.

  3. Сред всички тези най-кратки най-кратки пътища, опитайте се да намерите край, който е най-често срещан (най-висока честота) сред всички пътища. Кажете на играча да отреже този конкретен ръб, ако има такъв. Ако не съществува такъв „общ“ ръб, кажете на играча да отреже последния ръб по един от най-кратките пътища, тъй като това ще даде най-голям шанс за освобождаване на една или повече мухи наведнъж.

Нямам твърдо доказателство, че това работи. Изглежда, че това е оптимално нещо, което трябва да направите като играч.

Идеята за намиране на „общи ръбове“ между множество най-кратки пътища дойде на ум като начин за изпълнение на няколко важни цели в един ход, като блокиране на няколко паяка наведнъж (или множество пътища на един паяк наведнъж). Може да има по-усъвършенствани алгоритми за извършване на това конкретно нещо. В противен случай, ако не съществуват "общи ръбове" (т.е. всички ръбове имат честота == 1), оптималната стратегия изглежда е бавно да се отрежат ръбовете около мухите, които са в най-непосредствена опасност една по една.

person Shashank    schedule 26.10.2013
comment
За тези, които се интересуват, най-добрият начин да намерят възможно най-малко движения е да опитат всички възможни комбинации от разфасовки и инструменти, тъй като честотата не е гаранция за оптимално решение, както показва моят опит. Проблемът е с времето за изпълнение на алгоритъма, което ме принуди да заредя предварително подсказките в xml файл. - person axel; 02.06.2014