Салют, друзья!
Пару дней назад я подумал, что одним чтением лекций и решением типовых задач сыт не будешь. Во всяком случае, полученные знания нужно не просто отрабатывать на "кошках", но и куда-то направлять.
Конечно же, мне захотелось сделать игру ^_^.
Немного поразмыслив, нашёл наиболее доступной тему двумерных массивов ("Пятнашки", 2048, Тетрис, да хоть змейку запускай!).
Восьмяшки, Console
Остановился на "Пятнашках" (благо, вырос на этой игре. Знаю, что и как там работает).
В общем, решение принято, код начал писаться. Перво-наперво всё опробовал в консоли. Поле 2х2 собирать для теста, конечно же, не комильфо. Слишком часто выпадают тупиковые комбинации. А вот 3х3 уже приятнее (кстати, именно из-за размеров поля было принято название игры). В процессе столкнулся с потоками (Наконец-то! Мы столкнулись лицом к лицу с врагом. Оказывается, их можно укротить и научить работать тебе на благо. Я счастлив)).
Работа с библиотекой SWING
Чуть позже просмотрел возможности библиотеки SWING и успешно облачил игру в какой-ни какой интерфейс.
Теперь в игре доступен выбор поля. Тест показал, что игра без проблем обрабатывает все ошибки. А при работе с полем 3х3 даёт 100% ответ на вопрос "Решается ли задача?".
К сожалению, примера кода под рукой не было. Пришлось всю логику писать самому. Возможно наличие велосипедов (если таковые есть, тыкните меня в них носом, пожалуйста).
Так же у меня огромные вопросы по чистоте и удобочитаемости кода. Очень хочется, чтобы меня если и не благодарили за чистый код, то уж точно не проклинали за мусор)))
И конечно же - наличие комментариев - где их не хватает?
Если у вас есть рекомендации/пожелания по коду - дайте знать. Если вы хотите присоединиться к проекту - дайте знать.
С удовольствием объединюсь с кем-нибудь для работы над этим и другими проектами.
ссылка на GitHub
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Хорошо, что изучаете новое (Swing, я сам, правда, смотрю в сторону JavaFx2 в части десктоп GUI).
Немного замечаний:
1) Чуть причесать User Interface (для малых размеров, например, 4х4 — не влезают надписи и заголовок окна).
2) По коду.
2.1) Сама IDEA подсказывает что лучше сделать private поля объекта.
2.2) Reader — весь функционал в одном файле. Ладно тут логика и реакция на действия пользователя простая. А что чуть посложнее (например Minesweaper) — код будет сильно разбухать. Я бы разбил на три класса: Matrix (игровое поле), handler( реакцию на разбор действий пользователя) и основной цикл игры. А тут получается что handler определяет логику завершения игры.
Я не знаю на каком уровне JavaRush Вы сейчас. Но в 20х есть задачи на разработки игр с учетом прозрачной композиции кода.
А так — хорошо.