PlayPendium

Salvo · Харч для думок

Всередині Salvo

Під простим кліканням по клітинках ховається детермінований рушій, який моделює приховані флоти, зважене за ймовірністю міркування та класичну дуель приховування й виявлення. 3

Написано й відредаговано англійською. Цю українську версію створено машинним перекладом; там, де важлива точність, авторитетним є англійський оригінал. Читати оригінал англійською →

Дві дошки

У серці гри лежить пара об'єктів Board: один представляє вашу приховану позицію, а другий — приховану позицію суперника. Кожна дошка несе флот кораблів, розставлених на розкресленій сітці, але їхнє розташування залишається прихованим від іншої сторони. Ви стріляєте по ворожій сітці, а ШІ стріляє по вашій, і кожен постріл або влучає в корабель, або падає в порожню воду. Ця архітектура з двома дошками встановлює фундаментальну інформаційну асиметрію дуелі прихованих флотів: кожна сторона повністю знає власну дошку, але може виводити конфігурацію іншої лише з візерунка своїх пострілів. 3

Симетрія цієї схеми і надає грі її характеру. Жодна зі сторін не бачить кораблів іншої безпосередньо. Натомість обидві сторони мусять будувати уявну модель прихованої сітки зі скупого зворотного зв'язку влучань і промахів. Кожен постріл стає даними, кожне влучання звужує можливості, а кожен промах вилучає територію з розгляду. Координатор гри в рушії керує цими двома дошками, стежачи за тим, щоб постріли записувалися, влучання правильно приписувалися, а гра завершувалася лише тоді, коли весь флот однієї зі сторін потоплено. 3

Детермінована модель перетворює сліпе вгадування на поінформований пошук.

Випадкова розстановка, детерміновані правила

Перш ніж почнеться гра, рушій викликає randomFleet, щоб розставити кораблі ШІ випадковим чином. Ця випадковість не довільна: вона задається сідом, тобто певне значення сіду завжди дасть ту саму розстановку. Такий детермінізм на основі сіду — це проєктне рішення, яке робить гру відтворюваною й придатною для тестування. Якщо запустити гру з тим самим сідом, ви отримаєте ті самі позиції кораблів, ту саму послідовність рішень ШІ й той самий результат. Ця властивість цінна для налагодження та для розуміння того, як ШІ поводиться за різних умов. 3

Щойно флот розставлено, правила, що керують грою, є фіксованими й детермінованими. ШІ не кидає кубики, а рушій не вносить випадковості посеред гри. Кожне рішення ШІ випливає з імовірнісної моделі, яку він підтримує, а кожен ваш постріл записується й аналізується. Єдине джерело варіативності — сід, який визначає початкову розстановку флоту. Це означає, що гра зрештою є головоломкою: чи зможете ви, зважаючи на обмеження правил і зворотний зв'язок від пострілів, вивести приховану конфігурацію раніше, ніж ШІ виведе вашу? 3

Постріл

Коли ви робите постріл, рушій записує його на цільовій дошці й перевіряє, влучив він чи промахнувся. Це робиться через функцію fire, яка оновлює стан дошки й визначає результат. Влучання позначає клітинку як зайняту кораблем, а промах — як порожню воду. Потім рушій перевіряє, чи корабель, що містить цю клітинку, повністю потоплено, оглядаючи всі його клітинки. Якщо в усі клітинки корабля влучили, корабель потоплено, і ця інформація повідомляється обом сторонам. 3

Умова перемоги проста, але вагома. Сторона перемагає, коли всі кораблі суперника потоплено. Це перевіряється через функцію allSunk, яка з'ясовує, чи в кожен корабель на дошці суперника влучили повністю. Гра завершується негайно, щойно цю умову виконано. Такий характер умови перемоги «все або нічого» означає, що кожен постріл має значення і що тиск потопити кораблі якнайшвидше врівноважується потребою не видати власну конфігурацію. 3

ШІ полює за ймовірністю й добиває націлюванням.

Імовірнісний рушій

