Вызов
Если вы ищете веселое мероприятие для программистов на работе или в школе, у меня есть идея предложить. Я бы предложил вам поиграть в линкор, но вместо того, чтобы стрелять в одиночку, создайте программу, которая будет делать ходы за вас, и сыграйте ее против вашего противника. Интересно смотреть, как ваша программа конкурирует с другими.
Правила игры в морской бой
Большинство из вас наверняка знают игру про линкор, но если вы не попробуете вот эту: https://en.battleship-game.org/. Тем не менее, напомню несколько основных правил:
- Должно быть 10 кораблей:
- 1 корабль размера 4
- 2 корабля размера 3
- 3 корабля размера 2
- 4 корабля размера 1 - Корабли не должны касаться друг друга.
- После стрельбы может быть три возможных результата:
- Промах
- Попадание
- Корабль уничтожен - После попадания в корабль у вас есть еще один выстрел, пока вы не промахнетесь.
Так как эта игра будет между двумя программами, должны быть некоторые дополнительные правила:
- Если программа возвращает исключение или неверные координаты, это технический проигрыш.
- Если программа попадает в одно и то же поле во второй раз, ход переходит к противнику, даже если результат - попадание.
Турнир
Мы уже пробовали эту игру, и есть два варианта ее выполнения: с помощью физической доски или с помощью приложения, имитирующего игру.
Физическая плата
Каждый игрок должен создать консольное приложение, которое будет возвращать координаты всех кораблей, снимать координаты и принимать статус последнего выстрела.
Когда у вас есть свои приложения, вы можете просто запускать свои приложения и просто отмечать состояние игры на бумаге или, если вы хотите больше развлечений, вы можете делать доски, как мы:
Поскольку это был турнир, мы использовали турнирную таблицу, чтобы каждый игрок играл друг против друга. Человек, набравший наибольшее количество очков, выиграл всю игру.
Приложение моделирования
Другой способ играть в эту игру — использовать другое приложение, которое будет все имитировать. Мы создали приложение, которое это делает: https://github.com/vbernotaitis/battleship-board. Требуется, чтобы каждый плеер реализовал определенный интерфейс и скомпилировал его в dll. Когда вы хотите смоделировать игру, необходимо добавить dll в приложение, зарегистрировать классы реализации в Startup.cs и запустить приложение.
У него будет пользовательский интерфейс, в котором вы будете видеть каждый шаг игры или сможете запустить ее мгновенно и узнать, кто победитель:
Наш опыт
По нашему опыту, это было действительно веселое мероприятие. Когда мы играли в эту игру, мы установили ограничение по времени для написания игроками своих шутеров, примерно 3 часа. Было интересно, что некоторые игроки разработали хорошую стратегию, но забыли об обработке исключений, а другие создали плохую стрельбу, но без ошибок, которые привели их к победе. Удивительно, но лучшая стратегия не всегда побеждает.
Надеюсь, вы примете мой вызов написать свой шутер!
Ресурсы: