undefined

Большая задача: Пишем игру Sokoban

Java Collections
10 уровень , 15 лекция
Открыта

— Привет, боец!

— Здравия желаю, Капитан Бобров!

— Поздравляю. Сегодня у нас выходной.

— И мы можем заниматься любыми своими делами?

— Да Амиго, хоть целый день в игрушки шпилить. Например, в Sokoban. Моя самая любимая игра с детства. Вот не могу пройти 435 уровень. Поможешь?

— Конечно помогу, показывайте, товарищ Капитан.

— Капитан Бобров достает из кармана старенький Game boy, запускает Sokoban в монохромном режиме, и тут досада. Батарея разряжена, Game boy выключается.

— Капитан молча смотрит на Game boy, потом на Амиго, потом снова на Game boy, разворачивается и медленно идет в свою комнату.

— Товарищ Капитан, а давайте сами напишем игру Sokoban и придумаем 1000 дополнительных уровней, и крутой графический интерфейс.

— Амиго, ты не перестаешь меня удивлять. Обратись к агенту Intellij IDEA. Если у него нет других заданий, и он захочет тебе помочь в свой выходной, тогда приступайте.

Большая задача: Пишем игру Sokoban - 1
undefined
20
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (1)
Сегодня мы напишем свою реализацию игры Сокобан. Это логическая игра-головоломка, более подробно про нее можешь прочитать в Википедии. Игра будет состоять из 3х основных компонентов (как ты догадался, тут не обошлось без паттерна MVC). Графический интерфейс будет реализован с использованием Swing. 1
undefined
10
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (2)
Основа заложена, теперь перейдем к ее наполнению. Игровой процесс можно представить как взаимодействие игровых объектов GameObject. У нас их будет несколько видов: ящик Box, дом Home (место куда нужно поместить ящик), стена Wall и игрок Player. 2.1. Добавь абстрактный класс GameObject в пакет model.
undefined
10
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (3)
Скоро мы займемся созданием различных игровых объектов. Было бы удобно иметь возможность сразу их где-то нарисовать и посмотреть, как они выглядят. Объекты будут рисоваться на игровом поле Field. Тебе пришел измененный код класса View, который создает объект поля Field и настраивает правильным образ
undefined
20
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (4)
Общий класс игровых объектов GameObject уже есть. Пришло время создать классы конкретных типов игровых объектов. 4.1. Часть игровых объектов могут двигаться (игрок и ящики), а часть нет, например, стены и дома. 4.1.1. Добавь интерфейс Movable в пакет model. 4.1.2. Интерфейс Movable должен иметь мето
undefined
20
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (5)
Игровые объекты “Ящик” и “Игрок” с одной стороны являются объектами, которые могут сталкиваться, а с другой они могут перемещаться по полю. 5.1. Создай класс игрока Player и класс ящика Box в пакете model. Каждый из них унаследуй от максимально подходящего класса. 5.2. Созданные классы должны поддер
undefined
10
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (6)
Пришло время создать класс Home. Этот класс будет отвечать за места на игровом поле (дома) в которые нужно сдвинуть все ящики. Объекты этого типа не должны передвигаться по полю или сталкиваться с другими игровыми объектами. 6.1. Добавь в пакет model класс Home. 6.2. Класс должен быть унаследован от
undefined
10
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (7)
Давай сделаем класс стены Wall. Стена может сталкиваться с другими объектами, но не может двигаться. 7.1. Добавь класс Wall в пакет model. 7.2. Унаследуй класс от подходящего родителя. 7.3. Реализуй конструктор с параметрами int x и int y. 7.4. Реализуй метод отрисовки.
undefined
10
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (8)
Ты создал полную коллекцию типов игровых объектов. Давай создадим класс, который будет хранить эти объекты. 8.1. Создай класс GameObjects в пакте model. 8.2. Добавь в него: 8.2.1. Поля Set<Wall> walls, Set<Box> boxes, Set<Home> homes и Player player. 8.2.2. Геттеры для этих полей. 8.2.3. Конструктор
undefined
10
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (9)
В процессе работы игры, будут возникать различные события. Давай создадим интерфейс слушателя событий EventListener. Его должен реализовывать каждый класс, который хочет обрабатывать события. А классы, которые будут генерировать события, будут вызывать методы этого интерфейса. 9.1. Добавь интерфейс
undefined
20
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (10)
В игре будет несколько уровней, все уровни будут храниться в текстовом файле. Сейчас мы напишем тестовую реализацию загрузчика уровней LevelLoader. Почему тестовую? Полный функционал нам пока не нужен, он довольно сложный, оставим его на потом. А пока: 10.1. Создай класс LevelLoader в пакете model.
undefined
20
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (11)
Начнем наполнять функционалом класс модели Model. Добавь в него: 11.1. Поле GameObjects gameObjects. Оно будет хранить наши игровые объекты. 11.2. Поле отвечающее за текущий уровень int currentLevel. Проинициализируй его значением 1. 11.3. Поле отвечающие за загрузчик уровней LevelLoader levelLoader
undefined
20
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (12)
Попробуем организовать взаимодействие представления и модели. 12.1. Добавь в класс View метод update(), он должен вызывать у игрового поля field метод repaint(). Другими словами, метод update() будет обновлять представление (перерисовывать поле). 12.2. Добавь в класс контроллера метод GameObjects ge
undefined
20
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (13)
Наполним контроллер функционалом. 13.1. Добавь в конструктор класса Controller к тому, что уже есть еще и установку слушателя событий у модели и представления. Слушателем должен быть сам контроллер. 13.2. Реализуй методы контроллера: 13.2.1. move(Direction direction) – должен вызывать move(Direction
undefined
20
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (14)
Добавим немного интерактивности в нашу игру (перемещение игрока с помощью клавиатуры). Начнем с обработки нажатия клавиш клавиатуры. 14.1. Добавь в класс Field вложенный класс KeyHandler унаследованный от KeyAdapter. 14.2. Перегрузи у него метод keyPressed(). Если была нажата клавиша с кодом VK_LEFT
undefined
40
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (15)
Пришло время реализовать метод модели, отвечающий за движение move(), но для начала реализуем вспомогательные методы. Добавь в класс модели методы: 15.1. boolean checkWallCollision(CollisionObject gameObject, Direction direction). Этот метод проверяет столкновение со стеной. Он должен вернуть true,
undefined
20
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (16)
Осталось дописать реализацию загрузчика уровней. 16.1. Открой файл levels.txt и внимательно изучи структуру файла. Символ ‘X’ – означает стену, ‘*’ - ящик, ‘.’ – дом, ‘&’ – ящик который стоит в доме, а ‘@’ - игрока. Всего в файле 60 уровней. 16.2. Реализуй метод GameObjects getLevel(int level). Он д
undefined
10
Задача
Java Collections,  10 уровень,  15 лекция
Недоступна
Sokoban (17)
Ты супергерой! Ты сделал отличную игру, можешь немного отдохнуть и поиграть в нее. Если она тебе когда-либо надоест, что практически невозможно, можешь заняться ее улучшениями: 17.1. Использовать картинки для отображения объектов. 17.2. Сделать редактор уровней. 17.3. Добавить рейтинги, можешь даже
Комментарии (62)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Паровозик, который смог 41 уровень, Москва
7 апреля 2021
Весьма залипательная игрушка получилась :) Приятно получить такой наглядный и осязаемый результат в итоге :)
Aleksandr 41 уровень
5 апреля 2021
Спасибо джавараш за лютую ненависть к 2д играм. Теперь я точно знаю , чем не буду никогда заниматься на джаве.
Алексей 41 уровень, Чебоксары
20 февраля 2021
Интересные задачи, особенно 15 и 16 задачи заставили пошевелить извилинами. Да и с классом Swing поплотнее в этот раз поработали. Хоть что то из графики дали самим сделать. Спасибо проекту! С валидатором войны не было. Условия тоже максимально понятны. P.S. Даже открывать следующую лекцию как-то грустно)
alex_us 41 уровень, Симферополь
10 февраля 2021
5 месяцев на джавараш ушло.
Артур Харатян 41 уровень, Санкт-Петербург
27 января 2021
поиграл 2 уровня - сломал клаву)
Николай 40 уровень, Москва
8 января 2021
вполне годный проект, не без косяков конечно, свойственных данному курсу
JavaDeveloper 0 уровень
16 октября 2020
Не понимаю как сделать эту игру. Помогите!!!
MezoneOrange 37 уровень, Екатеринбург
12 октября 2020
Вроде как неплохая задача, но я запутался
alex 41 уровень
13 августа 2020
блин опять swing, который уже давно ни кто не использует смысл его изучать?
Владислав 41 уровень, Санкт-Петербург
8 августа 2020
Когда нажал на галочку в последней, 17-й задаче, то испытал такое же чувство, которое испытывал при перелистывании последней страницы книги, которую успел полюбить.