Суперник у цій грі — не простий випадковий стрілець. Це ШІ з імовірнісним націлюванням, який зважує, наскільки ймовірно, що кожна прихована клітинка містить корабель. ШІ підтримує імовірнісну модель ворожої сітки, оновлюючи її в міру того, як лунають постріли й надходить зворотний зв'язок. Клітинки, які не можуть містити кораблів через обмеження на розміщення решти кораблів, позначаються як малоймовірні, а клітинки, які мусять містити кораблі, щоб вмістити решту розміщень, — як імовірні. Потім ШІ стріляє по клітинці з найвищою ймовірністю, перетворюючи сліпе вгадування на поінформований пошук. 3

Ця імовірнісна модель ґрунтується на математиці правдоподібності, де події описуються числами від нуля до одиниці 2. Імовірність нуль означає, що подія не може відбутися, а ймовірність одиниця — що вона мусить відбутися. ШІ використовує ці числові описи, щоб спрямовувати свої постріли, віддаючи перевагу клітинкам, де ймовірність знайти корабель найвища. Саме цей підхід відрізняє ШІ від суто випадкового стрільця й надає йому характерної мисливської поведінки.

Полювання й націлювання

Поведінку ШІ можна описати двома фазами: полювання й націлювання. У фазі полювання ШІ шукає кораблі, стріляючи по клітинках, де невиявлені кораблі найімовірніше розташовані. Це широкий пошук, мета якого — знайти перший контакт із ворожими кораблями. Щойно зареєстровано влучання, ШІ переходить у фазу націлювання, де зосереджується на сусідніх клітинках влучання, щоб добити цей корабель. Такий двофазний підхід віддзеркалює те, як до гри підходять люди: спершу знайти кораблі, потім потопити їх. 3

Перехід між полюванням і націлюванням визначається тим, чи був останній постріл влучанням, чи промахом. Якщо останній постріл схибив, ШІ повертається в режим полювання й шукає клітинки з найвищою ймовірністю. Якщо останній постріл влучив, ШІ входить у режим націлювання й стріляє по сусідніх клітинках влучання. Це просте правило в поєднанні з імовірнісною моделлю створює цілісну стратегію, яка врівноважує розвідку й використання. ШІ досліджує сітку, щоб знайти кораблі, і використовує знання про влучання, щоб ефективно потопити цей корабель. 3

Три рівні складності налаштовують поведінку ШІ.

Три рівні складності

ШІ має три рівні складності, які налаштовують його поведінку. Ці рівні впливають на те, як ШІ зважує ймовірності й ухвалює рішення. На нижчих рівнях ШІ може робити більше помилок або бути менш агресивним у націлюванні. На вищих рівнях ШІ послідовніший у своїх імовірнісних обчисленнях і безжальніший у націлюванні. Така різноманітність рівнів дозволяє гравцям знайти складність, яка їм підходить, — від невимушеної гри до серйозного змагання.

Точна реалізація цих рівнів живе в компоненті ШІ рушія — класі SalvoAI. Рівні складності змінюють те, як ШІ інтерпретує ймовірнісну модель і як він урівноважує розвідку й використання. Таке рішення дозволяє ШІ бути водночас доступним для гравців-новачків і складним для досвідчених, не змінюючи фундаментальної механіки гри. 3

Імпульс сонара

Понад класичними правилами стоїть новинка: імпульс сонара. Ця здатність дозволяє стороні розкрити зчитування ворожої сітки в зоні 3×3 ціною пострілу за цей хід. Імпульс сонара показує, чи містить кожна клітинка в зоні 3×3 корабель, чи це порожня вода. Ця інформація може бути неоціненною для звуження місця розташування кораблів, але дається вона ціною втрати вашого пострілу за цей хід. 3

Рішення скористатися імпульсом сонара — стратегічне. Коли інформація варта своєї ціни? Якщо вам важко знайти кораблі, імпульс сонара може дати потрібний прорив. Якщо ви близькі до того, щоб потопити корабель, ціна втраченого пострілу може виявитися надто високою. Імпульс сонара додає грі шар управління ресурсами, змушуючи гравців зважувати цінність інформації проти цінності дії. 3

Переміщення — одноразова захисна опція.

Переміщення раз за гру

Ще одна новинка порівняно з класичними правилами — переміщення раз за гру. Кожна сторона може один раз протягом гри перемістити один зі своїх кораблів. Цей захисний маневр не коштує ходу, тобто ви можете переміститися й усе одно зробити постріл у свій хід. Здатність переміщення дозволяє вивести корабель із-під загрози, коли він під ударом, або перемістити його в зручніше для оборони місце. 3

