# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 |
![]() |
1 тест |
|||
Мы начинаем создание игры "MineSweeper" на языке Java. В этом уроке мы поиграем в эту игру и подготовим картинки. Рекомендую самостоятельно нарисовать блок-схему игры. Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт] Научился: ничему новому Сложности: ничего Комментарии: Отличный вебинар был =) |
|||||
2 | Блок-схема |
1 тест |
|||
На этом уроке мы составим блок-схему программы. Что происходит в игре и как это всё связано друг с другом. Обязательно нарисуйте схему от руки или на сайте draw.io. В блок-схеме не хватает одного важно момента - найдите, чего именно и дорисуйте на схеме. Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт] Научился: ничему новому Сложности: найти время Комментарии: разделил схему на 3 части, в каждой части основные моменты |
|||||
3 | Окно проекта |
1 тест |
|||
На этом уроке мы начнём создание программы. Создадим новый пустой Java-проект и создадим форму. Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт] Научился: использовать IntelliJ IDEA для разработки, создание базовой формы Сложности: ничего Комментарии: Отличное IDE, есть опыт использования Eclipse и Android Studio |
|||||
4 | Радуга картинок |
1 тест |
|||
На этом уроке мы загрузим в проект все картинки. Проинициализируем массив с картинками. Напишем функцию paint() для их отображения. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 10 мин. [Показать отчёт] Научился: создавать кастомные панели, в которых можно рисовать Сложности: ничего Комментарии: создал кастомный класс панели, перенёс туда цикл рисования текстур боксиков добавил панель в форму тем самым нет необходимости в отступах и лэйбл отображается корректно внизу экрана =) з.ы. не мог, чтобы не сделать так, как планировалось! супер урок, идём дальше... |
|||||
5 | Карта местности |
|
|||
На этом уроке мы создадим матрицу map, в которую случайным образом разместим мины. Потом напишем функцию addOne() для проставки цифр вокруг мин и отобразим это всё на экране. Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт] Научился: ничему новому Сложности: найти время Комментарии: нужно создать второй массив для хранения данных о том, открыта клетка или нет, этот вариант предлагал на вебинаре и его же использовали в версии на C#, так что моё мнение не изменилось, а только подкрепилось =) |
|||||
6 | Философия сапёра |
|
|||
На этом уроке мы возьмём новые картинки, сконвертируем их в jpg чтобы убрать прозрачность. После этого пофилософствуем об аналогии компьютерного и реального мира. Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт] Научился: ничего новому Сложности: ничего Комментарии: То, что жеребёнок рождается и почти сразу начинает ходить, а человек рождается и по сути ничего пока не может, по той же причине рыбки после рождения сразу умеют дышать под водой, чего не может ни жеребёнок ни человек. Суть простая - в каждый объект мироздания закладывается не только "операционка" дос, виндоус, мак ось или *никс, но и уже присутствуют самые 2 важные вещи: начальная аппаратная комплектация и биос. от этого и зависит то, что в последствии потянет данная система, какой объём памяти и скорость процессора, какие средства ввода/вывода. Многие животные имеют шерсть, чтобы не замёрзнуть, когти и бивни как оружие, жабры для возможности дышать под водой, крылья чтобы парить в небесах, человеку же дан разум, чтобы придумать акваланг для дыхания под водой, самолёт для полётов в небе, корабль для плавания по воде и т.д. и т.п. поэтому сравнивать разные объекты бесполезно, каждый выполняет свою задачу, а вместе они создают баланс бесконечности =) |
|||||
7 | Мины на панели |
1 тест |
|||
На этом уроке мы создадим подкласс MinePanel. Именно на этой панели мы будем размещать картинки. Сделаем всё необходимое, чтобы программа заработала. Отчёт отправил: 10558. Иван Воронин Выполнено за 5 мин. [Показать отчёт] Научился: ничего нового Сложности: ничего Комментарии: код был готов ещё до вебинара, поэтому просмотрел видео на скорости х2 и залил отчёт =) жаль что не удалось состыковаться и провести этот урок, много чего рассказать хотелось, поэтому пишут вкратце тут: решил я изучить вопрос с панелью после того, как на вебинаре Магистр пытался использовать paintComponent, но не вышло и использовали paint, а позже в одном из отчётов кто-то заметил, что игровым полем замазали statusBar и его стало не видно, попытавшись увеличить размер формы, ничего не вышло и я решил немного изучить вопрос, ушло на это не много времени, но зато узнал, что как и в C#, тут есть тоже панель, как раз то, что надо, провёл пару тестов и вуаля, и марджины не нужны и статусбар видно и метод pack помогает подогнать размеры формы, отличный урок получился. Спасибо, Евгений Витольдович! з.ы. pack сработал, потому что setResizable должен быть раньше под коду, когда перенесли его выше, сразу сработало как надо |
|||||
8 | Мышечный адаптер |
1 тест |
|||
На этом уроке мы добавим подкласс-адаптер для обработки нажатий кнопки мышки. Сделаем вычисление координат и простые действия по нажатию левой и правой кнопки мышки. Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт] Научился: повторение пройденного Сложности: ничего Комментарии: урок понравился тем, что не использовали для формирования поля боксики как было на C#, а сразу напрямую рисуем на панели, что ускоряет работу приложения в разы, идём дальше |
|||||
9 | Правый флаг |
1 тест |
|||
На этом уроке мы сделаем обработку правой кнопки мышки. Для этого нам придётся добавить дополнительный массив, в котором будет записано, что видно сверху нашего поля. Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт] Научился: повторение пройденного Сложности: найти время Комментарии: в ротацию правой клавиши добавил вопросик обновление статусбара перенёс в отдельный метод в статусбаре видно размер поля и сколько установлено флажков из доступных (доступные это количество мин на поле) как обычно, если флажки кончились, то ставятся только вопросики =) |
|||||
10 | Открывашка |
1 тест |
|||
На этом уроке мы сделаем фишку автоматического открытия плашек для клеток, вокруг которых уже все мины проставлены. В стандартном сапёре эта функция вызывается двойным щелчком мышки. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт] Научился: повторил портирования с одного языка на другой Сложности: найти время Комментарии: добавил счётчик мин и флажков для отображения в статусбаре добавлена заготовка игровых фаз (игра, проигрыш, победа) генерация мин на поле происходит после первого клика первый клик никогда не попадает на мину createMap() переименовал в placeMines(), добавил необходимые параметры рефакторинг метода placeMines(), так же добавил комментарии addOne() переименовал в placeCounter() добавил метод onMap() добавлен метод обработки клика левой клавиши мыши методы rightButton() и leftButton() сделал приватными для открывания игрового поля добавлены 2 новых метода: changeTop() и changeMap() с необходимыми параметрами добавлен метод openCellsAround() для анализа и открытия клеток вокруг добавлен подсчёт неверно установленных флагов, при открытии отображается ложная мина рефакторинг обработки нажатий добавлена проверка, все ли пустые клетки открыты (в будущем для обработки победы) |
|||||
11 | Волшебный метод |
1 тест |
|||
На этом уроке мы создадим волшебный метод cellOpen(). Именно в нём кроется вся магия логики игры. Отчёт отправил: 10558. Иван Воронин Выполнено за 3 час. 30 мин. [Показать отчёт] Научился: повторению пройденного Сложности: остановиться допиливать игрушку =) Комментарии: Добавлен рекурсивный метод открывания соседних пустых клеток. Добавлено описание фаз игры. Добавлен метод открывания всех мин и отображение ложных мин при подрыве. Если подорвался на мине, под ней появляется красный фон, открываются все мины, открываются ложные мины и игра переключается в фазу поражения. Если открыты все пустые ячейки, игра переключается в фазу победы и помечаются все мины флажками. Добавлена заготовка типа сложности, но пока только Профессионал. Рефактор инициализации игрового поля перед началом игры. Добавлен метод startGame(), вызывается если проиграл или выиграл. Добавлен метод updateTitle() для обновления информации в тайтле. Добавлен метод cellClickCheck() для проверки фазы игры (если проиграл/выиграл начать игру с нуля). Пока идёт игра, обрабатываются нажатия левой и правой клавиш мыши, как только нарвался на мину или победил, обрабатывается только средняя клавиша мыши, запускающая игру с начала. Теперь в тайтле отображается сообщение о победе/поражении и информация о том, как начать сначала. Добавлен счётчика времени, активируется при первом клике по закрытому полю, останавливается при победе/поражении. В тайтле отображается сообщение о победе/поражении и информация о том, как начать сначала. Так же в тайтле отображается затраченного времени до победы/поражения, пока игра не начата заново. |
|||||
12 | Условие победы! |
1 тест |
|||
На этом уроке мы закончим создание сапёра - сделаем проверку на окончание игры, поздравление с победой, с проигрышем, и запрограммируем начало новой игры. Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 30 мин. [Показать отчёт] Научился: работать со звуком в Java Сложности: найти время Комментарии: Добавлен звук тиканья таймера. Добавлен звук подрыва на мине. Текстуры перенесены в папку gfx. Звуковые эффекты перенесены в папку snd. Мин уменьшено с 99 до 40, для удобства тестирования. з.ы. так как задания текущего урока я выполнил в прошлом уроке, пришлось добавить в игру звук и порефакторить, чтобы не заливать пару скринов и писать, что всё это сделал ещё на прошлом уроке =) Видеообзор: https://youtu.be/r05eSApCHjI |
|||||
Итого: 12 видеоуроков |
3 час. 00 мин. 10 тестов |
13 чел. | |||
Финалисты: Дмитрий, Алексей В., Константин, Новопашин Владимир, Елена, Иван Воронин, Максим Лапшинов, Сергей Соколов, Tekashnik, Babenko Oleg, Reinis Stacevič, Dmitry Sinitsin, Anatoli . |