Към съдържанието
PN Scripts

Игри

Ботове за изпитване, които доказват, че всяко ниво може да се мине и че основното правило не е по избор

  • PN Scripts
  • 8 мин четене

Всеки дизайнер на нива е пускал ниво, което се е оказало невъзможно при условие, което никой не е пробвал, и всеки е пускал ниво, което се минава, като се пренебрегне хитрото правило, около което е построена играта. Изпитването с хора хваща част от тези случаи, но хората се изморяват, научават нивата и спират да ги виждат. В двете ни големи 3D браузърни игри оставяме ботове да играят по истинските правила отново и отново при всяка промяна, а тестовете се провалят, ако ниво не може да се мине, ако играч, който пренебрегва основното правило, пак печели, или ако кривата на трудност се огъне в грешна посока. Тази статия показва какви са тези ботове, как са направени и какво са хванали.

#Три въпроса, на които ботът може да отговори

  1. Може ли всяко ниво да се мине? Силен бот играе всяко ниво с началното оборудване и трябва да го завърши в определено време. Ако не може, или нивото е счупено, или ботът трябва да стане по-умен, и двете си струва да се знаят, преди играч да го открие.
  2. Има ли значение основното правило? Бот, който пренебрегва главната идея на играта, трябва да загуби. Ако спечели, идеята е украса и играчите ще открият прекия път за минути.
  3. Расте ли трудността разумно? Ботове с различно умение играят всяко ниво с няколко зародиша, а таблица с победи, времена и загуби показва къде кривата има стена или яма.

Нищо от това не работи без симулация, която върви без екран, бързо и детерминирано: правилата не бива да зависят от честотата на екрана или от случайни числа без зародиш. Статията ни за цикъл на игра с фиксирана стъпка обяснява тази основа. И в двете игри правилата са чист TypeScript без достъп до изобразяването, така че тест може да изиграе цяло ниво за част от секундата реално време.

#Ботовете играят по правилата на играча

Бот, който чете скрито състояние или натиска невъзможни бутони, не доказва нищо. Нашите виждат само това, което вижда играчът, и натискат само бутоните, които играчът има. В Billowpost, спокойна игра, в която разнасяте поща с балон и можете само да се издигате или да се спускате, ботът чете вятъра на всяка височина от скалата на екрана, земята, маркера за пускане и горивото и натиска горелка, клапан, пускане и торба с пясък, нищо друго. Във Faultwarden, където режете летящ остров така, че парчета да падат с враговете върху тях, ботът се прицелва със същата функция predict, която рисува прицела на играча.

Моделират се и човешките граници. Всяко ниво на умение има време за реакция, грешка при прицелване и навик да закъснява:

// Faultwarden: колко често ботът преосмисля и колко посоки пробва
const REACT = { novice: 0.55, casual: 0.32, careful: 0.22, reckless: 0.25, idle: 9 };
const DIRS  = { novice: 16,   casual: 16,   careful: 32,   reckless: 16,   idle: 1 };

const noise = skill === 'novice' ? 0.28 : skill === 'casual' ? 0.12 : 0.03; // радиани
const angle = Math.atan2(best.dz, best.dx) + rng.range(-noise, noise);

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

#Планиращ бот, който управлява балон

Ботът на Billowpost е по-интересният, защото балонът не може да се насочва пряко. Единственото управление е височината, а всяка височина има свой вятър. За всеки отворен адрес планиращият бот превърта балона напред в симулацията за всяка възможна височина, като се издига или спуска през ветровете по пътя, и следи накъде би отишъл маркерът за пускане. Печели височината, чийто маркер минава най-близо и най-рано. Когато никоя единична височина не стига, ботът търси планове от две отсечки: височина А за няколко секунди, после височина Б. Той преизчислява плана в движение, уточнява височината при последния подход и пуска пощата в мига, в който маркерът е най-близо. Пътища, които биха срещнали склон, дърво или покрив, се отхвърлят.

За да е проверката евтина, ботът предварително изчислява веднъж за всяка карта най-ниската безопасна височина на коша в мрежа от 4 метра, като включва ширината на балона над коша и всяко дърво и покрив. След това всяко превъртане чете тази мрежа с билинейна интерполация, вместо да проверява геометрия.

#Тестовете, които държат всичко заедно

Тестовете за проходимост в Billowpost са три кратки правила, повторени за всеки от петте ѝ района и шестте рунда във всеки район:

test(`${dale}-${i}: the careful pilot delivers everything within 900 s`, () => {
  const res = runBot(new Sim(makeRoute(dale, i), baseParams()), 'careful', 900);
  expect(res).toMatchObject({ done: true, failed: null });
  expect(res.delivered).toBe(res.total);
});

test('the rule-ignoring pilot never completes a route', () => {
  for (let i = 0; i < ROUTES_PER_DALE; i++)
    expect(runBot(new Sim(makeRoute(dale, i), baseParams()), 'ignore', 900).done).toBe(false);
});

