Виселица

Проект “Виселица” #

Задача - реализовать игру “виселица” на Java. Интерфейс - консольный. Описание правил игры на Википедии.

Комментарии по проекту - https://www.youtube.com/watch?v=kqLklwFjr5g.

Что нужно знать #

  • Java - базовый синтаксис

Если испытываете трудности “не знаю с чего начать”, или “не понимаю что именно сделать”, советую лекцию про декомпозицию проектов в задачи - https://youtube.com/live/3ox5DI_xAog.

Мотивация проекта #

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

Функционал приложения и меню консольного интерфейса #

  1. При старте, приложение предлагает начать новую игру или выйти из приложения
  2. При начале новой игры, случайным образом загадывается слово, и игрок начинает процесс по его отгадыванию
  3. После каждой введенной буквы выводим в консоль счётчик ошибок, текущее состояние виселицы (нарисованное ASCII символами)
  4. По завершении игры выводим результат (победа или поражение) и возвращаемся к состоянию #1 - предложение начать новую игру или выйти из приложения

Заметки по реализации #

Даже самая маленькая программа в Java содержит хотя бы 1 класс и точкой входа в приложение является метод этого класса.

Если у вас уже есть опыт в ООП, предлагаю написать этот проект в ООП-стиле, разбив всю логику на части и реализовав их в нескольких классах.

Если такого опыта нет, можно реализовать всё в процедурном стиле в виде статических методов класса Main.

План работы над приложением #

  • Найти в интернете словарь существительных в именительным падеже, отбросить из него слишком короткие слова. Этот словарь будет источником для выбора случайного загаданного слова для каждого раунда игры
  • Реализовать игровой цикл отгадывания букв и отображения текущего состояния виселицы
  • Реализовать цикл по перезапуску игры после победы/поражения

Ресурсы для работы над ошибками #

  • Эталонная реализация проекта похожего уровня сложности, написанного на стриме
  • Реализации проекта другими студентами и мои ревью этих реализаций
  • Чеклист для самопроверки с типовыми ошибками (в конце страницы)
  • Готовый проект можете отправить мне на ревью - https://t.me/zhukovsd
    • [Обновление от 7 сентября 2023] - целевое количество видео и текстовых ревью проекта “Виселица” накоплено, новые реализации к ревью не принимаются. В любом случае призываю отправлять законченные проекты в чат, добавляю их в список. Подробности - https://t.me/zhukovsd_it_mentor/57

Чеклист для самопроверки #

❗️Спойлеры: советую не читать этот список до того момента, пока не допишете первую самостоятельную работающую версию проекта❗️

Функциональные проблемы:

  • Отсутствие валидации вводимых символов (валидными могут считаться, например, только маленькие буквы кириллицы). Невалидный ввод не должен увеличивать счётчик ошибок пользоваться в игровом раунде
  • Повторно вводимый символ, отсутствующий в секретном слове, не должен считаться за ошибку

Проблемы и ошибки в коде:

  • Использование массивов. Лучше применять коллекции List<>, Set<>
  • Путь к файлу со словарем слов указан как абсолютный, следует указывать как относительный
  • Недостаточная разбивка кода на функции. Одна функция должна отвечать за одну задачу, например, открывать отгаданную букву в маске загаданного слова
  • Излишнее использование “глобальных” переменных (public static полей)
  • Неоднозначное именование полей, переменных, методов. Несовпадение имён смысловой нагрузке
  • Не следует использовать рекурсию для запусков второго и последующих игровых раундов. Следует применить цикл

Мелочи:

  • Неиспользование .gitignore, из-за чего в репозиторий попадают лишние файлы и папки (например, target, out)
  • Неаккуратное форматирование кода

Расширенные материалы #

Для проекта созданы расширенные материалы - https://boosty.to/zhukovsd/posts/07961b26-59a9-449f-80c5-53c4c070e2b8.

Для кого созданы материалы и какую проблему решают #

  • Доведение проекта до конца и рефакторинг до качественного уровня
  • Помощь в преодолении трудностей

Подробнее про цель продукта, баланс между открытыми и закрытыми материалами - https://telegra.ph/Moj-pervyj-produkt—rasshirennaya-versiya-roadmapa-04-21.

Что внутри #

  • Эталонная реализация по шагам (5 шагов)
  • Лекции по разработке проекта, суммарно 2 часа. Разобранные темы:
    • Декомпозиция
    • Реализация MVP
    • Реализация всего требуемого по ТЗ функционала
    • Дополнительный функционал - уровни сложности
    • Рефакторинг в ООП стиле
    • Лекция с разбором типовых ошибок и тому, как их исправить
  • ТЗ альтернативного/дополнительного проекта похожего уровня сложности
  • Чат для вопросов по материалам