# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
1 тест |
|||
Из-за каких ошибок большинство обучающих курсов не очень эффективны? Мы начинаем создание игровой программы Xonix с обзора этих самых ошибок, чтобы избежать их при создании практического видеокурса по изучению языка Java на примере написания небольшой видеоигры.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 25 мин. [Показать отчёт] Научился: Xonix - игруха занимательная, написана впервые когда я во второй класс пошел )) Любопытно прокачать имеющиеся негустые навыки и получить действующую гаму написанную своими усилиями. В бой! |
|||||
2 |
![]() |
1 тест |
|||
На этом уроке вам необходимо: 1. скачать Java-код игры Xonix, 2. откомпилировать код. 3. запустить игру. 4. разобратья в игре и дойти хотя бы до 5 уровня. Приложить скриншот результата. В следующих уроках мы будем создавать эту игру с нуля - отличный способ познакомиться с основными идеями Объектно- Ориентированного Программирования на конкретном примере. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 45 мин. [Показать отчёт] Научился: public модификатор пришлось добавить в class GameXonix extends JFrame { Иначе в Эклипсе гама не стартовала - давала ошибку (вторая иллюстрация) UPD - попробовал удалить паблик модификатор - гама уже и без него стартует. Причину пока не понял, как первая инициализация требовала паблика что ли... Гама занятная, не всяка птица долетит до середины Днепра, и не всяк гамер дотыкает до пятого уровня ) |
|||||
3 | Свои правила |
1 тест |
|||
На этом уроке мы установим свои правила в этой игре. Поменяйте каждый параметр и проверьте результат. В отчёте необходимо написать, изменение какого параметра было самым интересным. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 12 мин. [Показать отчёт] Научился: final int PERCENT_OF_WATER_CAPTURE = 1; // почти режим IDDQD из DOOMa))) Стало легче перескакивать на следующий уровень, вот такое читерство получилось. |
|||||
4 | Установка Eclipse |
1 тест |
|||
На этом уроке мы скачаем и установим Eclipse. А также создадим первый Java - проект.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 28 мин. [Показать отчёт] Научился: Eclipse, скачанный в 2019 году (Eclipse IDE for Java Developers Version: 2019-06 (4.12.0) Build id: 20190614-1200) затребовал в отличие от старой версии, как в уроке, обязательно указать пэкэдж. Дописал ему пэкэдж, привязку попросил к проекту и после этого ошибка ушла. |
|||||
5 | Окно проекта |
1 тест |
|||
Создать проект и вывести окно
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 20 мин. [Показать отчёт] Научился: маленьким удобствам ) ctrl + увеличивает шрифт ctrl - уменьшает шрифт Знать горячие клавиши полезно - не всегда же мышкой елозить как офисный клерк будешь ) При отсутствии в коде инструкции setDefaultCloseOperation(EXIT_ON_CLOSE); закрытие окна JFrame не влечет за собой автоматического завершения работы программы. |
|||||
6 | Использование констант |
1 тест |
|||
Добавим константы для размера окна и заголовка окна.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 18 мин. [Показать отчёт] Научился: наименование констант пиши КАПСОМ, чтобы не отклоняться от линии партии Константы именованные не одним словом разделяй в названии НИЗКИМ_ПОДЧЕРКИВАНИЕМ Применение констант позволяет упростить поиск атрибутов, если располагать их в начале класса. Заодно, константа будет сопротивляться попыткам изменить ее значение - дополнительная защита. |
|||||
7 | Панельный Canvas-класс |
1 тест |
|||
На этом уроке мы добавим панельный класс, который называется Canvas - основа холста для всех последующих рисунков. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт] Научился: создали вложенный класс, рисующий квадрат на панели игры Вызов родительского класса в Java осуществляется ключевым словом super. awt - abstract window toolkit |
|||||
8 | Координатный кубик |
1 тест |
|||
На этом уроке мы передеаем отображение кубика - сделаем так, чтобы он риовался в заданных (x, y) координатах. Также добавим ещё несколько констант. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 3 час. 36 мин. [Показать отчёт] Научился: применение констант и переменных, вместо прописывания значений в инструкциях, организует код в более удобоваримый вид Проще и гибче становится редактирование, поиск разделов и внесение правок |
|||||
9 | Классный кубик |
1 тест |
|||
На этом уроке мы создадим для кубика отдельный класс. И его отрисовку будем вызывать "как полагается". Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 0 мин. [Показать отчёт] Научился: Как и предполагал, вынесение констант, отвечающих за цвет суши и воды, рассмотрели в следующем уроке Перед вызовом метода из другого класса СОЗДАЙ ЭКЗЕМПЛЯР! Почему приватная переменная икс допускает свое изменение? Мой вариант - в том же классе создается экземпляр этой переменной, причина доступа в этом. Не промазал? |
|||||
10 | Перемещение кубика |
|
|||
На этом уроке мы добавим функцию для перемещения кубика. Для её вызова нужно будет написать Главную функцию игры go(). Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 55 мин. [Показать отчёт] Научился: canvas.repaint (); перерисовывает игровое поле Вызов метода, дорисованного тобой, не забывай прописывать от точки входа в программу (метод майн) |
|||||
11 | Живой кубик |
1 тест |
|||
На этом уроке мы затавим кубик двигаться. Для этого поместим вызов перемещения и перерисовки в бесконечный цикл. А чтобы увидеть движение кубика - добавим функцию задержки DELAY. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 17 мин. [Показать отчёт] Научился: пользоваться вечным циклом ))) JVM не хранит в памяти предыдущие картинки и отрабатывает метод Paint с чистого листа |
|||||
12 | Граница на замке |
1 тест |
|||
На этом уроке мы ограничим движение кубика рамками нашего экрана.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 30 мин. [Показать отчёт] Научился: не сразу понял как "очевидно" вычисляется мап хейт и мап видтх ) Делится высота и ширина поля на размер боксика. Чуток почесал репу и дошло, что речь идет о количестве допустимых прыжков по канвасу нашего боксика. Дедукция, однако. А с чистого листа сам бы не догадался, как это вычислить. Метод rotate проверяет значение следующего шага боксика с привлечением метода onMap, если возвращается ложное значение - знак следующего шага меняется на противоположный. В тупиковой ситуации боксик ставится в депо на позицию ноль ноль ) |
|||||
13 | Точное прикосновение |
|
|||
На этом уроке произведем коррекцию размеров игрового поля, чтобы кубик точно вписывался в границы окна.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 39 мин. [Показать отчёт] Научился: видимое игровое поле не равно канвасу, отсюда необходимость корректировать диапазон движения боксика |
|||||
14 | Классный шарик |
1 тест |
|||
В этом уроке мы создадим класс для нового героя нашей игры - для шарика.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 23 мин. [Показать отчёт] Научился: cоздали класс для шарика, где прописали его размер и цвета В основном классе объявили шарик и в методе создающем канвас создали экземпляр шарика Классу Канвас, наследующему ДжиПанел наказали строго-настрого для экземпляра нашего шарика использовать метод (инструкцию) пэйнт Увидели шарик на канвасе Пока не движется ) |
|||||
15 | Живой шарик |
1 тест |
|||
На этом уроке мы оживим шарик, напишем/скопируем функции для его передвижения.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 12 мин. [Показать отчёт] Научился: шарик начал двигаться после добавления в его класс идентичных инструкций движения разворота и отслеживания ненарушения границ канваса. После указания в точке входа в программу инструкции шарику двигаться - он взлетел Ошибка недобега до границ игрового поля была в несоблюдении целочисленности деления размера игрового поля на размер шарика и боксика |
|||||
16 | Снова рефакторинг |
|
|||
На этом уроке мы займёмся рефакторингом и перенесём функцию onMap в главный класс программы.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 19 мин. [Показать отчёт] Научился: рефакторинг - оптимизация кода без изменения функционала программы в дереве класса следующая легенда: треугольник пустотелый - переменная или поле класса треугольник закрашенный - метод, функция или набор инструкций что может делать экземпляр класса треугольник закрашенный с литерой С - конструктор экземпляра класса (этакий тридэпринтер) |
|||||
17 | Абстрактный субъект |
1 тест |
|||
На этом уроке мы создадим абстрактный класс Subject, в который перенесём повторяемый код из классов Кубика и Шарика. Благодаря Наследованию код классов Cube и Ball станет более компактным. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 12 мин. [Показать отчёт] Научился: абстрактный класс НЕ МОЖЕТ иметь экземпляра При написании абстрактного класса не ставь круглые скобки - класс это не метод, скобки надо ТОЛЬКО фигурные Поля protected доступны внутри самого класса и для наследников |
|||||
18 | Базовое наследство |
|
|||
На этом уроке мы избавимся от дублирующегося кода, благодаря наследованию.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 8 мин. [Показать отчёт] Научился: ключевое слово extends Имя_класса позволяет подключить к классу, в сигнатуре которого указан этот икстендз, функционал того класса, имя которого приведено после икстендз Удобно, чесслово ) |
|||||
19 | Броуновское движение |
1 тест |
|||
На этом уроке создадим экземпляр класса Random Теперь наши субъекты будут появляться в случайных местах и двигаться в разных направлениях. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 1 мин. [Показать отчёт] Научился: random.nextInt(MAP_WIDTH); возвращает случайное целое число от нуля до аргумента в скобках В силу неведомых причин в какой-то момент пропал двигающийся шарик, кинулся искать проблему - нашел неведомо откуда продублировавшийся аргумент MAP_WIDTH здесь: x = random.nextInt(MAP_WIDTH); y = random.nextInt(MAP_HEIGHT); Исправил - снова шарик летает вместе с боксиком Объявили random Проинициализировали (создали экземпляр) random Использовали random |
|||||
20 | Размножение шариков |
|
|||
На этом уроке мы добавим несколько шариков на наше поле.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 57 мин. [Показать отчёт] Научился: шарики размножил циклом ) Класс Боллз подтягивает шарики из АррэйЛиста Есть конструктор, создающий новый АррэйЛист Класс умеет добавлять шарик перемещать шарик отрисовывать этот же шарик |
|||||
21 | Чудеса полиморфизма |
1 тест |
|||
На этом уроке воспользуемся магией Полиморфизма - Поместим и шарики, и кубики в один массив. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 25 мин. [Показать отчёт] Научился: Сабджект породил Куба, куб породил движение Сабджект породил Шарика, Шарик породил движение Другими словами class Ball extends Subject и class Cube extends Subject Отсюда при создании Сабджекта мы смело вызываем методы подклассов и получаем в одном массиве и Шарики и Боксики Профит! ) |
|||||
22 | Упаковка панели в окно |
|
|||
На этом уроке мы переделаем способ задания размеров карты и экранной формы. Спасибо за помощь Ивану Воронину, который подготовил материал этого урока. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 20 мин. [Показать отчёт] Научился: отказались от пикселного задания игрового поля и стали плясать от количества шагов по нему Коэффициентами жестко расписали размер нового построения игрового поля Метод pack() вывел готовый вариант игры на экран |
|||||
23 | Земля и Вода |
1 тест |
|||
На этом уроке мы создадим, как творец, Землю и Воду. Сделаем класс Field для отображения поля всей игры. Напишем метод paint для отображения всей карты. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 6 час. 8 мин. [Показать отчёт] Научился: в классе Филд присобачил лишнюю закрывающую фигурную скобку - программный код покрылся ошибками - с удовольствием обнаружил ошибку и компиляция прошла успешно. Понять, отчего не отрисовывается правая часть игрового поля. Код просмотрел - ошибок пока не нашел. То ли еще будет. |
|||||
24 | Матрица Мира |
1 тест |
|||
На этом уроке мы создадим матрицу нашего поля. Мы должны будем хранить состояние игрового поля и для этого нам потребуется двумерный массив - матрица. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 52 мин. [Показать отчёт] Научился: random.nextInt(MAP_HEIGHT) генерирует случайное число от нуля до MAP_HEIGHT Все добавленные методы, если надо чтобы они шли в бой, должны быть вызваны, иначе будут лежать в коде балластом |
|||||
25 | Цветовая дифференциация |
|
|||
Когда у общества нет цветовой дифференциации штанов, то нет цели! На этом уроке мы займёмся рефакторингом - негоже использовать цветовую дифференциацию лучше перечислить их в отдельном enum-классе Cell. https://www.youtube.com/watch?v=2FgWNKgSvqY Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 3 час. 54 мин. [Показать отчёт] Научился: объекты enum в языке Java являются объектами класса и шаблона Singleton Заменили интовые игровые элементы на перечисление Урок писался после длительного перерыва - интересное обстоятельство, почти экскурс в историю ВидеоШарпа увидел ) Видеообзор: gcOXSSfODQc |
|||||
26 | Острова, острова |
1 тест |
|||
А острова, а острова, где-то ждут нас острова... Всё же карты не всегда бывают правы. А острова, а острова, я найду вас острова! На этом уроке мы вынесем размещение островов в отдельный метод. https://www.youtube.com/watch?v=Zm2VyOL2rHA Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 38 мин. [Показать отчёт] Научился: геттер принимает координату ячейки и смотрит, если на карте - то возвращает элемент массива map сеттер координату ячейки с ее типом и снова, если на карте, то устанавливает ее значение |
|||||
27 | Среда обитания |
1 тест |
|||
На этом уроке мы определим среду обитания для наших субъектов. Кубики живут на суше, шарики на воде. И добавим в абстрактный класс функционал жизнедеятельности субъектов в родной среде обитания. https://www.youtube.com/watch?v=sQHqFBvFt6M // старый урок - QHKMrETJNaI // Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 28 мин. [Показать отчёт] Научился: в шаблон Субъект добавили поле (характеристику шаблона-класса) area типа Cell Чтобы кубики жили на земле в конструкторе кубика вызываем конструктор из суперкласса Субъект с передачей аргумента (Cell.LAND); Для актуализации новых правил для субъектов дописали метод rotate, отвечающий за поведение игровой фигуры в момент появления у границ Сложности: Уследить в режиме дебага за созданием объектов |
|||||
28 | Главный герой |
|
|||
На этом уроке мы создадим класс Xonix и нарисуем главного героя. Земля и вода создана, рыбы и животные резвятся, настало время создать Хониха «из праха земного». Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт] Научился: чтобы иметь доступ к единому объекту Зоникса, добавление его на игровое поле выполнили иначе, нежели кубик и шарик. Сначала в корневом классе игры объявили Зоникса, затем уже в общей куче создали объект Зоникса новый, а уже потом добавили его в items |
|||||
29 | Клавиши подсознания |
1 тест |
|||
На этом уроке мы создадим слушатель для клавиатуры, чтобы пользователь смог управлять главным героем. Это будет отдельный класс, имплементирующий интерфейс KeyListener. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 17 мин. [Показать отчёт] Научился: применили библиотеки java.awt.event.KeyListener и java.awt.event.KeyEvent; Парочка багов была допущена мной за этот урок, то метод в названии обидел на литеру, то аргументы передавал х и у вместо dx и dy Внимательное перекуривание кода дало свои плоды - Зоникс прислушался к шепоту клавиш и пошел в требуемом направлении |
|||||
30 | Прыжок в воду |
|
|||
На этом уроке мы научим Хониха "нырять". Добавим флаг статуса - на воде он или на суше, и при выходе в море - проставим первую клетку моста. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 16 мин. [Показать отчёт] Научился: рисуется одна ячейка пути по той причине, что в методе мувЛэнд кейс для встречи воды так и приказывает "нарисовать одну клетку пути" case WATER: onWater = true; field.setMap(x, y, Cell.PATH); Другого пока кодом не предусмотрено, цикла не прикручено (как я предполагаю), оттого и одна-одинешенька эта серая клетка пути |
|||||
31 | Прогулки по воде |
1 тест |
|||
На этом уроке мы научим Хониха правильно ходить по воде. Строить за собой мост и даже превращать следы в землю. https://www.youtube.com/watch?v=Ogh3GjpS07k Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 33 мин. [Показать отчёт] Научился: передача аргументов в метод - наше все ) field.replace (Cell.PATH, Cell.WATER); | | public void replace( Cell find, Cell with) { for (int y = 0; y < MAP_HEIGHT; y++) for (int x = 0; x < MAP_WIDTH; x++) { if (map [x][y] == find) map [x][y] = with; } } В переводе на русский так: циклом проверим все клетки и если клетка икуалз первому аргументу ( а он у нас Cell.PATH), то заменить его на значение второго аргумента (Cell.WATER) |
|||||
32 | Заштриховка области |
1 тест |
|||
Ты квадратик нарисуй, и немножко заштрихуй! На этом уроке мы напишем оригинальный рекурсивный алгоритм заливки области. На этом наша игра практически завершена, остались сплошные мелочи. Подробнее о рекурсии в курсе «Комбинаторика» Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 49 мин. [Показать отчёт] Научился: рекурсия в заполнении заканчивается в случае выхода за пределы WATER Следующая инструкция дает команду ячейку икс игрек пометить как ПОТРАЧЕНО ) А заканчивается рекурсивка четырьмя инструкциями КУДА идти с требуемыми метками ячеек - НА ВСЕ ЧЕТЫРЕ СТОРОНЫ ))) Затем, когда четыре стороны упираются в вышеуказанную НЕ ВОДУ - все, финита ла комедиа, рекурсия прекращается. Конгениально! |
|||||
33 | Живая Легенда |
1 тест |
|||
На этом уроке мы добавим метку для отображения информации. Наша легенда будет показывать приветствие, счёт и сообщение о завершении игры. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 28 мин. [Показать отчёт] Научился: на третьей минуте урока добавляется инструкция про шрифт - он у автора уже проимпортирован, надо лишь добавить самостоятельно импорт, если такого еще не делалось ) Несложно |
|||||
34 | Процент Земли |
1 тест |
|||
На этом уроке мы будем считать процент огороженной земли.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 35 мин. [Показать отчёт] Научился: вызов свеженаписанного метода располагай в точке входа, если он нужен сразу, либо в том методе, в процессе выполнения которого все готово для запуска Где поставишь инструкцию - тогда он и будет запущен Код выполняется строка за строкой сверху вниз, исключая случаи вызова методов, расположенных в других местах По окончании выполнение продолжается далее вниз с места, после которого был осуществлен вызов стороннего метода |
|||||
35 | Следующий уровень |
1 тест |
|||
На этом уроке мы сформируем функцию для перехода на следующий уровень игры. Каждый уровень будет сложнее предыдущего - будут добавляться шарики, кубики, острова, увеличиваться скорость игры. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 45 мин. [Показать отчёт] Научился: начали с создания глобальной интовой переменной отвечающей за номер уровня добавили ускорение игры, увеличение участников по чету и нечету, в легенду дописали текущий уровень. Сложности: Делать урок в тисках времени Поехал на барщину к садистам ))) |
|||||
36 | Конец игры |
1 тест |
|||
На этом уроке мы научим шариков и кубиков ловить Хониха. Если они его поймают или ухватятся за путь - игра начнётся заново. Придумайте, что ещё можно добавить в игру. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 6 час. 42 мин. [Показать отчёт] Научился: метод кэтчд возвращает булево значение ИСТИНА если разность по модулю координаты фигуры и координаты Зоникса не превышает единицу В ином случае - метод возвращает ЛОЖЬ Сложности: доделать урок с перерывами в рабочем графике |
|||||
37 | ФИНАЛЬНЫЙ УРОК |
без видео 1 тест |
|||
Поздравляю с завершением приключений Хониха! Напиши своё впечатление о прохождении этого курса. Что ещё ты хотел бы добавить в эту программу? * Запиши видеообзор созданной программы. Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 11 мин. [Показать отчёт] Научился: лично для меня в этом курсе было прорывом увидеть воочию действие рекурсии на примере работы метода по закраске оттяпанной Зониксом территории у воды. Не сказать, чтобы я про ту рекурсию впервые слышал, попадалась она и прежде, но чтобы понять - вот здесь уже заслуга этого курса. Сам для себя отметил, что вижу рекурсию, понимаю когда она останавливается, понимаю что происходит при ее перегрузке с помощью аргументов. В общем, то был восторг, когда дошло и понял. Допиливать игруху можно долго и с удовольствием, можно добавить музыку фоном, анимировать события звуками столкновений. Курс живой и интересный. Видеообзор: aY-cSwKcPTY |
|||||
Итого: 37 видеоуроков |
5 час. 15 мин. 28 тестов |
5 чел. | |||
Финалисты: Иван Воронин, Новопашин Владимир, Dmitry Sinitsin, Anatoli, Yefim . |