test('an idle player never delivers anything', () => {
  for (let i = 0; i < ROUTES_PER_DALE; i++)
    expect(runBot(new Sim(makeRoute(dale, i), baseParams()), 'idle', 900).delivered).toBe(0);
});

„Основният балон“ е важен: внимателният пилот няма подобрения, така че никой рунд не зависи от нещо, което играчът може още да не е купил. Пилотът, който пренебрегва правилото, избира една височина и пуска, щом под него има какъвто и да е адрес. Ако някога завърши рунд, ветровете в този рунд са твърде еднакви и изборът на височина вече не решава маршрута, затова рундът се променя, преди да се прави каквото и да е друго.

#Таблици с победи за трудността

Faultwarden отпечатва таблица, вместо да казва „успех“ или „провал“, защото трудността е въпрос на преценка. На 3 ноември 2026 г., с шест зародиша на остров, тя показа това:

БотОстров 1Остров 2Остров 3Остров 4Остров 5
Бездействащ0/2, оцелява0/20/20/20/2
Начинаещ6/66/61/65/64/6
Обикновен6/66/66/66/66/6
Внимателен6/66/66/66/66/6

Четете я като дизайнер. Бездействащият играч губи всеки остров за половин минута освен първия, който е спокоен остров за обучение, където нищо не напада достатъчно силно, за да прекрати играта, но и нито една вълна не се изчиства. Обикновеният и внимателният играч печелят всичко, за около три до четири минути и половина на остров. Начинаещият показва истинската крива и третият остров изпъква: това е леденият остров, където плочите са хлъзгави и враговете се плъзгат, и начинаещият печели веднъж от шест. Това е стена за начинаещите и таблицата я прави видима много преди който и да е отзив от играч. Дали да се смекчи, или ледът да се обясни по-добре, е решение на дизайна; ботовете само гарантират, че то се взима нарочно.

#От времената на бота до целевите времена

Billowpost дава звезди за доставка под целево време. Времената на бота са твърде добри за това, защото ботът реагира мигновено. Затова планът на внимателния пилот се изпълнява и през модел на човек: същият план, но с помощника за задържане на височината, който играчът ползва, със закъснение на реакцията и неточни натискания на горелката. В първия рунд внимателният бот се справи за 48 секунди, а моделът на човек за 66 до 70. Целевите времена се определят от модела на човек, а там, където той не е надежден, се връщат към времето на внимателния бот, умножено по 1,3.

#Какво ботовете не могат да ви кажат

Ботовете мерят дали нещо може да се направи, а не дали е забавно, четимо или усещано като честно. Те не забелязват, че предупреждение трудно се вижда на телефон, че ред от обучението обърква или че звук дразни. Съчетаваме ги със записана игра от скриптове на буквален новак, които правят само това, което екранът им казва, с проверки на всеки размер на екрана и с преглед от хора преди пускането. Ботовете махат очевидните провали, за да могат хората да насочат вниманието си към усещането. За тази страна вижте как браузърната игра да се усеща добре и какво да изградите първо в прототипа на една игра.

Двете игри са безплатни и са обявени като „Очаквайте скоро“ в каталога с игри на PN Scripts.

#Често задавани въпроси

Трябва ли ми машинно обучение, за да направя бот за изпитване?

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

Колко време отнемат тестовете с ботове?

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

Какво е бот, който пренебрегва правилото?

Бот, който играе без централната идея на играта, например никога не избира височина в игра с балон. Ако може да спечели, идеята е по избор и играчите ще я прескочат, затова тестът очаква той да загуби.

Могат ли ботовете да заменят изпитването с хора?

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

#Източници

Коментари

Коментари

Напишете първия коментар.

Оставете коментар

Следваща стъпка

pnscripts.com/bg/contact

Пишете на екипа

Попитайте за статия или ни разкажете за проект, който искате да изградим. Отговаряме до един работен ден.

Пишете ни

Семейството PN Scripts

Другите сайтове на PN Scripts

Хостингът, игрите и блогът имат свои сайтове, поддържани от същата компания.

  • pnscripts.com

    PN Scripts

    Софтуерно инженерство

    Уеб и мобилни приложения и API по поръчка, плюс нашите продукти и плъгини с отворен код.

  • games.pnscripts.com

    Игри

    Игри и игрови сървъри

    Домът на игрите на PN Scripts: безплатни браузърни игри, които се играят веднага, а игровите сървъри предстоят.

  • hosting.pnscripts.com

    Хостинг

    Хостинг и инфраструктура

    Споделен хостинг, KVM VPS, самостоятелни сървъри и домейни от същата компания, която изработва проекта ви.

  • blog.pnscripts.com

    Блог

    Статии и бележки

    Практични статии за разработка на софтуер, хостинг, отворен код и игри, писани от хората, които ги създават.

    Вие сте тук