Спецкурс
Тессеракт
Основная информация
  Пункт Содержание
1 Направление Третий Путь
2 Класс 9 - 11
3 Тип курса зачётный только для 9-11-ти классников
4 Преподаватели Кузнецов Дмитрий
5 Стажёры Нет
6 Время проведения Среда 18:55 - 20:15
7 Цель курса Развить у школьников навыки алгоритмизации и программирования путём создания двухмерных компьютерных игр
8 Задачи курса 1. Освоение методов программирования на языке Python
2. Изучение логического устройства различных настольных и компьютерных игр
3. Освоение библиотеки pygame и методов реализации игровых алгоритмов 
9 Особенности курса Курс обучает многим аспектам программирования, которых нет в школьных курсах. Мы проходим основы написания кода быстрее, фокусируясь на практическом применении сложных вещей в интересном формате — создании компьютерных игр.
10 Формат проведения занятия (включая использование classroom) Занятия по Python проводятся в формате семинара. Большинство других занятий проводится в виде интерактивной лекции, где ученики получают баллы за участие в обсуждении темы.
11 Целевая аудитория Школьники, заинтересованные в программировании и желающие научиться понимать сложные концепции разработки игр.
12 Краткое описание курса Курс программирования начального уровня по созданию двухмерных компьютерных игр от шахмат до симуляторов на языке Python.
13 Количество слушателей до 10 человек
14 Отбор На первой паре будет проведена контрольная работа, включающая в себя математические и логические задачи, а также диагностический тест на определение навыка программирования, если он есть. Отбор будет произведён по результатам контрольной работы. 
15 Формы контроля и
система отчётности
В обоих семестрах:
Посещаемость: 15%
Работа на семинаре: 20%
Домашние задания: 25%
Проект: 40%

Проект первого полугодия представляет собой игру-симулятор эволюции. Программист задаёт начальные условия и условия для перехода на следующее поколение, наблюдая за результатом. После занятия 08.12 будет проведена предварительная оценка работы. Защита проектов происходит на занятии 15.12, пересдача — на занятии 22.12.

Проект второго полугодия предполагает написание полноценной двухмерной игры. Критерии полноценной игры: наличие физики (скорость, ускорение и гравитация объектов), определение столкновений объектов, наличие готового игрового уровня (уровней) или редактора уровней, управление персонажем или игрой при помощи клавиатуры и мыши, явные условия победы и/или повышения ступени прогресса в игре, наличие главного меню, из которого можно запустить игровой процесс. После занятия 06.04 будет проведена предварительная оценка работы. Для 11-классников защита проектов происходит на занятии 20.04, пересдача — на занятии 27.04. Для 9-10-классников защита проектов происходит на занятии 27.04, пересдача — на занятии 04.05.
16 Формат курса: онлайн/оффлайн/гибрид. План действий в случае всеобщего дистанта Курс проводится офлайн. В первый месяц, ровно как и при объявлении локдауна, учащиеся будут подключаться к занятию в Discord и работать с языком программирования на своих домашних компьютерах.
20 Дополнительная информация о курсе На компьютерах ЭФ для программирования будет использоваться онлайн-компилятор repl.it, позволяющий работать с pygame, а также онлайн-приложение Discord для доступа к лекциям.
Для занятий в режиме онлайн, а также выполнения домашних заданий требуется домашний компьютер с 4 ГБ оперативной памяти и набор программ для использования языка Python.
В течение первой недели занятий учащиеся должны установить Python 3.7 или выше и IDE PyCharm 2021.2 или выше. Допускается возможность использования онлайн-компилятора repl.it вместо вышеуказанных программ, в таком случае объём оперативной памяти не имеет значения. Необходимые инструкции для установки будут выложены в группе курса ВКонтакте и в Discord.
Позанятийный план
№ занятия Дата (Среда) Тематический блок План занятия
1 06.10.2021 Введение Знакомство с учениками. Вступительный тест для определения уровня навыков учащихся. Обсуждение планов курса и демонстрация примеров игровых приложений. Установка программ.
2 13.10.2021 Основы Python Начало знакомства с языком Python. Настройка среды для работы с Python. Переменные, оператор присваивания, математические и логические операторы, циклы.
3 20.10.2021 Основы Python Продолжаем знакомиться с языком Python. Кортежи, массивы, словари, множества.
4 27.10.2021 Основы Python Осваиваем более сложные понятия Python. Классы, атрибуты, функции. Библиотеки os, math, random, time.
5 03.11.2021 Основы Python Укрепляем знания о Python. Системы координат. Практикум по решению школьных задач с помощью полученных знаний.
6 10.11.2021 Основы pygame Введение в pygame. Шаблон проекта. Основные понятия. События клавиатуры и мыши. Рендер простой геометрии и шрифтов. Создаём крестики-нолики и простой графический редактор.
7 17.11.2021 Основы pygame Учимся искать картинки в интернете. Обработка изображений. Рендер графики. Дорабатываем крестики-нолики при помощи полученных знаний. 
8 24.11.2021 Разработка алгоритмов Делаем тетрис. Игровое поле, создание объектов для фигур, поведение фигур, условия победы или поражения. Начало работы над проектами «Клеточный автомат» или «Чашка Петри»
9 01.12.2021 Разработка алгоритмов Разработка шахмат. Более сложное поведение фигур. Просчитывание компьютером возможных ходов. Игра вдвоём на одном компьютере. 
10 08.12.2021 Базы данных Что делать с сохранениями и настройками? На помощь приходит SQL! Осваиваем работу с базами данных: таблицы, запросы, создание, изменение и удаление ячеек. Дорабатываем тетрис и шахматы.
11 15.12.2021 Защита проектов Защита проектов «Клеточный автомат» или «Чашка Петри»
12 22.12.2021 Чаепитие Пересдача и чаепитие.
  29.12.2021    
  05.01.2022    
  12.01.2022    
