SimbirSoft. Сквозной проект. Основы программирования

Содержание

Слайд 2

Что такое «Сквозной проект» и зачем он вам?

Чтобы стать ИТ специалистом, необходимо

Что такое «Сквозной проект» и зачем он вам? Чтобы стать ИТ специалистом,
не только изучить основы основ, но и получить опыт работы на достаточно больших проектах.
Поэтому в рамках курса «Основ программирования» кроме простых лабораторных работ (и усложненных задач к этим лабораторным работам) есть еще Сквозной проект, в котором в течение семестра каждый студент получит опыт длительной разработки достаточно объемного проекта.
Сквозной проект выполняется СТРОГО ПО ЭТАПАМ.
Он может быть сделан быстро досрочно – и он будет зачтен, в случае если авторство будет бесспорно.
Но в случае сильного запаздывания по этапам этот проект (даже сделанный! И даже при бесспорном авторстве!!!!!) не будет засчитан!
В рамках Сквозного проекта каждый студент будет делать свой собственный (уникальный!!!) вариант ИГРЫ.

Слайд 3

Какой вариант игры уже сделан для демонстрации?

Название игры: «Жизнь ёжика»
Объекты (Персонажи и

Какой вариант игры уже сделан для демонстрации? Название игры: «Жизнь ёжика» Объекты
предметы): Ёжик, грибы (его еда), яблоки (его лекарства), лиса (его враг), нож (его оружие)
Сценарий основной: Ёжик должен собрать все яблоки на этом уровне – тогда он переходит на следующий. Если он прошел все уровни – он победил.
Сценарии другие: Есть лиса - враг ёжика. Если он встретился с ней больше раз, чем следовало – игра проиграна. После встреч с лисой ёжик может подлечиться, если будет есть яблоки. Если ёжик обзаведется ножом, то при встрече с лисой не поздоровиться уже лисе.
Управление: Ёжик передвигается при нажатии клавиш – влево/вправо, вверх/вниз. Лиса перемещается автоматически – в сторону к ежику или случайно.

Слайд 4

Какой вариант игры должен выбрать и реализовать студент?

Вам предстоит в самом начале

Какой вариант игры должен выбрать и реализовать студент? Вам предстоит в самом
выбрать идею для своей игры.
Эта идея должна быть
А) отличной от идей всех ваших одногруппников
Б) Всё, что будет сделано в игре, вы либо уже знаете как сделать на момент начала работы над игрой, либо вы изучите все необходимое в рамках курса «Основы программирования»
В) Всю игру вы должны сделать в достаточной степени самостоятельно. Допустимо консультироваться или заимствовать код, но
1) любая строчка кода вами понята и может быть легко (и быстро) объяснена
2) более 50% строк кода написано вами индивидуально без какой-либо помощи и заимствований.
Вы можете выбрать варианты из предоставленного списка игр. В этом случае гарантируется, что вы в состоянии будет реализовать эту игру в рамках этого семестра, и что все нужные для проекта знания включены в темы лекций и лаб работ.
Если вы придумываете свой собственный вариант, то вы обязаны его согласовать с вашим преподавателем по лаб работам. Если он его одобрит – лишь после этого вы можете приступать к реализации.

Слайд 5

Какие требования к Сквозному проекту?

Проект выполняется на Си в среде Microsoft Visual

Какие требования к Сквозному проекту? Проект выполняется на Си в среде Microsoft
Studio
Проект выполняется персонально. Кода, написанного лично, должно быть не менее 50%
Каждая строка позаимствованного кода (в том числе и сгенерированного VS, созданного в кооперации с консультантами, найденного в интернете и т.п.) должна быть понятна сдающему. (Понятность проверяется как опросом, так и заданием что-то в этом коде изменить)
Сквозной проект является ДОПОЛНИТЕЛЬНЫМ проектом. В случае его отсутствия у студента, студент имеет возможность получить положительную оценку за дисциплину.
Сквозной проект выполняется либо четко по этапам, либо с опережением этапов. Если студент отстает от графика и группы, то проект ему не засчитывается. Совсем не засчитывается ☹ (это делается как для того, чтобы студенты привыкали к четкому графику, так и для уменьшения возможностей списывания)

Слайд 6

Варианты игры

Подход 1. Изучите реализованную игру «Жизнь ёжика». Подумайте, какие герои могут

