Тема: створення ігрового проекту в середовищі Lazarus.
Мета: навчитися складати та виконувати алгоритми з використанням змінних для розв’язування задач в середовищі програмування Lazarus.
По завершенню навчання учень уміє:
застосовувати отримані знання під час вирішення практичних завдань;
надавати значення змінним та змінювати їх, у тому числі програмним шляхом;
створювати та застосовувати інформаційні моделі різних типів із використанням змінних.
Обладнання: ПК із встановленим ОС і середовищем програмування Lazarus, (дана) інструкція.
Структура уроку
Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.
Мотивація навчання. Протягом цього уроку ми навчимося створювати застосунки, які використовують кілька форм. І зробимо це, розробивши ігровий проект.
У теорії ігор — математичній теорії, спрямовані на пошук оптимальної (виграшної) стратегії (поведінки) в умовах конфлікту інтересів: у грі в казино, конкуренції компаній на ринку, військовому протистоянні. Сторони, які беруть участь у конфліктній ситуації, у межах цієї теорії називають гравцями. Гру описуть сукупністю правил: які є позиції (стани) гри і з яких позицій у які можна робити хід, яку кінцеву позицію, з якої немає жодного ходу, вважати виграшною (і який виграш), а яку — програшною (і який програш). Ходи бувають двох видів:
зроблені гравцями;
результат випадкового втручання (експерименту): підкидання монети, грального кубика, роботи датчика випадкових чисел.
На початковій стадії знайомства з теорією ігор використовують прості ігри, одніює з яких є гра Баше (Клод Гаспар Баше де Мезірака (1581–1638) — французький математик, поет і перекладач): у початковий момент в купці є n предметів. Два гравці по черзі забирають з цієї купки предмети (від 1 до p включно). Переможцем вважають того, хто примусить суперника зробити останній хід.
Така грає прикладом анагоністичної гри (один гравець виграє, а інший — програє) з повною інформацією (усі гравці знають, у якій позиції перебуває гра) без випадкового втручання (всі ходи роблять лише гравці).
2. Актуалізація опорних знань
3. Вивчення нового матеріалу
Додати нову форму у проект можна за допомогою вказівки меню Файл / Нова форма
або натиснувши кнопку Нова форма на Панелі інструментів. У результаті з'явиться нова порожня форма з назвою Form2,
а відповідний їй файл з кодом програми буде додано у Редактор тексту на нове вкладення Unit2.
У цьому вікні жирним шрифтом буде виділено зарезервовані слова, червоним — знаки пунктуації, синім — коментарі та рядкові сталі (послідовності символів).
Після додавання нової форми, проект потрібно зберегти.
Показ форм здійснюють за допомого одного з двох методів:
Різниця між ними полягає в тому, що між звичайними вікнами можна переміщатися довільним чином, а перейти в інше вікно з модального вікна можна лише після його закриття.
Метод Show показує форму, переміщує її на передній план екрану і робить активною. У поданому нижче прикладі описано виклик форми Form2 у звичайному вікні після натискання кнопки Button1.
procedure TForm1.Button1Click (Sender: TObject); begin Form2.Show; end;
Метод ShowModal викликає форму у модальному вікні. Переключитися з модального вікна на інші вікна можна лише після закритття вікна. Нижче подано приклад показу форми Form3 у модальному вікні після натискання кнопки Button2.
procedure TForm1.Button2Click (Sender: TObject); begin Form3.ShowModal; end;
Для того щоб модуль Unit2 форми Form2 був досяжним з модуля Unit1, в розділі Implementation коду Unit1 необхідно записати вказівку:
uses Unit2;
Аналогічно, щоб зробити модуль Unit1 форми Form1 досяжним з модуля Unit2, потрібно у модулі Unit2 в розділі Implementation записати вказівку:
uses Unit1;
4. Інструктаж з ТБ
5. Закріплення вивченого матеріалу
Завдання. Створити проект для гри двох людей у гру Баше.
Вказівки до виконання
Завантажити середовище Lazarus.
Побачити форму — об’єкт для розташування кнопок, полів, написів, меню, смуг прокрутки тощо.
Для форми Form1 у вікні Інспектор об'єктів на вкладенні Властивості надати такі значення величинам:
Створити другу форму. Для цього натиснути кнопку Нова форма на Панелі інструментів.
Для форми Form2 у вікні Інспектор об'єктів на вкладенні Властивості надати такі значення величинам:
Створити окрему теку для проекту з назвою Ваше прізвище у теці, вказаній учителем.
Зберегти у новостворену теку проект, натиснувши кнопку Зберегти всі на Панелі інструментів.
Розташувати на формі Form1 такі об’єкти: одну кнопку, два поля і три написи, використовуючи Панель компонентів. Після натискання віповідної кнопки на вкладенні Standard розташувати на формі вказівник миші, натиснути ліву кнопку миші і, не відпускаючи її, змістити вказівник миші і відпустити кнопку миші. Таким чином буде вказано прямокутник для розташування об'єкта, після чого об'єкт буде розташовано у ньому. Натискати потрібно такі кнопки:
tbutton — один раз — для створення кнопки;
tedit — двічі — для створення полів;
tlabel — тричі — для створення написів.
У вікні Інспектор об'єктів змінити значення властивостей об'єктів:
для кнопки button1: Caption — «Розпочати гру», інші властивості — довільні;
для полів edit1 і edit2: Text — порожній, інші властивості — довільні;
для напису Label1 властивості Caption надати значення: «Гра Баше. У початковий момент в купці є N предметів. Два гравці по черзі забирають з цієї купки предмети (від 1 до P включно). Переможцем вважають того, хто примусить суперника зробити останній хід», значення інших властивостей — довільні;
для напису Label2 властивості Caption надати значення: «Кількість предметів», інші властивості — довільні.
для напису Label3 властивості Caption надати значення: «По скільки брати», інші властивості — довільні.
Надати формі Form1 такого вигляду.
Перейти до форми Form2, активувавши її клацанням лівою кнопкою миші.
Розташувати на формі Form2 такі об’єкти: одну кнопку, одне поле і шість написів, використовуючи Панель компонентів.
У вікні Інспектор об'єктів змінити значення властивостей об'єктів:
для кнопки button1: властивість Caption — «Граємо», інші властивості — довільні;
для поля edit1: Text — порожній, інші властивості — довільні;
для напису Label1: Caption — «Залишилось», інші властивості — довільні;
для напису Label2: Caption — «предметів», інші властивості — довільні.
для напису Label3: Caption — «Перший гравець», інші властивості — довільні.
для напису Label4: Caption — «Другий гравець», інші властивості — довільні.
для напису Label5: Caption буде породжено програмою, розміщення — між Label1 та Label2
для напису Label6: Caption буде породжено програмою, інші властивості — довільні.
Надати другій формі такого вигляду.
У модулі Unit1 описати глобальні змінні і надати доступ до коду Unit2. Безпосередньо після рядків:
var
Form1: TForm1;
вставити такий текст:
n, {кількість предметів} p: {по скільки предметів брати} integer; {тип даних - цілі числа}
Безпосередньо після рядка:
implementation
вставити такий рядок:
uses Unit2; {надає доступ до кодів Unit2}
Отримати такий вигляд вікна Редактор тексту.
Описати реакцію програми на натискання кнопки з написом: «Розпочати гру» на формі Form1. На формі Form1 виділити кнопку з написом: «Розпочати гру». У вікні Інспектор об'єктів перейти на вкладення Події, вибрати подію OnClick і двічі клацнути у полі OnClick.
У вікні Редактор тексту на вкладенні Unit1 ввести такий код.
n:=strtoint(edit1.Text); p:=strtoint(edit2.Text); form2.label5.caption:=inttostr(n); form2.button1.Enabled:=true; form2.label6.caption:=''; Form2.Show;
У введеному коді:
Описати реакцію на натискання кнопки з написом Граємо. На формі Form2 виділити кнопку з написом Граємо. У вікні Інспектор об'єктів перейти на вкладення Події, вибрати подію OnClick і двічі клацнути у полі OnClick. У вікні Редактор тексту на вкладенні Unit2 у тіло процедури TForm2.Button1Click ввести такий код.
one:=strtoint(edit1.text); if one>Unit1.p then showMessage('брати не більше '+inttostr(Unit1.p)) else begin Unit1.n:=Unit1.n-one; label5.caption:=inttostr(Unit1.n); edit1.text:=''; if Unit1.n<=1 then begin button1.Enabled:=false; if label3.Visible=true then label6.Caption:='гра закінчилась, вітаємо першого гравця' else label6.Caption:='гра закінчилась, вітаємо другого гравця'; end else if label3.Visible=true then begin label4.Visible:=true; label3.Visible:=false; end else begin label3.Visible:=true; label4.Visible:=false; end; end;
У введеному коді є звертання до процедури showMessage для виведення вікна повідомлень з попередженням про неправильну кількість взятих предметів.
Описати змінні проекту Unit2. Після таких рядків
var
Form1: TForm1;
вставити такий текст:
one: {скільки предметів бере кожен гравець} integer; {тип даних - цілі числа}
Після рядка
implementation
вставити
uses Unit1; {надає доступ до кодів Unit1}
У вікні Редактор тексту відповідний фрагмент коду матиме такий вигляд.
Виконати проект, натиснувши кнопку Виконати. Якщо все було зроблено правильно, у Вікні повідомлень з'явиться напис: Проект успішно зібрано. Запустити створений файл exe на виконання і пересвідчитися у коректності роботи.
Порівняти з роботою демонстраційного розв'язання.
Зберегти всі файли проекту у раніше створену теку з назвою Ваше прізвище, натиснувши кнопку Зберегти всі на Панелі інструментів.
Закрити вікно Lazarus.
6. Підбиття підсумків уроку
Виставлення оцінок.
7. Домашнє завдання
На основі зробленого у класі створити проект гри, у одним з гравців є учень, а іншим комп'ютерна програма, яка дотримується такої виграшної стратегії: перемагає той, хто робить лишок від ділення кількості предметів на (p + 1) рівним одиниці.
Текст упорядкувала Наталія Михайлівна Петрушанська, учитель НВК І-ІІІ ступенів гімназія «Потенціал» Оболонського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 28.11.2016 по 02.12.2016.