В ходе обучения необходимо будет выполнить ряд заданий, которые будут предложены в рамках предоставленных курсов. Все задания необходимо будет выполнять в отдельных файлах и разместить их в репозитории на GitHub. Поэтому рекомендую сразу создать репозиторий на GitHub и далее все задания выполнять в рамках этого репозитория.
Так же помимо заданий, которые даются в рамках курсов, я предлагаю продолжить работу над игрой (Arkanoid), которую мы начали с вами разрабатывать и по мере изучения новых тем, применять полученные знания на практике и улучшать архитектуру игры, производительность и т.д. Так же можно пойти другим путем и начать разрабатывать новую игру, идею которой вы можете предложить сами. И так же все полученные знания применять на практике.
Так же для удобства рекомендую установить редактор кода Visual Studio Code. В нем есть множество полезных расширений, которые помогут вам в разработке.
Git - это система контроля версий, которая позволяет разработчикам отслеживать и управлять изменениями в коде.
Знание системы контроля версий Git является важным навыком для любого разработчика. Git помогает отслеживать и управлять изменениями в коде, что особенно полезно при работе в команде. С помощью Git, разработчики могут создавать ветки для разработки новых функций, исправления ошибок или экспериментов, не затрагивая основной код. После тестирования и проверки, изменения могут быть объединены с основной веткой.
Git также облегчает совместную работу, позволяя разработчикам совместно работать над одним и тем же кодом, вносить изменения и объединять свои работы без конфликтов. Git предоставляет инструменты для обсуждения изменений и управления задачами.
Кроме того, Git предоставляет возможность создавать резервные копии проекта и восстанавливать его в случае потери данных или ошибок. Git сохраняет историю всех изменений, включая автора, дату и описание каждого коммита, что помогает отслеживать, кто и когда внес изменения, и облегчает поиск и исправление ошибок.
В целом, использование Git помогает разработчикам более эффективно управлять кодом, сотрудничать с другими разработчиками и обеспечивать надежность и безопасность проекта.
Ниже приведены статьи и видео, которые помогут вам изучить Git.
Ссылки:
- https://practicum.yandex.ru/git-basics/?from=catalog
- https://atlassian.com/ru/git/tutorials/what-is-version-control
- https://youtube.com/watch?v=W4hoc24K93E&list=PLDyvV36pndZFHXjXuwA_NywNrVQO0aQqb
- https://youtube.com/watch?v=lHacJuru1bc&list=PLDyvV36pndZEB7kWWocU4QSn-G78LoaEE
- https://www.conventionalcommits.org/en/v1.0.0/
Важное замечание. Хоть мы и будем использовать для разработки наших проектов язык программирования TypeScript, но так как он является надстройкой над JavaScript и в браузере все равно будет выполняться JavaScript, то знание JavaScript необходимо. Зная JavaScript, вы сможете легко перейти на TypeScript и понимать как код исполняется в браузере.
JavaScript - это язык программирования, который широко используется для разработки веб-приложений и игр. Он позволяет добавлять интерактивность и динамическое поведение на веб-страницах.
JavaScript является одним из основных языков для разработки веб-игр. Он предоставляет мощные инструменты для создания игровой логики, управления графикой, анимаций и взаимодействия с пользователем.
Ниже приведены статьи и ресурсы, которые помогут вам изучить JavaScript для разработки. В первую очередь, рекомендуем изучить курс по JavaScript на https://learn.javascript.ru/ и в ходе изучения выполнять задания, которые предлагаются в курсе. Все задания необходимо выполнять в отдельных файлах и разместить их в репозитории на GitHub.
Ссылки:
TypeScript является надстройкой над JavaScript и предоставляет множество преимуществ при разработке игр:
Статическая типизация: TypeScript позволяет определять типы переменных, функций и объектов, что помогает выявлять ошибки на этапе разработки и повышает надежность кода.
Улучшенная поддержка IDE: TypeScript обладает богатой системой подсказок и автодополнения, что упрощает разработку и повышает производительность.
Модульность: TypeScript поддерживает модульную структуру кода, что позволяет разделять функциональность на отдельные модули и повторно использовать их в разных частях игры.
Расширенные возможности языка: TypeScript предоставляет дополнительные возможности, такие как классы, интерфейсы, перечисления и дженерики, которые упрощают разработку сложных игровых систем.
Легкая интеграция с существующим JavaScript кодом: TypeScript совместим с JavaScript, поэтому вы можете постепенно переводить существующий JavaScript код на TypeScript без необходимости переписывать его полностью.
В целом, TypeScript помогает улучшить качество и поддерживаемость кода при разработке игр, делая процесс разработки более эффективным и безопасным.
Для закрепления знаний по TypeScript рекомендуем изучить курс по TypeScript на https://ru.hexlet.io/courses/typescript-basics и в ходе изучения выполнять задания, которые предлагаются в курсе. Все задания необходимо выполнять в отдельных файлах и разместить их в репозитории на GitHub. Еще как вариант пройти интенсив по TypeScript на https://learn.javascript.ru/courses/typescript.
Ссылки:
- https://learn.javascript.ru/courses/typescript
- https://ru.hexlet.io/courses/typescript-basics
- https://typescriptlang.org/docs/handbook/typescript-from-scratch.html
Знание паттернов проектирования является важным для разработчика программного обеспечения по нескольким причинам:
Улучшение качества кода: Паттерны проектирования представляют собой проверенные и оптимальные способы решения типичных проблем в разработке программного обеспечения. Использование этих паттернов помогает создавать код, который легко читать, поддерживать и расширять. Они помогают разработчикам создавать гибкие и модульные системы, которые могут быть легко изменены в будущем.
Снижение сложности: Паттерны проектирования предлагают абстракции и стандартные решения для сложных проблем. Они помогают разработчикам разбить сложные системы на более мелкие и понятные компоненты. Это упрощает понимание и поддержку кода, а также уменьшает вероятность ошибок.
Общий язык команды: Знание паттернов проектирования позволяет разработчикам общаться на общем языке и понимать друг друга. Когда команда разработчиков использует общие паттерны, это упрощает коммуникацию и сотрудничество между разработчиками.
Эффективное использование ресурсов: Паттерны проектирования помогают разработчикам использовать ресурсы, такие как время и память, более эффективно. Они предлагают оптимальные способы организации кода и структурирования системы, что может привести к повышению производительности и эффективности программного обеспечения.
Примеры паттернов проектирования включают Singleton, Observer, Factory, и MVC (Model-View-Controller). Каждый из них решает определенные проблемы и имеет свои преимущества и ограничения. Знание этих паттернов поможет разработчику выбрать наиболее подходящий подход при проектировании и реализации программного обеспечения.
Тема паттернов проектирования достаточно обширная и ее изучение займет некоторое время, а так же необходимо на практике применять полученные знания чтобы понять полезность этих знаний. Поэтому рекомендуем изучить курс по паттернам проектирования https://stepik.org/course/111297/promo#toc для того чтобы получить базовые знания по паттернам проектирования и сразу же начать применять полученные знания на практике.
Ссылки:
- https://stepik.org/course/111297/promo#toc
- https://ru.hexlet.io/courses/js-polymorphism
- https://refactoring.guru/ru/design-patterns (очень хороший справочник паттернов)
- https://sourcemaking.com/design_patterns
Entity Component System (ECS) является архитектурным подходом в разработке игр, который может принести ряд преимуществ:
Модульность и Гибкость
ECS позволяет разработчикам создавать компоненты, которые определяют свойства, не связывая их с конкретными объектами. Это облегчает многократное использование кода, поскольку компоненты можно легко повторно применять к различным сущностям.
Удобство Обслуживания и Расширения
Разделение данных и поведения делает систему проще для понимания и расширения. Изменения в одном компоненте часто не затрагивают другие компоненты, что упрощает отладку и тестирование.
Повышенная Производительность
Данные организованы по типам компонентов, что улучшает кэширование и оптимизацию доступа к данным. Можно эффективно обрабатывать только актуальные компоненты, а не целые объекты.
Легкость Параллелизма
Так как компоненты обычно обновляются независимо друг от друга, ECS облегчает распределение работы по разным потокам и процессорам.
Прозрачность Архитектуры
Системы чётко определяют логику работы с компонентами, что делает архитектуру очевидной для всех участников проекта.
Меньше Иерархии Наследования
В классических ООП подходах быстро возникает сложная иерархия наследования, которую тяжело поддерживать и понимать. ECS избегает глубоких иерархий, полагаясь на композицию вместо наследования.
Используя Entity Component System, разработчики могут строить более гибкие и масштабируемые игровые приложения. Эта модель особенно хорошо подходит для игр с большим и динамичным миром, где требуется высокая степень взаимодействия между объектами.
Знание Entity Component System является важным навыком для разработчика игр, поэтому рекомендую изучить материалы по ECS, которые приведены ниже.
Ссылки:
- https://habr.com/ru/articles/665276/
- https://maxwellforbes.com/posts/typescript-ecs-what/
- https://dean-j-k-james.medium.com/introduction-to-entity-component-system-64c371f274bd
- https://github.com/mayakwd/tick-knock
Будем разрабатывать клон игры Vampire Survivors.
-
В центре экрана находится игровой персонаж, который может двигаться во все стороны при помощи клавиш управления. При достижеии края экрана, игровой персонаж должен появляться с противоположной стороны.
-
На игрока нападают враги и наносят ему урон. При достижении игроком нулевого здоровья, игра заканчивается. Враги должны появляться на экране в случайных местах и двигаться в случайном направлении. При достижении края экрана, враги должны двигаться в противоположном направлении. Уровень здоровья игрока необходимо показывать на экране.
-
Игрок атакует врагов, нанося им урон. При достижении врагом нулевого здоровья, он должен исчезать с экрана и на его месте появляется монетка, которую можно подобрать. При подборе монетки, игроку начисляются очки. Количество очков необходимо показывать на экране.
-
Реализовать функционал постановки игры на паузу и возобновления игры.
-
Добавить в игру три вида врагов, которые будут иметь разное количество здоровья и наносить разный урон игроку. Так же добавить в игру три вида монеток, которые будут прибавлять разное количество очков игроку.
-
Добавить в игру три типа оружия, которые будут наносить разный урон врагам. Оружие можно купить за очки, которые набрал игрок. Чтобы купить оружие, нужно подойти к торговцу и нажать клавишу управления. Торговец должен появляться в случайном месте на экране.
При выполнении заданий, необходимо использовать знания, которые вы получили в ходе изучения курсов. Для инициализации проекта испольуем vitejs, игру пишем на TypeScript используя pixi.js. Будет большим плюсом если вы сможете при реализации использовать Entity Component System. Проект должен быть опубликован на GitHub и развернут на GitHub Pages. При создания коммитов, необходимо использовать Conventional Commits (https://www.conventionalcommits.org/en/v1.0.0/).