Я познакомился с этой игрой в дестве, когда даже компьютеров не было, играть в неё можно было только на листке бумаги в клетку. На уроке я расскажу правила игры, потом мы создадим класс по реализации логики игры, затем, используя метод динамического программирования, я покажу, как можно в 10 разу ускорить расчёт нового поколения (это по желанию), и, под конец, подключив созданный класс мы напишем саму игру.
Продолжительность урока 1 час 22 минуты, Это программа - отличный тренажёр для начинающих программистов и хорошая программа в копилку вашего портфолио.
Дата отправки отчёта:
9 сентября 2018 г.
Задание выполнено: за
8 дней 24 мин.
Чему научился:
Не смотрел часть видео связанную с отрисовкой, т.к. там юзается winForm, у меня вообще другая технология, пилил на kotlin под javafx. поработал с canvas'ом. Попользовался SimpleBooleanProperty - пригодилось для трека нажатых кнопок и обработки событий связанных с ними. Заюзал рефлексию для получения списка цветов из класса javafx.scene.paint.Color. Узнал про FadeTransition и затухающую анимацию (юзал для текста уведомлений о изменении размера поля, интервала отрисовки, установки в паузу). Не знаю, как реализована визуализация на winForms была, от себя добавил пару фишек: - изменение цвета на случайный по нажатию на Q - изменение цвета на предыдущий (пока есть) при нажатии на Shift + Q - изменение типа клеток с квадратов на кружочки и обратно при нажатии на W - паузу при нажатии на Space - уменьшение интервала репродукции - ускорение анимации при нажатии на → - увеличение интервала репродукции - ускорение анимации при нажатии на ← - увеличение размера клеток при нажатии на ↑ - уменьшение размера клеток при нажатии на ↓ - перемещение по полю (если имеется за границами окна программы) при зажатой клавише ctrl и движении мыши с зажатой ЛКМ - добавил очистку поля при нажатии Ctrl + L - добавил сплеш при рисовании на поле - заполнение рандомных клеток в радиусе 5 клеток от нажатия при зажатой клавише Shift и нажатии ЛКМ Много всякого почитал пока делал, stackoverflow прям помогал очень временами
Что было сложным:
В самом начале отрисовки возникала проблема, когда программа зависала после нескольких итерация без каких-либо исключений и вообще не реагировала на действия, пошуршув немного узнал, что дело в отрисовке элементов, в javaFx они должны рисоваться только в JavaFx Platform Thread, похоже, что получалось так, что временами итерации отрисовки приходились на другие потоки и Platform.runLater выручил. Еще сложно было разобраться с координатами при изменении размера окна (чтобы "камера" не двигалась, пока не достигнет какого-нибудь края) и с перемещением "камеры" по полю если есть куда - тоже было сложновато. но потом нарисовал на листике, пометил все переменные и координаты что и как должно считаться - и оказалось, что всё намного проще чем было в моей голове) Классный курс, не думал, что можно столько всего выучить за такую простую игру)
Молодец, Антон! Это что-то невероятное, можно смотреть и смотреть не отрываясь на это чудо! Немного с делами разгребусь, обязательно тоже поэкспериментирую с этой штукой. Но, ты молодец, ещё и на Котлине прошёл этот курс, а там наверно ещё много своих интересных фишек удалось изучить. Желаю успехов в дальнейших экспериментах и в изучении программирования!
Антон, поздравляю с завершением данного курса! Насчет видеоролика - действительно впечатляет масштабностью проделанной работы (читал об добавления новых функций вне самого курса). Про то, что Интернет помогает в поисках решения или двигает в "правильное русло" действительно так. Сейчас уже удивляюсь, как раньше первооткрыватели-программисты все это создавали ) PS: сам застал только книги, которые писали не так много, но сами алгоритмы найти можно было (потом уже переделывалось под свой ЯП)...
Научился: Написал с помощью преподавателя игру "Жизнь", о которой много слышал!
Узнал о принципах и использовании динамического программирования в решении задач.
Трудности: В основном, все понятно.
Алгоритм динамического программирования в применении к данной задаче понял на 80%.
Большое спасибо! Замечаний нет. Жаль, что урок такой длинный – хорошо бы разделить его на 2 части.