Варианты игры Подход 1. Изучите реализованную игру «Жизнь ёжика». Подумайте, какие герои
быть в вашей версии игры? Какой сценарий будет у вас? Например, можно сделать игру (по аналогии с «Жизнью ёжика») где «Девочка» собирает «Цветы», чтобы сплести «Венок». Объект «Крапива» представляет для нее определенную угрозу. А если она догонит «Бабочку», то получает бонус.
После того как придумаете игру, опишите все объекты и сценарии в виде текста. И согласуйте вариант вашей игры с преподавателем ведущим лаб работы.
Подход 2. Выберите готовый вариант из списка
(СПИСОК В РАЗРАБОТКЕ. В настоящий момент он недоступен для выбора вариантов!)

Слайд 8

Сквозной проект – этап 1 (СП1)

Выбор варианта игры.
Отрисовка всех объектов.
(Статическая картинка).
Презентация итогов

Сквозной проект – этап 1 (СП1) Выбор варианта игры. Отрисовка всех объектов.
этапа 1 преподавателю.

Слайд 9

Задачи ЭТАПА 1

Задача 1. Выбор темы игры
Задача 2. Утверждение темы игры
Задача 3.

Задачи ЭТАПА 1 Задача 1. Выбор темы игры Задача 2. Утверждение темы
Рисуем все персонажи и предметы в виде картинки (в компьютере или на бумаге)
Задача 4. Создать приложение, содержащее все объекты из игры
Задача 5. Презентация преподавателю получившегося приложения на занятии

Слайд 10

Задача 1. Выбор темы игры

Вам необходимо выбрать или придумать тему для игры

Задача 1. Выбор темы игры Вам необходимо выбрать или придумать тему для
и оформить ее в виде текста. В описание вашего варианта рекомендуется придерживаться следующей структуры.
Название игры: «Жизнь ёжика»
Объекты (Персонажи и предметы): Ёжик, грибы (его еда), яблоки (его лекарства), лиса (его враг), нож (его оружие)
Сценарий основной: Ёжик должен собрать все яблоки на этом уровне – тогда он переходит на следующий. Если он прошел все уровни – он победил.
Сценарии другие: Есть лиса - враг ёжика. Если он встретился с ней больше раз, чем следовало – игра проиграна. После встреч с лисой ёжик может подлечиться, если будет есть яблоки. Если ёжик обзаведется ножом, то при встрече с лисой не поздоровиться уже лисе.
Управление: Ёжик передвигается при нажатии клавиш – влево/вправо, вверх/вниз. Лиса перемещается автоматически – в сторону к ежику или случайно.

Слайд 11

Задача 2. Утверждение темы игры

После выбора темы вам необходимо утвердить её у

Задача 2. Утверждение темы игры После выбора темы вам необходимо утвердить её
вашего преподавателя, ведущего лабораторные работы.
До утверждения темы не рекомендуется начинать кодирование.
Сразу после утверждения вы можете выполнять Задачу 3 и далее.

Слайд 12

Задача 3. Рисуем все персонажи и предметы в виде картинки (в компьютере

Задача 3. Рисуем все персонажи и предметы в виде картинки (в компьютере или на бумаге)
или на бумаге)

Слайд 13

Задача 4. Создать приложение, содержащее все объекты из игры

Задача 4. Создать приложение, содержащее все объекты из игры

Слайд 14

Шаг 1. Создаем проект

Шаг 1. Создаем проект

Слайд 15

Шаг 2. Запускаем приложение

Шаг 2. Запускаем приложение

Слайд 16

Шаг 3. Ищем WndProc

Шаг 3. Ищем WndProc

Слайд 17

Шаг 4. Ищем “case WM_PAINT:”

Шаг 4. Ищем “case WM_PAINT:”

Слайд 18

Основной шаг: Добавляем код, рисующий все объекты! (1)

Основной шаг: Добавляем код, рисующий все объекты! (1)

Слайд 19

Основной шаг: Добавляем код, рисующий все объекты! (2)

Основной шаг: Добавляем код, рисующий все объекты! (2)

Слайд 20

Получившееся приложение со всеми объектами игры

Получившееся приложение со всеми объектами игры

Слайд 21

Задача 5. Презентация преподавателю получившегося приложения на занятии

Вам необходимо показывать ваши наработки

Задача 5. Презентация преподавателю получившегося приложения на занятии Вам необходимо показывать ваши
по игре преподавателю после выполнения КАЖДОГО ЭТАПА проекта!
Если вы выполнили все этапы, но показали всё только в конце, то проект вам не засчитывается. ДАЖЕ ЕСЛИ ВЫ ДОКАЗАЛИ полное свое авторство – увы ☹

