JavaRush /Курсы /Java Multithreading /Большая задача: Пишем игру Snake

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

Java Multithreading
2 уровень , 18 лекция
Открыта

— Здорово, Амиго!

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

— Готов к новой полностью секретной миссии?

— Готов, сэр!

— Тогда вот тебе инструкции к первому секретному заданию:

«А теперь напишем игру «змейка»».

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

— Есть, написать игру «змейка»!

— Да не кричи ты. Говорят же тебе – полностью секретное задание.

Для его выполнения будешь работать с агентом IntellijIDEA. Он введет тебя в курс дела.

Все дальнейшие инструкции также через него.

— Разрешите приступить, сэр?

— Приступайте.

6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(1)
А теперь напишем игру "змейка". Для этого нам понадобятся: а) собственно сама змея (класс Snake); б) комната, в которой она будет ползать (класс Room); в) мыши, которых она будет есть (класс Mouse). Создай классы Snake, Room, Mouse.
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(2)
Теперь самое интересное - как будет устроена змея. Что можно сказать о змее: а) По сути - змея это набор кусочков - клеточек. Но точно известно, что один из них - голова. б) У змеи есть направление движения. Так что нам еще понадобятся классы: SnakeSection - кусочек змеи.
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(3)
Отлично. Я еще добавил класс KeyboardObserver на будущее. Изучи его внимательно. Пригодится. Начнем с самого простого - класса Mouse. Мышь не будет двигаться и у нее будут только координаты и все. Добавь два приватных поля в класс Mouse: x и y типа int.
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(4)
Координаты x и y ты уже создал в классе Mouse, а как получить к ним доступ? Создай корректные геттеры для этих полей и конструктор с двумя параметрами типа int (x и y соответственно).
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(5)
Теперь доделаем enum SnakeDirection так, чтобы он содержал возможные направления движения змейки. Добавь 4 значения UP, DOWN, LEFT, RIGHT. Должно получиться примерно так: public enum SnakeDirection { UP, RIGHT, DOWN, LEFT }
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(6)
Теперь займемся классом SnakeSection. Он будет описывать один кусочек змеи. А у каждого кусочка что есть? Правильно! Координаты. Добавь два поля в класс SnakeSection: x и y типа int. Добавь для них getter'ы и конструктор с двумя параметрами типа int.
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(7)
"Кусочки змеи" мы описали, теперь займемся самой змеей. У змеи должен быть список кусочков(SnakeSection) и голова. Пусть головой будет просто самый первый кусочек (с номером 0). У змеи также есть направление движения - сторона, куда она движется по умолчанию.
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(8)
Настала очередь конструктора класса Snake. Змея у нас будет поначалу состоять из одного кусочка - головы. А что для него требуется? Что необходимо передать в конструктор? Координаты змеи, конечно же. Надо: а) Передать в конструктор координаты головы змеи (x и y).
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(9)
Еще остался самый главный класс - Room. Что нам нужно для его описания? Размеры комнаты (width и height) - раз. Змея - два Мышь - три. Надо: а) создать в классе Room переменные width и height типа int. б) создать в классе Room переменную snake типа Snake.
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(10)
Займемся методом main. Для начала надо создать в классе Room статическое поле game типа Room. Доступ к переменной должен быть из всех классов. Затем в методе main: а) Создать змею - объект типа Snake. б) Создать комнату - объект типа Room и передать в него ширину, высоту и змею.
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(11)
Теперь логика управления мышью. С мышью у нас будут происходить две вещи. Первая - змея съедает мышь. Вторая - появляется новая мышь в случайной точке комнаты. Надо написать и реализовать метод createMouse() в классе Room.
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(12)
Змея у нас есть, пусть и мышь будет. Добавить в метод main: a) вызов метода createMouse(). б) вызов метода run(). Без него ничего работать не будет. В нем вся основная логика. Неплохо получилось, но я все-таки внесу пару правок. Кстати, как насчет написать метод sleep?
12
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(13)
Предлагаю тебе в этот раз написать специальный метод sleep(), который будет делать паузу в зависимости от длины змеи (количества элементов в sections). Придумай какой-нибудь хитрый алгоритм. Чтобы на первом уровне пауза была 500 миллисекунд, к 11 уровню постепенно уменьшилась до 300. А к 15 до 200. И дальше оставалась постоянной.
24
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(14)
Теперь поработаем над методом print(). Надо: а) вывести на экран прямоугольник из точек размером width x height. б) тело змеи отметить символом "x"-английское в) голову змеи нарисовать символом "X"-английское. Подсказка: а) удобно сначала создать матрицу типа int[][] с размером (height x width).
12
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(15)
Теперь осталось допилить змею. Вот что я предлагаю насчет движения змеи: Змея состоит из кусочков. Давай каждый ход просто добавлять один кусочек со стороны головы, а самый последний - удалять. Тогда получится, что змея ползет.
12
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(16)
Ничто не вечно.. Так и змея должна умирать, если она врезается в стену или саму себя. Для определения, не пересекается ли змея сама с собой, можно сделать очень простую проверку: содержит ли список sections "новую голову змеи".
24
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(17)
Теперь закончим класс Snake. Змея состоит из кусочков. Давай каждый ход просто добавлять один кусочек со стороны головы, а самый последний - удалять. Тогда получится, что змея ползет. Добавлять кусочек нужно рядом с текущей головой (кусочком номер 0).
6
Задача
Java Multithreading, 2 уровень, 18 лекция
Недоступна
Змейка(18)
Отлично! Запускаем и наслаждаемся змейкой.
Комментарии (272)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
FolFix Уровень 38
31 октября 2024
Готовят к геймдеву, скоро свой майнкрафт будем делать, ахах
JavaRusher853 Уровень 36
20 сентября 2024
такой бобров мне нравится намного больше)
zaiats1311 Уровень 41
3 сентября 2024
Каким-то загадочным образом, в момент открытия очередной подзадачи, мне предлагают обновления файлов от которых нельзя отказаться. Похоже, пора разбираться с тем, "Что есть Git"))))
SomeBody098 Уровень 51
27 сентября 2024
да, давно пора, вот вам для начала статья ))
zaiats1311 Уровень 41
24 октября 2024
Спасибо👍
FolFix Уровень 38
31 октября 2024
Оо, спасибо, лучший!
SomeBody098 Уровень 51
19 июля 2024
У меня одного от Core'а выработался стереотип: Капитан Бобров = 3-5 дней страданий, бессонниц и стресса? ))
Duxa552 Уровень 1
27 сентября 2024
и паническая атака
Private Joker Уровень 36
27 июня 2024
Эта задача в отличии от предыдущей говнище. Начиная с 14 уровня ничего сам написать не смог, да и желания уже не было, когда видишь просто метод print(). Дичь.
Dr.Alexcemen9 Уровень 51
14 августа 2024
эт не задачи это ты
Andrei Karavai Уровень 30
4 июня 2024
Текстовая змейка, ну прикольно, правда всё равно есть кусок кода, который не создаётся в задаче а даётся ad hoc. Эта змейка лучше, чем та, которая в разделе игр тем, что не требует графического движка. При желании можно и гоночки и галагу тоже сделать без графического оформления а только при помощи System.out.print()/printlin();
Максим Li Уровень 40
19 мая 2024
19.05.2024
Mr Adiro Уровень 51 Expert
26 марта 2024
Почему я не могу использовать все эти проекты по завершению? что предыдущее, что это когда запускаю то ничего не появляется, просто пишет что код выполнен и ничего более, а если выключаю плагин то вообще ничего не работает
1 марта 2024
На 13 шаге косяк - противоречие условий: > А к 15 до 200. И дальше оставалась постоянной. > Метод sleep должен вызывать метод Thread.sleep(200) для уровней больше 15. Ну и где-то в начале в Idea не подгружается KeyboardObserver, надо ручками скопировать с этой странички.
Aliransa Уровень 41
2 сентября 2024
согласна, с методом sleep они лоханулись, в их решении не получилось плавного перехода. у многих вон вообще принимало скачками 1 уровень 500, 10 - 300, 15 - 200. а KeyboardObserver прогружается ближе к концу, до этого проверка (по крайней мере сейчас) этой части кода не производится, хоть в ответах он и есть. а работать начинает вообще в самом последнем задании
MVB Уровень 25
1 марта 2024
Работает. Только createMouse надо подправить, чтобы мышь не создавалась на краю, иначе ее не "съесть".
Aliransa Уровень 41
2 сентября 2024
у меня съедает даже по краям, но через несколько съеданий поле начинает безумно скакать, что хрен поймешь где там мышь