⚗️ Придумывание кода боевого корабля Ката

Б1. Мисс. А2. Попадание. Правильно, это Морской бой! Я создал Code Kata для этой ностальгической игры. Узнайте все об этом в этом посте.

✒️ Зачем создавать Код Ката?

Недавно я впервые в жизни играл в Морской бой (да, я знаю, позор мне) и прекрасно провел время. В свободное время я люблю делать Code Kat, а поскольку сейчас я изучаю Scala, тем более (Katas отлично подходит для изучения языков).

Мысли начали метаться по Морскому бою, и вдруг мне пришла в голову идея создать для него небольшую программу. Программирование игры — отличное упражнение. Так родился линкор Ката.

Одна из вещей, которые мне нравятся в создании Code Kata, — это то, что вы уже вложили средства в идею, стоящую за ней. Вы, вероятно, очень мотивированы, чтобы решить эту проблему!

Кодовые ката — это весело, особенно такие родственные, как Вдохновитель, Сапер или Боулинг. Я нахожу их очень приятными именно потому, что они очень визуальны и вызывают воспоминания. Они также требуют небольшого объяснения, так как вы, вероятно, знакомы с правилами.

Давайте посмотрим, как Battleship Codekata соответствует этим характеристикам.

🚢 Код линкора Ката

Два игрока играют в Морской бой. У каждого игрока есть сетка, где он размещает свои пять кораблей, после чего они по очереди стреляют, пока один из игроков не потеряет все корабли. Это игра в двух словах. Звучит весело, правда?

Кодекс Ката состоит из объяснений правил, некоторых советов и идей, которые усложняют его решение. Если вы хотите попробовать, вы можете найти его на моем github.

Правила довольно просты, но их запись в программу может стать интересной практикой. Хотя я еще не закончил решение, у меня есть незавершенная работа (с которой вы можете ознакомиться здесь). Есть сходство с Reversi и Minesweeper Kata, которые также представляют собой игры, основанные на сетке.

Давайте посмотрим на некоторые проблемы, которые я заметил, выполняя это Ката.

🥵 Вызовы Кода Ката

Battleship Kata сложна (и интересна!) для меня в двух отношениях.

Во-первых, как вы моделируете игру, особенно сетку в своей программе. Это отличный урок о разделении, поскольку представление в вашей программе не обязательно должно соответствовать действительности. Может быть, вам даже не нужна сетка, а вы работаете только с кораблями!

Во-вторых, решить, какой объект что знает и кто отвечает за согласование между ними, — интересная проблема. Однозначного ответа нет, и каждое решение имеет свои последствия.

Проблемы приносят знания, что вы можете узнать из этого Кодекса Ката?

🎓 Уроки, которые нужно усвоить

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

Ката линкора особенно подходит для изучения:

  • Маленькие шаги. У вас может возникнуть соблазн написать весь код для сетки, чтобы вы могли начать размещать корабли и делать снимки, но как вы можете делать небольшие пошаговые шаги, чтобы достичь своей цели?
  • Моделирование. Какие объекты должны что делать и знать кто? Как можно выразить модель максимально выразительно? Вы даже можете применить здесь тактические шаблоны из предметно-ориентированного проектирования, например агрегаты или объекты-значения.
  • Простой дизайн. Какой минимум кода при сохранении удобочитаемости и выразительности можно использовать для решения этой проблемы.
  • (Чистая) архитектура. Как вы будете отделять модель от средств ввода и вывода, таких как интерфейс командной строки?

Это лишь некоторые выводы, которые вы можете извлечь из этой Ката, но, вероятно, здесь есть еще много уроков!

🔮 Планы на будущее

Battleship Kata общедоступна, потому что я надеюсь, что другим людям понравится решать ее так же, как и мне. Проверьте это и дайте ему шанс (каламбур).

Я также намерен опубликовать его в каталогах Code Kata, таких как kata-log.rocks и codingdojo.org, в надежде сделать его более известным. Надеюсь, люди будут даже вносить свой вклад, делая Ката еще лучше!

Что вы думаете? Ката линкора кажется вам интересной? У вас есть идеи по этому поводу? Дайте мне знать в комментариях ниже!

Первоначально опубликовано на https://www.codecraftr.nl 29 декабря 2021 г.