Слайд 22

ИТОГО по этапу 1

Вы выбрали вариант игры и согласовали его с преподавателем
Описали

ИТОГО по этапу 1 Вы выбрали вариант игры и согласовали его с
игру – объекты и сценарии
Создали картинку (на бумаге или в компьютере) с объектами
Создали программу отрисовывающую все объекты
Продемонстрировали программу и картинку преподавателю
У вас есть всё, чтобы идти дальше и реализовать сценарии игры!

Слайд 24

Сквозной проект – этап 2 (СП2)

Объекты игры распределяются по отдельным функциям.
Добавляется управление

Сквозной проект – этап 2 (СП2) Объекты игры распределяются по отдельным функциям.
героем.
Игра заканчивается при победе.
Презентация итогов этапа 2 преподавателю.

Слайд 25

Задачи ЭТАПА 2

Задача 1. Для каждого объекта создать свою собственную функцию
Задача 2.

Задачи ЭТАПА 2 Задача 1. Для каждого объекта создать свою собственную функцию
Управление героем через клавиатуру
Задача 3. Игра автоматически заканчивается при победе (ёжик нашел гриб)
Задача 4. Презентация преподавателю получившегося приложения на занятии

Слайд 26

Задача 1. Для каждого объекта создать свою собственную функцию

Для каждого объекта нужно

Задача 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)

Задача 1. Реализация в игре «Жизнь ёжика» (1)

Слайд 28

Задача 1. Реализация в игре «Жизнь ёжика» (2)

Задача 1. Реализация в игре «Жизнь ёжика» (2)

Слайд 29

Задача 1. Реализация в игре «Жизнь ёжика» (3)

Задача 1. Реализация в игре «Жизнь ёжика» (3)

Слайд 30

Задача 1. Реализация в игре «Жизнь ёжика» (4)

Задача 1. Реализация в игре «Жизнь ёжика» (4)

Слайд 31

Задача 1. Реализация в игре «Жизнь ёжика» (5)

Задача 1. Реализация в игре «Жизнь ёжика» (5)

Слайд 32

Задача 1. Реализация в игре «Жизнь ёжика» (6)

Задача 1. Реализация в игре «Жизнь ёжика» (6)

Слайд 33

Задача 1. Работающее приложение

Задача 1. Работающее приложение

Слайд 34

Задача 2. Управление героем через клавиатуру

Реализовать в программе управление героем через клавиатуру.
Для

Задача 2. Управление героем через клавиатуру Реализовать в программе управление героем через
этого нужно:
Завести глобальные переменные, в которых хранятся координаты героя
В WM_PAINT при отрисовке героя подставлять значения этих глобальных переменных
Добавить обработку клавиш. При нажатии клавиши «ВЛЕВО» уменьшать X координату героя. При нажатии клавиши «ВПРАВО» увеличивать X координату героя. Аналогично изменять координату Y.

Слайд 35

Задача 2. Реализация (1). Глобальные переменные

Задача 2. Реализация (1). Глобальные переменные

Слайд 36

Задача 2. Реализация (2). Изменения в WndProc

Задача 2. Реализация (2). Изменения в WndProc

Слайд 37

Задача 2. Реализация (3). Изменения в WndProc

Задача 2. Реализация (3). Изменения в WndProc

Слайд 38

Задача 2. Код обработки нажатий клавиш

