Thursday, 25 February 2016

Крестики-нолики на Java

Ради развлечения запилил игру крестики-нолики с сетевым режимом и разместил на гите.
Целью было пощупать JavaFx и Kryo серилизацию в деле. Ну и плюс конечно, порадовать детей тестированием.

Разработка происходила в несколько этапов:
  1. собственно сам алгоритм просчета ходов. Алгоритм разрабатывался в лучших традициях TDD, то есть сначала тесты потом код. Получалось быстро.
  2. UI часть. JavaFx показала себя современной и интересной технологией. Большое количество готовых компонентов, приятное отображение, хорошее масштабирование на больших мониторах. Кроме того упор сразу делается на MVC паттерн. UI отдельно, контроллеры отдельно. Понятно что только конкретно у меня только одна форма и несколько диалогов, но по сравнению со swing'ом значительно приятней.
  3. сетевой режим. Чтобы меньше было морочиться с передачей объектов, то организовал это дело на основе проекта KryoNet. Клиент с сервером между собой общаются сериализированными объектами. Эта часть отняла самую большую часть времени из-за ручного тестирования.
Возможности для улучшения/баги:
  • Уровень сложности не выбирается, а у компьютера выиграть невозможно. Максимум ничья. Вычитал в сети что настраивать сложность просто ограничением просчета количества ходов вперед проблематично. Даже на небольших значениях компьютер будет рвать человека как грелку. Поэтому пришлось бы искать значения эмпирически, то есть много тестить руками. А кроме того и вводить "ходы от балды". Поэтому пилить эту фичу не стал.
  • Сетевой режим не гибкий, из-за того что лень было полностью погружаться в продумывание протокола обмена.
  • Иногда выскакивают баги в сетевом режиме.
Огрехи конечно есть, но игра работает вполне себе нормально, и в сетевом, и локальном режиме. В общем, получилось прикольно - побаловался, повспоминал время когда пилил игрухи на Паскале в 90-е, код выложил на гите, модуль TicTacToe .