Тема: реалізація алгоритму гри «Сапер» з визначенням для кожного елемента таблиці кількості сусідніх елементів з мінами у середовищі Lazarus.
Мета:
Обладнання: комп'ютери зі встановленими ОС та середовищем програмування Lazarus.
Структура уроку
Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.
2. Актуалізація опорних знань
Дати відповіді на запитання і порівняти з очікуваними відповідями.
Що таке Lazarus?
Lazarus — вільне середовище розробки програмного забезпечення мовами програмування Free Pascal та Оbject Pascal.
Які вікна відкриються після завантаження середовища Lazarus?
Після завантаження середовища Lazarus буде відкрито такі вікна:
Як у Free Pascal позначають назви змінних?
Назви змінних у Free Pascal починанають з латинської літери та можуть містити літери латиниці та цифри.
Що таке підпрограма?
Підпрограма — це спеціальним чином оформлений фрагмент програми, який має свою назву і призначений для виконання певних дій,
до якого можна звернутися з будь-якого іншого місця всередині програми.
Що таке рекурсія?
Рекурсією називається така ситуація, коли підпрограма (процедура або функція) викликає сама себе.
Як записують цикл мовою Free Pascal?
for j:=1 to n do <вказівка>
for j:=n downto 1 do <вказівка>
while <умова> do <вказівка>
repeat <вказівки> until <умов>>
Як записують умовний оператор мовою Free Pascal?
if <умова> then <вказівка> else <вказівка>case <вираз> of <значення1>: <дія1>; <значення2>: <дія2>; … else <дія> end
Які правила комп'ютерної гри «Сапер»?
Мета гри: знайти всі порожні клітинки, не зачепивши міни.
Рівні складності вказують, обираючи розмір поля.
Початок гри: потрібно клацнути по довільній клітині ігрового поля.
Перебіг гри:
Якщо у відкритій комірці вказано число, воно показує, скільки мін приховано у восьми сусідніх клітинах навколо даної. Це число допомагає гравцеві зрозуміти, де розташовано безпечні клітини.
3. Інструктаж з ТБ
4. Вироблення практичних навичок
Завдання. Створити комп'ютерну програму для гри «Сапер» у середовищі Lazarus.
Вказівки до виконання
Реалізувати цей план таким чином.
Створення робочого середовища для розробки програми. Усі кроки виконувати, використовуючи конкурс ідей, і порівнювати з демонстраційним розв'язанням. Для перегляду здійснювати перехід за гіперпосиланням.
Створити теку Сапер_Прізвище у вказаному вчителем місці.
Запустити середовище програмування Lazarus.
Спланувати інтерфейс майбутнього ігрового середовища, наприклад таким чином:
Для виведення масиву зручно використати компонент StringGrid з вкладення Additional.
Розташувати необхідні елемети керування на формі:
Змінити властивості об'єктів у вікні Інспектор об'єктів:
Назва об'єкта | Властивість об'єкта | Значення властивості |
---|---|---|
Form1 | Caption | Сапер |
Form1 | AutoSize | True |
Label1 | Caption | Стовпчиків |
Label2 | Caption | Рядків |
Label3 | Caption | Необхідно відкрити усі незаміновані клітинки |
Label4 | Caption | Мін на полі |
Label4 | Visible | False |
Label5 | Caption | Клітинок |
Label5 | Visible | False |
Label6 | Caption | Клітинок відкрито |
Label6 | Visible | False |
Edit1 | Text | 10 |
Edit2 | Text | 10 |
Edit3 | Text | |
Edit3 | Visible | False |
Edit4 | Text | |
Edit4 | Visible | False |
Edit5 | Text | |
Edit5 | Visible | False |
Button1 | Caption | Почати гру |
StringGrid1 | FixedCols | 0 |
StringGrid1 | FixedRows | 0 |
StringGrid1 | ColCount | 10 |
StringGrid1 | RowCount | 10 |
StringGrid1 | DefaultColWidth | 21 |
StringGrid1 | DefaultRowHeight | 21 |
StringGrid1 | Visible | False |
Пересвідчитися, що після такої зміни властивостей після запуску проекту на виконання (F9) отримаєте таке вікно:
Створення коду породження ігрового поля (тут і далі кроки перелічено у порядку наповнення файлу програми unit1.pas).
Задати значення змінних S1 і S2, які визначають розмір поля, взявши їх з полів Edit1 та Edit2 форми.
Перевірити справдження умов: 0 ≤ S1 ≤ 30; 0 ≤ S2 ≤ 20. У випадку хибності однієї з цих умов вивести відповідне повідомлення.
Змінити властивості об'єкта StringGrid1: кількість стовпчиків та рядків, ширину та висоту об'єкта, зробити об'єкт видимим.
Заповнити порожніми рядками допоміжну прямокутну (розміру S1×S2) таблицю символів а і символами знаку запитання «?» усі клітинки StringGrid1.
Випадковим чином розставити міни, позначивши символом «+» їхнє розташування у матриці а.
Для кожної клітини ігрового поля, вільної від мін, підрахувати кількість мін у сусідніх клітинах, перетворити її на рядок, який зберегти як значення відповідного елемента таблиці а.
Створення коду відображення клацання миші по ігровому полю.
Описати рекурсивну процедуру step перевірки за даними таблиці a відсутності міни на полі, суміжних полях, суміжних до суміжних і т.д. та зміни значень відповідних елементів об'єкта StringGrid на рядок із символом пробілу.
Описати процедуру виведення повідомлення: «На жаль, Ви програли...» при клацанні на «замінованій» клітині.
В обробнику події OnClick об'єкта StringGrid1 визначити номер рядка і стовпчика вибраної клітини, виклик програми опрацювання отриманих значень (у поданому далі демонстраційному розв'язанні vvod) і виведення привітання: «Вітаю, Ви виграли!!!» у разі перемоги гравця.
Об'єднання всіх складових програми.
Описати усі запроваджені й використані глобальні змінні.
У коді обробника події OnClick об'єкта Button1 поєднати необхідні частини програмного коду.
Перевірка роботи програми. Запустити проект на виконання, натиснувши клавішу F9. У разі потреби внести зміни у програмний код, щоб отримати такі вікна на відповідних етапах гри:
після натискання кнопки Почати гру;
після натискання порожньої клітинки, не суміжної з міною, і відкриття області незамінованих клітин:
5. Підбиття підсумків уроку
Обговорення проблем, які виникли під час виконання завдання. Відповіді на запитання учнів. Виставлення оцінок.
6. Домашнє завдання
Проаналізувати коди розв'язання. Змінити коди: передбачити вибір рівня гри: легкий (8×8), середній (16×16), важкий (30×16) і власний (з вибором кількості рядків і стовпчиків.
Текст упорядкувала Царик Валентина Михайлівна, вчитель ліцею № 227 імені М.М.Громова Голосіївського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 13.11.2017 по 17.11.2017.