case WM_KEYDOWN:
switch (wParam)
{
case

Задача 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;

Слайд 39

Задача 2. Работающее приложение

Задача 2. Работающее приложение

Слайд 40

Задача 3. Игра автоматически заканчивается при победе

Реализовать в программе завершение программы если

Задача 3. Игра автоматически заканчивается при победе Реализовать в программе завершение программы
герой нашел необходимый ему предмет.
Для этого нужно:
Завести глобальные переменные, в которых хранятся координаты нужного предмета
В WM_PAINT при отрисовке предмета подставлять значения этих глобальных переменных
В обработку клавиш добавить проверку совпадения координат героя и и координат предмета. В случае если эти координаты совпали – завершать игру

Слайд 41

Задача 3. Реализация (1). Глобальные переменные

Задача 3. Реализация (1). Глобальные переменные

Слайд 42

Задача 3. Реализация (2). Функция для проверки совпадения координат ёжика и гриба

int

Задача 3. Реализация (2). Функция для проверки совпадения координат ёжика и гриба
MushroomIsEaten() {
if (HedgehogX - 20 < MushroomX
&& HedgehogX + 20 > MushroomX
&& HedgehogY - 20 < MushroomY
&& HedgehogY + 20 > MushroomY) {
return 1;
}
else {
return 0;
}
}

Слайд 43

Задача 3. Реализация (3). Изменения в WndProc

Задача 3. Реализация (3). Изменения в WndProc

Слайд 44

Задача 3. Работающее приложение

Задача 3. Работающее приложение

Слайд 45

Задача 4. Презентация преподавателю получившегося приложения на занятии

Вам необходимо показывать ваши наработки

Задача 4. Презентация преподавателю получившегося приложения на занятии Вам необходимо показывать ваши
по игре преподавателю после выполнения КАЖДОГО ЭТАПА проекта!
Если вы выполнили все этапы, но показали всё только в конце, то проект вам не засчитывается. ДАЖЕ ЕСЛИ ВЫ ДОКАЗАЛИ полное свое авторство – увы ☹

Слайд 46

ИТОГО по этапу 2

Все объекты игры перебрались в собственные функции. И теперь

ИТОГО по этапу 2 Все объекты игры перебрались в собственные функции. И
вы можете рисовать их в любом месте и в любом количестве!
Вы оставили на карте только одного героя и теперь управляете его перемещениями при помощи клавиатуры.
Вы оставили только один предмет, нужный герою. И проверяете достиг ли герой этого предмета или нет. И если он его достиг – то игра завершается!
У вас есть всё, чтобы идти дальше!

Слайд 48

Сквозной проект – этап 3 (СП3)

Объект перемещается случайным образом.
Герою наносится ущерб.
Герой должен

Сквозной проект – этап 3 (СП3) Объект перемещается случайным образом. Герою наносится
собрать много предметов.
Герой может подлечиваться.
Презентация итогов этапа 3 преподавателю.

Слайд 49

Задачи ЭТАПА 3

Задача 1. Сделать автоматическое перемещение врага или предмета.
Задача 2. Герою

Задачи ЭТАПА 3 Задача 1. Сделать автоматическое перемещение врага или предмета. Задача
наносится ущерб. В случае проигрыша игра заканчивается.
Задача 3. Герой собирает не один предмет, а множество.
Задача 4. Герой может подлечиться множеством предметов.
Задача 5. Презентация итогов этапа 3 преподавателю

Слайд 50

Задача 1. Сделать автоматическое перемещение врага или предмета

Сделаем автоматическое перемещение лисы
Для этого

Задача 1. Сделать автоматическое перемещение врага или предмета Сделаем автоматическое перемещение лисы
нужно:
Завести глобальные переменные, в которых хранятся координаты лисы
В WM_PAINT при отрисовке лисы подставлять значения этих глобальных переменных
Добавить создание таймера при создании окна
При каждом срабатывании таймера вычислять перемещение лисы. И изменять координаты лисы.

Слайд 51

Задача 1. Реализация (1). Глобальные переменные

Задача 1. Реализация (1). Глобальные переменные

Слайд 52

Задача 1. Реализация (2). WM_PAINT

Задача 1. Реализация (2). WM_PAINT

Слайд 53

Задача 1. Реализация (3). Создание таймера

Задача 1. Реализация (3). Создание таймера

Слайд 54

Задача 1. Реализация (4). Срабатывание таймера и перемещение лисы

Задача 1. Реализация (4). Срабатывание таймера и перемещение лисы

Слайд 55

Задача 2. Герою наносится ущерб. В случае проигрыша игра заканчивается.

Каждую секунду (при

Задача 2. Герою наносится ущерб. В случае проигрыша игра заканчивается. Каждую секунду
срабатывании таймера – сразу после перемещения) проверяем может ли лиса съесть ёжика. Если может – то уменьшаем его запас здоровья. Если здоровья не осталось – игра заканчивается.
Для реализации этой задачи нужно:
Завести глобальную переменную, в которой хранится количество здоровья ёжика
При срабатывании таймера (событие WM_TIMER) пытаемся съесть ёжика
После попытки съесть ёжика проверяем – есть у него еще здоровье или нет. Если здоровья нет – то завершаем игру

Слайд 56

Задача 2. Реализация (1). Глобальные переменные

Задача 2. Реализация (1). Глобальные переменные

Слайд 57

Задача 2. Реализация (2). Пытаемся съесть ёжика

Задача 2. Реализация (2). Пытаемся съесть ёжика

Слайд 58

Задача 2. Реализация (3). Если здоровья больше нет – завершаем игру

Задача 2. Реализация (3). Если здоровья больше нет – завершаем игру

Слайд 59

Задача 3. Герой собирает не один предмет, а множество

Ежик должен собрать не

Задача 3. Герой собирает не один предмет, а множество Ежик должен собрать
1 гриб, а 12 чтобы успешно закончить игру.
1, 2 или 3 гриба можно было бы хранить в наборе отдельных переменных, но если их 12 – код обработки будет очень большим и сложным. Поэтому использовать массивы, чтобы это реализовать.
Для этого нужно:
Глобальные переменные, отвечающие за координаты гриба переделываем в массивы. Поскольку грибы уже собранные не должны отрисовываться, то нужно для каждого гриба еще добавить переменную отражающую статус «Этот гриб не собран!»
В WM_PAINT при отрисовке гриба будем использовать массивы.
При проверке совпадения координат ежика с грибами также будем использовать массивы.
При проверке выполнил ли ежик свою работу и можно ли уже завершать игру также будем использовать массивы.

Слайд 60

Задача 3. Реализация (1). Глобальные переменные

Задача 3. Реализация (1). Глобальные переменные

Слайд 61

Задача 3. Реализация (2). Отрисовка

Задача 3. Реализация (2). Отрисовка

Слайд 62

Задача 3. Реализация (3). Поедание грибов

Задача 3. Реализация (3). Поедание грибов

Слайд 63

Задача 3. Реализация (4). Окончание игры

Задача 3. Реализация (4). Окончание игры

Слайд 64

Задача 4. Герой может подлечиться множеством предметов

В игре «Жизнь ёжика» есть предметы

Задача 4. Герой может подлечиться множеством предметов В игре «Жизнь ёжика» есть
«Яблоки», которые для ёжика имеют оздоровительное свойство. Если ёжик съедает яблоко, то его здоровье увеличивается на 1. Реализуем возможность оздоровления ёжика.
Для этого нужно:
Глобальные переменные, отвечающие за координаты яблок и за их видимость. Поскольку у нас будет множество яблок, то будем использовать массив.
В WM_PAINT при отрисовке яблок будем использовать массивы.
Реализуем проверку совпадения координат ежика с яблоками. Если координаты совпали – то будем увеличивать запас здоровья ежика, а яблоко делаем невидимым.

Слайд 65

Задача 4. Реализация (1). Глобальные переменные

Задача 4. Реализация (1). Глобальные переменные

Слайд 66

Задача 4. Реализация (2). Отрисовка

Задача 4. Реализация (2). Отрисовка

Слайд 67

Задача 4. Реализация (3). Поедание яблок

Задача 4. Реализация (3). Поедание яблок

Слайд 68

Задача 5. Презентация преподавателю получившегося приложения на занятии

Вам необходимо показывать ваши наработки

Задача 5. Презентация преподавателю получившегося приложения на занятии Вам необходимо показывать ваши
по игре преподавателю после выполнения КАЖДОГО ЭТАПА проекта!
Если вы выполнили все этапы, но показали всё только в конце, то проект вам не засчитывается. ДАЖЕ ЕСЛИ ВЫ ДОКАЗАЛИ полное свое авторство – увы ☹

Слайд 69

ИТОГО по этапу 3

Ваши предметы научились самостоятельно перемещаться.
Вашему герою наносится ущерб.
Но при

ИТОГО по этапу 3 Ваши предметы научились самостоятельно перемещаться. Вашему герою наносится
этом ваш герой научился поправлять свое здоровье.
Предметов стало много, поскольку вы стали использовать массивы для их хранения.
У вас уже есть игра, в которую можно поиграть.
Идем дальше!

Слайд 71

ИТОГО по сквозному проекту

Обсудили что такое ОС, интерфейс, GUI, API, Windows API

ИТОГО по сквозному проекту Обсудили что такое ОС, интерфейс, GUI, API, Windows
(WinAPI)
Узнали как создать WinAPI приложение в VS.
Узнали/повторили декартову систему координат.
Узнали про экранную систему координат.
Узнали как нарисовать рисунок из линий.
Узнали как задать стиль, цвет и толщину у пера.
Узнали как нарисовать прямоугольник и эллипс.
Узнали как создать кисть для рисования фигур.
Узнали что нужно делать в ЛР4 и ЛР5.