Тема: створення ігрового проекту мовою C++.
Мета: навчитися складати та виконувати алгоритми з використанням змінних для розв’язування задач мовою С++.
По завершенню навчання учень уміє:
застосовувати отримані знання під час вирішення практичних завдань;
надавати значення змінним та змінювати їх, у тому числі програмним шляхом;
використовувати в конструкціях розгалуження та повторення умови зі змінними;
створювати та застосовувати інформаційні моделі різних типів із використанням змінних.
Обладнання: ПК із встановленим ОС і середовищем програмування Code::Blocks, (дана) інструкція.
Структура уроку
Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.
Мотивація навчання. Сучасні комп'ютерні ігри не поступаються голлівудським блокбастерам щодо візуальних ефектів, звукового супроводу й напруженості сюжету. Але ігри — особливий вид розваг: гра може змусити гравця годинами просиджувати біля монітора. Основна родзинка комп'ютерних ігор, яка робить їх настільки привабливими, — це інтерактивність. Комп'ютерна гра — це не фільм, де ви пасивно спостерігаєте за пригодами героя, що перемагає не дивлячись ні на що, — у грі ви самі перевтілюєтеся в героя.
Така інтерактивність досягають насамперед за допомогою програмування. Саме програма оживляє монстра, ескадрилью штурмовиків або цілу армію, змушує ці віртуальні сутності по-різному реагувати на дії користувача залежно від ситуації. Насправді саме на рівні програмної логіки гра може відповідати на дії користувача так, що дивує навіть її власних творців.
Існує велика кількість мов програмування, однією з найважливіших серед них в індустрії ігор є мова С++. Якщо в найближчому супермаркеті ви зайдете до відділу комп'ютерних ігор і навмання візьмете диск з полиці, цілком ймовірно, що вся гру від першого до останнього рядка буде написано мовою С++. Отже, якщо ви хочете професійно займатися програмуванням ігор, доцільно вивчити С++.
Протягом цього уроку ми навчимося створювати застосунки, які використовують конструкції розгалуження та повторення умови зі змінними. І зробимо це, розробивши ігровий проект «Вгадай число». Поки що без візуалізації.
2. Актуалізація опорних знань
Описати алгоритм створення нового проекту.
Вказівки (директиви) для препроцесора — рядки програми мовою С++, які розпочинають символом #. Їх опрацьовують (виконують) до компіляції програми.
Запис програми мовою С++ зазвичай розпочинають вказівкою #include, яку використовують для долучення інших файлів до коду програми. Розглянемо приклади використання такої вказівки:
#include <iostream> — долучення вмісту файлу iostream.h стандартної бібліотеки середовища. Цей файл описує введення даних з клавіатури й виведення даних на екран;
#include <cstdlib> — під'єднання стандартної бібліотеки, необхідну для роботи функції system.
using namespace std; — вказує на використання як усталено простору назв std.
Основна частина програми мовою на C++ має такий вигляд:
main () { тіло програми }
Усі вказівки тіла програми, записані всередині фігурних дужок, буде автоматично виконано після запуску програми. Після кожної такої вказівки записують крапку з комою.
Оголошення змінних в С++ здійснюють таким чином: спочатку вказують тип даних для обраної змінної, а потім назву цієї змінної.
Запис назви змінної або сталої може містити лише літери латиниці, цифри або нижнє підкреслення і має задовольняти такі вимоги:
while (<логічний вираз>) { вказівка1; вказівка2; … вказівкаN; }
Вказівку циклу з передумовою буде виконано таким чином:
Обчислити значення логічного виразу.
Якщо отримане значення true, то виконати команди тіла циклу і перейти до перевірки істинності логічного виразу. Інакше (якщо значення false) виконати команду, наступну за вказівкою циклу.
Вказівка return 0 передає операційній системі нульовий код завершеня роботи, тобто повідомлення про вдале завершення програми.
3. Інструктаж з ТБ
4. Вироблення практичних навичок
«Моє число менше»
«Молодець! Ти відгадав число за … спроб. Мінімальна кількість спроб, за яке можна відгадати число гарантовано, дорівнює …»
Після перемоги можна також задати питання: «Чи не хочете зіграти ще?» — на розсуд учня.
Зауваження:
Щодо оптимальної стратегії відгадування. Для того, щоб вивести найменшу кількість спроб гарантованого відгадування, потрібно знати стратегію оптимального відгадування, яка полягає у наступному. Перед кожним запитанням поділяємо діапазон пошуку навпіл і пропонуємо цілочисельне наближення точки поділу як відповідь. Якщо число не вгадано, переходимо до того зменшеного діапазону, на який вкаже програма. У підсумку маємо: якщо пошук здіснювати серед перших n натуральних чисел, і m — найменше з натуральних чисел k, при яких справджується нерівність n ≤ 2k, то m є найменшою кількістю ходів. Замість того, щоб робити перебір (від 1 до +∞), знайдемо m як округлення до цілого з надвишком логарифму n з основою 2:
log2n — логарифм n з основою 2 — розв'язок рівняння 2x = n;
lgn — логарифм n з основою 10 — розв'язок рівняння 10x = n — програмно реалізований функцією log бібліотеки math.h.
Щодо тлумачення слів: загадати число. Комп'ютер не людина — потрібно запрограмувати вибір випадкового числа. Для цього необхідно підключити бібліотеки time.h і stdlib.h. Бібліотека stdlib.h містить функцію rand. Ця функція породжує псевдовипадкове число від 0 до значення сталої RAND_MAX, яка може дорівнювати, наприклад, 32767. Але що робити, якщо потрібно вказати число від 1 і до якогось іншого числа x? Достатньо поєднати обчислення лишку від ділення % і додавання таким чином:
1 + rand() % x
Але цього не достатньо. При повторному запуску програми буде отримано одне й те саме число. Щоб цього уникнути цього, потрібно під'єднати бібліотеку time.h і до виклику функції rand виконати вказівку:
srand (time (NULL))
Тоді вибір псевдовипадкового числа залежатиме від системного часу ПК у момент виклику функції, що створить повну ілюзію випадковості.
Примітка. Інколи можна запрограмувати нескінченну послідовність дій (нескінченний цикл) — див. такий приклад виведення цифри 9:
int t = 9; while (t == 9) {cout<<test;}
При виконанні цих двох вказівок значення t стале, тому цей цикл ніколи не зупиниться. Єдиний вихід – примусово завершити програму. При програмуванні гри необхідно гарантувати вихід з циклу.
Порівняти складену програму з демонстраційним розв'язанням.
Завдання 2. Завантажити інтегроване середовище програмування C++ або скористатися он-лайн середовищем (наприклад, С++ shell) і для складеної програми для завдання 1 зробити таке:
набрати текст програми;
компілювати і виправляти до успішної компіляції;
виконувати програму і вводити всі можливі коректні вхідні дані, для яких шлях виконання алгоритму різний;
у разі помилки виправляти коди або повідомляти вчителя;
про результати виконання завдання повідомити вчителя.
5. Підбиття підсумків уроку
Виставлення оцінок.
6. Домашнє завдання
На основі зробленого у класі створити проект гри, у якій комп'ютер і гравець міняються ролями: гравець вибирає число, а комп'ютер повинен його вгадати.
Текст упорядкувала Наталія Володимирівна Коваль, учитель спеціалізованої школи № 115 ім. І. Огієнка Солом’янського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 30.10.2017 по 03.11.2017.