Слайд 2Что такое «Сквозной проект» и зачем он вам?
Чтобы стать ИТ специалистом, необходимо
не только изучить основы основ, но и получить опыт работы на достаточно больших проектах.
Поэтому в рамках курса «Основ программирования» кроме простых лабораторных работ (и усложненных задач к этим лабораторным работам) есть еще Сквозной проект, в котором в течение семестра каждый студент получит опыт длительной разработки достаточно объемного проекта.
Сквозной проект выполняется СТРОГО ПО ЭТАПАМ.
Он может быть сделан быстро досрочно – и он будет зачтен, в случае если авторство будет бесспорно.
Но в случае сильного запаздывания по этапам этот проект (даже сделанный! И даже при бесспорном авторстве!!!!!) не будет засчитан!
В рамках Сквозного проекта каждый студент будет делать свой собственный (уникальный!!!) вариант ИГРЫ.
Слайд 3Какой вариант игры уже сделан для демонстрации?
Название игры: «Жизнь ёжика»
Объекты (Персонажи и
предметы): Ёжик, грибы (его еда), яблоки (его лекарства), лиса (его враг), нож (его оружие)
Сценарий основной: Ёжик должен собрать все яблоки на этом уровне – тогда он переходит на следующий. Если он прошел все уровни – он победил.
Сценарии другие: Есть лиса - враг ёжика. Если он встретился с ней больше раз, чем следовало – игра проиграна. После встреч с лисой ёжик может подлечиться, если будет есть яблоки. Если ёжик обзаведется ножом, то при встрече с лисой не поздоровиться уже лисе.
Управление: Ёжик передвигается при нажатии клавиш – влево/вправо, вверх/вниз. Лиса перемещается автоматически – в сторону к ежику или случайно.
Слайд 4Какой вариант игры должен выбрать и реализовать студент?
Вам предстоит в самом начале
выбрать идею для своей игры.
Эта идея должна быть
А) отличной от идей всех ваших одногруппников
Б) Всё, что будет сделано в игре, вы либо уже знаете как сделать на момент начала работы над игрой, либо вы изучите все необходимое в рамках курса «Основы программирования»
В) Всю игру вы должны сделать в достаточной степени самостоятельно. Допустимо консультироваться или заимствовать код, но
1) любая строчка кода вами понята и может быть легко (и быстро) объяснена
2) более 50% строк кода написано вами индивидуально без какой-либо помощи и заимствований.
Вы можете выбрать варианты из предоставленного списка игр. В этом случае гарантируется, что вы в состоянии будет реализовать эту игру в рамках этого семестра, и что все нужные для проекта знания включены в темы лекций и лаб работ.
Если вы придумываете свой собственный вариант, то вы обязаны его согласовать с вашим преподавателем по лаб работам. Если он его одобрит – лишь после этого вы можете приступать к реализации.
Слайд 5Какие требования к Сквозному проекту?
Проект выполняется на Си в среде Microsoft Visual
Studio
Проект выполняется персонально. Кода, написанного лично, должно быть не менее 50%
Каждая строка позаимствованного кода (в том числе и сгенерированного VS, созданного в кооперации с консультантами, найденного в интернете и т.п.) должна быть понятна сдающему. (Понятность проверяется как опросом, так и заданием что-то в этом коде изменить)
Сквозной проект является ДОПОЛНИТЕЛЬНЫМ проектом. В случае его отсутствия у студента, студент имеет возможность получить положительную оценку за дисциплину.
Сквозной проект выполняется либо четко по этапам, либо с опережением этапов. Если студент отстает от графика и группы, то проект ему не засчитывается. Совсем не засчитывается ☹ (это делается как для того, чтобы студенты привыкали к четкому графику, так и для уменьшения возможностей списывания)
Слайд 6Варианты игры
Подход 1. Изучите реализованную игру «Жизнь ёжика». Подумайте, какие герои могут
быть в вашей версии игры? Какой сценарий будет у вас? Например, можно сделать игру (по аналогии с «Жизнью ёжика») где «Девочка» собирает «Цветы», чтобы сплести «Венок». Объект «Крапива» представляет для нее определенную угрозу. А если она догонит «Бабочку», то получает бонус.
После того как придумаете игру, опишите все объекты и сценарии в виде текста. И согласуйте вариант вашей игры с преподавателем ведущим лаб работы.
Подход 2. Выберите готовый вариант из списка
(СПИСОК В РАЗРАБОТКЕ. В настоящий момент он недоступен для выбора вариантов!)
Слайд 8Сквозной проект – этап 1 (СП1)
Выбор варианта игры.
Отрисовка всех объектов.
(Статическая картинка).
Презентация итогов
этапа 1 преподавателю.
Слайд 9Задачи ЭТАПА 1
Задача 1. Выбор темы игры
Задача 2. Утверждение темы игры
Задача 3.
Рисуем все персонажи и предметы в виде картинки (в компьютере или на бумаге)
Задача 4. Создать приложение, содержащее все объекты из игры
Задача 5. Презентация преподавателю получившегося приложения на занятии
Слайд 10Задача 1. Выбор темы игры
Вам необходимо выбрать или придумать тему для игры
и оформить ее в виде текста. В описание вашего варианта рекомендуется придерживаться следующей структуры.
Название игры: «Жизнь ёжика»
Объекты (Персонажи и предметы): Ёжик, грибы (его еда), яблоки (его лекарства), лиса (его враг), нож (его оружие)
Сценарий основной: Ёжик должен собрать все яблоки на этом уровне – тогда он переходит на следующий. Если он прошел все уровни – он победил.
Сценарии другие: Есть лиса - враг ёжика. Если он встретился с ней больше раз, чем следовало – игра проиграна. После встреч с лисой ёжик может подлечиться, если будет есть яблоки. Если ёжик обзаведется ножом, то при встрече с лисой не поздоровиться уже лисе.
Управление: Ёжик передвигается при нажатии клавиш – влево/вправо, вверх/вниз. Лиса перемещается автоматически – в сторону к ежику или случайно.
Слайд 11Задача 2. Утверждение темы игры
После выбора темы вам необходимо утвердить её у
вашего преподавателя, ведущего лабораторные работы.
До утверждения темы не рекомендуется начинать кодирование.
Сразу после утверждения вы можете выполнять Задачу 3 и далее.
Слайд 12Задача 3. Рисуем все персонажи и предметы в виде картинки (в компьютере
или на бумаге)
Слайд 13Задача 4. Создать приложение, содержащее все объекты из игры
Слайд 18Основной шаг: Добавляем код, рисующий все объекты! (1)
Слайд 19Основной шаг: Добавляем код, рисующий все объекты! (2)
Слайд 20Получившееся приложение со всеми объектами игры
Слайд 21Задача 5. Презентация преподавателю получившегося приложения на занятии
Вам необходимо показывать ваши наработки
по игре преподавателю после выполнения КАЖДОГО ЭТАПА проекта!
Если вы выполнили все этапы, но показали всё только в конце, то проект вам не засчитывается. ДАЖЕ ЕСЛИ ВЫ ДОКАЗАЛИ полное свое авторство – увы ☹
Слайд 22ИТОГО по этапу 1
Вы выбрали вариант игры и согласовали его с преподавателем
Описали
игру – объекты и сценарии
Создали картинку (на бумаге или в компьютере) с объектами
Создали программу отрисовывающую все объекты
Продемонстрировали программу и картинку преподавателю
У вас есть всё, чтобы идти дальше и реализовать сценарии игры!
Слайд 24Сквозной проект – этап 2 (СП2)
Объекты игры распределяются по отдельным функциям.
Добавляется управление
героем.
Игра заканчивается при победе.
Презентация итогов этапа 2 преподавателю.
Слайд 25Задачи ЭТАПА 2
Задача 1. Для каждого объекта создать свою собственную функцию
Задача 2.
Управление героем через клавиатуру
Задача 3. Игра автоматически заканчивается при победе (ёжик нашел гриб)
Задача 4. Презентация преподавателю получившегося приложения на занятии
Слайд 26Задача 1. Для каждого объекта создать свою собственную функцию
Для каждого объекта нужно
создать функцию вида
void DrawMushroom(HDC hdc, int cx, int cy) {
...
}
void DrawKnife(HDC hdc, int cx, int cy) ...
void DrawApple(HDC hdc, int cx, int cy) ...
void DrawHedgehog(HDC hdc, int cx, int cy) ...
void DrawFox(HDC hdc, int cx, int cy) ...
в которые нужно перенести весь код отрисовки соответствующих объектов.
Сделать тестовую отрисовку 3 объектов каждого типа
Слайд 27Задача 1. Реализация в игре «Жизнь ёжика» (1)
Слайд 28Задача 1. Реализация в игре «Жизнь ёжика» (2)
Слайд 29Задача 1. Реализация в игре «Жизнь ёжика» (3)
Слайд 30Задача 1. Реализация в игре «Жизнь ёжика» (4)
Слайд 31Задача 1. Реализация в игре «Жизнь ёжика» (5)
Слайд 32Задача 1. Реализация в игре «Жизнь ёжика» (6)
Слайд 34Задача 2. Управление героем через клавиатуру
Реализовать в программе управление героем через клавиатуру.
Для
этого нужно:
Завести глобальные переменные, в которых хранятся координаты героя
В WM_PAINT при отрисовке героя подставлять значения этих глобальных переменных
Добавить обработку клавиш. При нажатии клавиши «ВЛЕВО» уменьшать X координату героя. При нажатии клавиши «ВПРАВО» увеличивать X координату героя. Аналогично изменять координату Y.
Слайд 35Задача 2. Реализация (1). Глобальные переменные
Слайд 36Задача 2. Реализация (2). Изменения в WndProc
Слайд 37Задача 2. Реализация (3). Изменения в WndProc
Слайд 38Задача 2. Код обработки нажатий клавиш
case WM_KEYDOWN:
switch (wParam)
{
case
VK_UP:
HedgehogY -= 10;
InvalidateRect(hWnd, NULL, TRUE);
break;
case VK_DOWN:
HedgehogY += 10;
InvalidateRect(hWnd, NULL, TRUE);
break;
case VK_LEFT:
HedgehogX -= 10;
InvalidateRect(hWnd, NULL, TRUE);
break;
case VK_RIGHT:
HedgehogX += 10;
InvalidateRect(hWnd, NULL, TRUE);
break;
}
break;
Слайд 40Задача 3. Игра автоматически заканчивается при победе
Реализовать в программе завершение программы если
герой нашел необходимый ему предмет.
Для этого нужно:
Завести глобальные переменные, в которых хранятся координаты нужного предмета
В WM_PAINT при отрисовке предмета подставлять значения этих глобальных переменных
В обработку клавиш добавить проверку совпадения координат героя и и координат предмета. В случае если эти координаты совпали – завершать игру
Слайд 41Задача 3. Реализация (1). Глобальные переменные
Слайд 42Задача 3. Реализация (2). Функция для проверки совпадения координат ёжика и гриба
int
MushroomIsEaten() {
if (HedgehogX - 20 < MushroomX
&& HedgehogX + 20 > MushroomX
&& HedgehogY - 20 < MushroomY
&& HedgehogY + 20 > MushroomY) {
return 1;
}
else {
return 0;
}
}
Слайд 43Задача 3. Реализация (3). Изменения в WndProc
Слайд 45Задача 4. Презентация преподавателю получившегося приложения на занятии
Вам необходимо показывать ваши наработки
по игре преподавателю после выполнения КАЖДОГО ЭТАПА проекта!
Если вы выполнили все этапы, но показали всё только в конце, то проект вам не засчитывается. ДАЖЕ ЕСЛИ ВЫ ДОКАЗАЛИ полное свое авторство – увы ☹
Слайд 46ИТОГО по этапу 2
Все объекты игры перебрались в собственные функции. И теперь
вы можете рисовать их в любом месте и в любом количестве!
Вы оставили на карте только одного героя и теперь управляете его перемещениями при помощи клавиатуры.
Вы оставили только один предмет, нужный герою. И проверяете достиг ли герой этого предмета или нет. И если он его достиг – то игра завершается!
У вас есть всё, чтобы идти дальше!
Слайд 48Сквозной проект – этап 3 (СП3)
Объект перемещается случайным образом.
Герою наносится ущерб.
Герой должен
собрать много предметов.
Герой может подлечиваться.
Презентация итогов этапа 3 преподавателю.
Слайд 49Задачи ЭТАПА 3
Задача 1. Сделать автоматическое перемещение врага или предмета.
Задача 2. Герою
наносится ущерб. В случае проигрыша игра заканчивается.
Задача 3. Герой собирает не один предмет, а множество.
Задача 4. Герой может подлечиться множеством предметов.
Задача 5. Презентация итогов этапа 3 преподавателю
Слайд 50Задача 1. Сделать автоматическое перемещение врага или предмета
Сделаем автоматическое перемещение лисы
Для этого
нужно:
Завести глобальные переменные, в которых хранятся координаты лисы
В WM_PAINT при отрисовке лисы подставлять значения этих глобальных переменных
Добавить создание таймера при создании окна
При каждом срабатывании таймера вычислять перемещение лисы. И изменять координаты лисы.
Слайд 51Задача 1. Реализация (1). Глобальные переменные
Слайд 52Задача 1. Реализация (2). WM_PAINT
Слайд 53Задача 1. Реализация (3). Создание таймера
Слайд 54Задача 1. Реализация (4). Срабатывание таймера и перемещение лисы
Слайд 55Задача 2. Герою наносится ущерб. В случае проигрыша игра заканчивается.
Каждую секунду (при
срабатывании таймера – сразу после перемещения) проверяем может ли лиса съесть ёжика. Если может – то уменьшаем его запас здоровья. Если здоровья не осталось – игра заканчивается.
Для реализации этой задачи нужно:
Завести глобальную переменную, в которой хранится количество здоровья ёжика
При срабатывании таймера (событие WM_TIMER) пытаемся съесть ёжика
После попытки съесть ёжика проверяем – есть у него еще здоровье или нет. Если здоровья нет – то завершаем игру
Слайд 56Задача 2. Реализация (1). Глобальные переменные
Слайд 57Задача 2. Реализация (2). Пытаемся съесть ёжика
Слайд 58Задача 2. Реализация (3). Если здоровья больше нет – завершаем игру
Слайд 59Задача 3. Герой собирает не один предмет, а множество
Ежик должен собрать не
1 гриб, а 12 чтобы успешно закончить игру.
1, 2 или 3 гриба можно было бы хранить в наборе отдельных переменных, но если их 12 – код обработки будет очень большим и сложным. Поэтому использовать массивы, чтобы это реализовать.
Для этого нужно:
Глобальные переменные, отвечающие за координаты гриба переделываем в массивы. Поскольку грибы уже собранные не должны отрисовываться, то нужно для каждого гриба еще добавить переменную отражающую статус «Этот гриб не собран!»
В WM_PAINT при отрисовке гриба будем использовать массивы.
При проверке совпадения координат ежика с грибами также будем использовать массивы.
При проверке выполнил ли ежик свою работу и можно ли уже завершать игру также будем использовать массивы.
Слайд 60Задача 3. Реализация (1). Глобальные переменные
Слайд 61Задача 3. Реализация (2). Отрисовка
Слайд 62Задача 3. Реализация (3). Поедание грибов
Слайд 63Задача 3. Реализация (4). Окончание игры
Слайд 64Задача 4. Герой может подлечиться множеством предметов
В игре «Жизнь ёжика» есть предметы
«Яблоки», которые для ёжика имеют оздоровительное свойство. Если ёжик съедает яблоко, то его здоровье увеличивается на 1. Реализуем возможность оздоровления ёжика.
Для этого нужно:
Глобальные переменные, отвечающие за координаты яблок и за их видимость. Поскольку у нас будет множество яблок, то будем использовать массив.
В WM_PAINT при отрисовке яблок будем использовать массивы.
Реализуем проверку совпадения координат ежика с яблоками. Если координаты совпали – то будем увеличивать запас здоровья ежика, а яблоко делаем невидимым.
Слайд 65Задача 4. Реализация (1). Глобальные переменные
Слайд 66Задача 4. Реализация (2). Отрисовка
Слайд 67Задача 4. Реализация (3). Поедание яблок
Слайд 68Задача 5. Презентация преподавателю получившегося приложения на занятии
Вам необходимо показывать ваши наработки
по игре преподавателю после выполнения КАЖДОГО ЭТАПА проекта!
Если вы выполнили все этапы, но показали всё только в конце, то проект вам не засчитывается. ДАЖЕ ЕСЛИ ВЫ ДОКАЗАЛИ полное свое авторство – увы ☹
Слайд 69ИТОГО по этапу 3
Ваши предметы научились самостоятельно перемещаться.
Вашему герою наносится ущерб.
Но при
этом ваш герой научился поправлять свое здоровье.
Предметов стало много, поскольку вы стали использовать массивы для их хранения.
У вас уже есть игра, в которую можно поиграть.
Идем дальше!
Слайд 71ИТОГО по сквозному проекту
Обсудили что такое ОС, интерфейс, GUI, API, Windows API
(WinAPI)
Узнали как создать WinAPI приложение в VS.
Узнали/повторили декартову систему координат.
Узнали про экранную систему координат.
Узнали как нарисовать рисунок из линий.
Узнали как задать стиль, цвет и толщину у пера.
Узнали как нарисовать прямоугольник и эллипс.
Узнали как создать кисть для рисования фигур.
Узнали что нужно делать в ЛР4 и ЛР5.