13 19.01.2022 Python Математика. Решение школьных задач при помощи Python. Построение графиков при помощи mathplotlib. Шифрование математических выражений и уравнений в строки.
14 26.01.2022 Алгоритмы и игры Карточная игра Fluxx. Игра для нескольких игроков. Разработка простых игровых механик: несколько типов карт, динамические правила и условия победы.
15 02.02.2022 Алгоритмы и игры Алгоритмы поиска пути. Создание генератора уровней. Применение алгоритма Дейкстры для прохождения лабиринтов.
16 09.02.2022 Графика и рендеринг Вид сбоку или вид сверху? А может, изометрия? Квадраты или хексы? Графический дизайн 2D-игр. Виды графики в двухмерных играх. Движение камеры.
17 16.02.2022 Алгоритмы и игры Разделение проекта на файлы. Создание юнитов и предметов. Написание класса с собственными свойствами. Библиотека ast и сохранение в файлы данных.
18 23.02.2022 Алгоритмы и игры Пишем физический движок. Обработка столкновений. Скорость и ускорение объектов, игровые тики. Снаряды.
19 02.03.2022 Графика и рендеринг Анимация персонажей. Смена анимаций. Добавление звука и музыки.
  09.03.2022    
20 16.03.2022 Графика и рендеринг Графический интерфейс. Кнопки. Диалоговые окна. Начало работы над проектами. 
21 23.03.2022 Алгоритмы и игры Способности и модификаторы юнитов. Библиотека Numba для ускорения работы игры. 
22 30.03.2022 Алгоритмы и игры Физический движок pymunk и его особенности. Создание небольшой физической симуляции.
23 06.04.2022 Системный дизайн Лекция об особенностях игровых жанров: пошаговая стратегия и стратегия в реальном времени. Игровая экономика и баланс.
24 13.04.2022 Системный дизайн Лекция об особенностях игровых жанров: аркадный шутер, гонки, tower defense. Дизайн уровней и юнитов.
25 20.04.2022 Защита проектов Защита проектов по созданию прототипа полноценной игры.
26 27.04.2022 Продолжение следует… Пересдача для 11-классников и защита оставшихся проектов. Лекция об устройстве трёхмерной графики и современных движков. Эффект «Рыбьего глаза». Модели и материалы.
27 04.05.2022 Чаепитие Пересдача и чаепитие.
  11.05.2022    
  18.05.2022    
  25.05.2022    
  01.06.2022    
  08.06.2022    
  15.06.2022    
  22.06.2022    
  29.06.2022    
Список литературы
1 Лучано Рамальо. «Python. К вершинам мастерства»
2 Tynan Sylvester. «Designing Games. A guide to engineering experiences»
3 Документация Python. // Интернет-источник: https://pydocs.ru/
4 Документация pygame. // Интернет-источник: https://www.pygame.org/docs/
5 Pygame. Введение в разработку игр на Python. // https://younglinux.info/pygame/pygame
6 Как создаются изометрические миры // https://habr.com/ru/post/332922/
7 Примеры игр, созданных на pygame // https://itch.io/games/made-with-pygame
8 Простое объяснение алгоритмов поиска пути и A* // https://habr.com/ru/post/444828/