Здатність переміщення — одноразова опція, що й робить її дорогоцінною. Коли нею скористатися? Якщо корабель от-от потоплять, переміщення може його врятувати. Якщо ви впевнені у своїй поточній позиції, переміщення може бути марнотратством. Рішення про переміщення — стратегічне, воно вимагає уважного розгляду поточного стану гри та ймовірних дій суперника. 3

Один постріл за хід

В основі всіх цих механік лежить класичне правило одного пострілу за хід. Кожна сторона робить рівно один постріл за хід, чергуючись по черзі. Це правило задає ритм гри й гарантує, що обидві сторони мають рівну можливість діяти. Саме правило одного пострілу за хід робить гру дуеллю розуму, а не перегонами на швидкість. 3

Це класичне правило і вкорінює гру в традиції «Морського бою» — стратегічної гри-вгадування для двох гравців на розкреслених сітках, де флот кожного гравця прихований від суперника 1. Саме правило одного пострілу за хід робить гру випробуванням дедукції та ймовірності, а не рефлексів. Це просте правило, але саме воно надає грі її характеру та її виклику.

Чистий детермінізм робить гру придатною для тестування.

Детермінізм на основі сіду

Рушій чистий і детермінований за сідом: ним керує власний генератор випадкових чисел із сідом. Це означає, що кожен аспект гри визначається значенням сіду, заданим на початку. За того самого сіду гра завжди породжуватиме ту саму послідовність подій — від початкової розстановки флоту до останнього пострілу. Ця властивість робить гру придатною для тестування, адже той самий сценарій можна відтворити й дослідити. 3

Детермінізм на основі сіду має наслідки й для розуміння гри. Якщо ви хочете зрозуміти, як ШІ поводиться в певному сценарії, можете запустити гру з конкретним сідом і спостерігати результат. Якщо хочете перевірити певну стратегію, можете запустити гру кілька разів із тим самим сідом і побачити, як вона працює. Така відтворюваність — цінна риса як для гравців, так і для розробників.

Sources & notes

  1. "Battleship (game)," Wikipedia, a strategy-type guessing game for two players, played on ruled grids on which each player's fleet of warships is marked and concealed from the opponent; players alternate calling shots at the other's grid to hit and sink ships, aiming to sink the entire fleet; the game evolved from a pencil-and-paper game dating to around the World War I era; the first commercial version was called Salvo, published by the Starex company in 1931, and in 1967 Milton Bradley published a version using plastic pegboards and miniature ships; and in the "salvo" variant a specified number of squares are targeted at one time, all attacked simultaneously. en.wikipedia.org/wiki/Battleship_(game).
  2. "Probability," Wikipedia, a branch of mathematics concerning numerical descriptions of how likely events are to occur; the probability of an event is a number between 0 and 1, where 0 indicates impossibility and 1 indicates certainty, and the larger the probability the more likely the event (for example, a fair coin flip has probability 0.5 for each outcome). en.wikipedia.org/wiki/Probability.
  3. This game's engine: a Battleship game where each side has a Board with a hidden fleet, the human fires at the enemy fleet and the AI at the human's, one shot per turn (classic rules), fire records a hit or miss, and a side wins when the opponent's ships are all sunk (allSunk); the opponent is a probability-targeting SalvoAI with three difficulty strengths that "hunts" for ships by favouring the cells where an undiscovered ship is most likely to sit and then "targets" the neighbours of a hit to finish it; two twists sit on the classic rules, a sonar ping reveals a 3×3 ship/empty readout but costs that turn's shot, and each side may reposition one of its own ships once per game (a dodge that does not cost the turn); and the engine is pure and seeded-deterministic.
  4. Further reading on Probability, Interpretations of Probability (Stanford Encyclopedia of Philosophy/Winter 2012 Edition). plato.stanford.edu.
  5. Further reading on Probability, Probability -- from Wolfram MathWorld. mathworld.wolfram.com.
  6. Further reading on Probability, Logical foundations and measurement of subjective probability. doi.org.
Was this worth reading?
← Back to Salvo
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Inspirations · © 2026