Вызов

Если вы ищете веселое мероприятие для программистов на работе или в школе, у меня есть идея предложить. Я бы предложил вам поиграть в линкор, но вместо того, чтобы стрелять в одиночку, создайте программу, которая будет делать ходы за вас, и сыграйте ее против вашего противника. Интересно смотреть, как ваша программа конкурирует с другими.

Правила игры в морской бой

Большинство из вас наверняка знают игру про линкор, но если вы не попробуете вот эту: https://en.battleship-game.org/. Тем не менее, напомню несколько основных правил:

  1. Должно быть 10 кораблей:
    - 1 корабль размера 4
    - 2 корабля размера 3
    - 3 корабля размера 2
    - 4 корабля размера 1
  2. Корабли не должны касаться друг друга.
  3. После стрельбы может быть три возможных результата:
    - Промах
    - Попадание
    - Корабль уничтожен
  4. После попадания в корабль у вас есть еще один выстрел, пока вы не промахнетесь.

Так как эта игра будет между двумя программами, должны быть некоторые дополнительные правила:

  1. Если программа возвращает исключение или неверные координаты, это технический проигрыш.
  2. Если программа попадает в одно и то же поле во второй раз, ход переходит к противнику, даже если результат - попадание.

Турнир

Мы уже пробовали эту игру, и есть два варианта ее выполнения: с помощью физической доски или с помощью приложения, имитирующего игру.

Физическая плата

Каждый игрок должен создать консольное приложение, которое будет возвращать координаты всех кораблей, снимать координаты и принимать статус последнего выстрела.

Когда у вас есть свои приложения, вы можете просто запускать свои приложения и просто отмечать состояние игры на бумаге или, если вы хотите больше развлечений, вы можете делать доски, как мы:

Поскольку это был турнир, мы использовали турнирную таблицу, чтобы каждый игрок играл друг против друга. Человек, набравший наибольшее количество очков, выиграл всю игру.

Приложение моделирования

Другой способ играть в эту игру — использовать другое приложение, которое будет все имитировать. Мы создали приложение, которое это делает: https://github.com/vbernotaitis/battleship-board. Требуется, чтобы каждый плеер реализовал определенный интерфейс и скомпилировал его в dll. Когда вы хотите смоделировать игру, необходимо добавить dll в приложение, зарегистрировать классы реализации в Startup.cs и запустить приложение.

У него будет пользовательский интерфейс, в котором вы будете видеть каждый шаг игры или сможете запустить ее мгновенно и узнать, кто победитель:

Наш опыт

По нашему опыту, это было действительно веселое мероприятие. Когда мы играли в эту игру, мы установили ограничение по времени для написания игроками своих шутеров, примерно 3 часа. Было интересно, что некоторые игроки разработали хорошую стратегию, но забыли об обработке исключений, а другие создали плохую стрельбу, но без ошибок, которые привели их к победе. Удивительно, но лучшая стратегия не всегда побеждает.

Надеюсь, вы примете мой вызов написать свой шутер!

Ресурсы: