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

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

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

— Готов, сэр!

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

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

Большая задача: Пишем игру 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)
Отлично! Запускаем и наслаждаемся змейкой.