Розробка уроку — практичної роботи

Тема: створення нескладної комп’ютерної гри з використанням змінних величин мовою Ruby.

Мета: навчитися складати та виконувати алгоритми з величинами числового типу мовою програмування Ruby. Після виконання роботи учень

Обладнання: комп’ютери зі встановленими ОС, текстовим редактором, інтепретатором Ruby і бібліотекою Tk.

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Вивчення нового матеріалу.
  4. Інструктаж з ТБ.
  5. Вироблення практичних навичок.
  6. Підбиття підсумків уроку.
  7. Домашнє завдання.

Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.

2. Актуалізація опорних знань

Для створення комп'ютерної гри нам знадобиться код створення вікна програми,

 
require 'tk'  
$root = TkRoot.new(:title => "Гра Баше (основний варіант)",:width=>400,:height=>300)  
Tk.root.bind( TkVirtualEvent.new('Control-c', 'Control-q'), proc{Tk.exit})  
Tk.mainloop

яке можна закрити натисканням клавіш Ctrl + c або Ctrl + x, і приклади використання елементів керування Ruby / Tk.

3. Вивчення нового матеріалу

Клод Гаспар Баше де Мезеріак (Claude Gaspard Bachet de Méziriac, 1581–1638) — французький математик, поет і перекладач, який запропонував розглянуту далі гру у книзі «Цікаві і приємні числові завдання». Книжка вийшла в 1612 року, а туди вона потрапила з твору Леонарда Пізанського 1202 року.

Гра Баше. У початковий момент в купці є n предметів. Два гравці по черзі забирають з цієї купки предмети — від 1 до p включно, де 1 < p. Переможцем вважають того, хто зробить останній хід.

Є інший (альтернативний) варіант гри: переможцем вважати того, хто примусить суперника зробити останній хід.

Гра Баше — один з найпростіших і найвідоміших прикладів гри:

Для таких ігор є розроблена теорія пошуку виграшної стратегії — правил поведінки, що гарантує виграш у грі. Розглянемо елементи цієї теорії.

Запровадимо поняття графа гри, який складається з:

Для гри Баше хід з позиції A в позицію B дозволено, якщо справджуються нерівності: 0 < ABp.

Вершину, на яку не вказує жодна дуга, назвемо початковою позицією або початком гри.

Вершину, з якої не виходить жодна дуга (порожню множину) назвемо кінцевою позицією або кінцем гри.

Означимо поняття виграшної і програшної позицій (для того, чия черга ходити).

Для кінцевої позиції виграшність позиції визначається згідно з правилами гри:

Для решти (не кінцевих) позицій:

Інакше кажучи, у виграшній позиції гравець, чия черга ходу, може вибрати хід у програшну позицію, що забезпечує йому перемогу за умови відповідного вибору й надалі. У програшній позиції гравець завжди робить хід у виграшну позицію, тобто він не може позбавити суперника можливості виграти. Для нього виграш можливий лише, якщо суперник припуститься помилки і зробить хід у виграшну позицію.

Схема аналізу графа гри

  1. Визначити всі кінцеві позиції і визначити, виграшні вони чи програшні згідно з правилами гри.

  2. Визначити виграшні позиції, з яких визначені раніше програшні позиції досягаються за 1 хід.

  3. Визначити програшні позиції, з яких визначені раніше виграшні позиції досягаються за 1 хід.

  4. Повторювати виконання пунктів 2−3 до встановлення, якими є всі позиції.

Таким чином за скінчену кількість кроків проводять аналіз усіх позицій гри. Аналіз завершується, якщо кроки 2−3 не дають ніякої нової інформації щодо виграшності чи програшності позицій.

4. Інструктаж з ТБ
5. Вироблення практичних навичок


Завдання 1. Встановити для обох варіантів гри Баше, які позиції є виграшними, а які є програшними.

Вказівки до виконання: проаналізувати граф гри для p = 3 й узагальнити на випадок усіх натуральних p. Порівняти з очікуваним.

Завдання 2. Створити програму для гри Баше для двох гравців-людей, яка до натискання кнопки з написом «Почати гру» вибирає випадкові значення:

а далі забезпечує дотримання правил гри й виводить вікна повідомлень з коментарями про некоректність ходу (при потребі), виграшність останнього зробленого ходу та результат гри.









































Вказівки до виконання завдання
у вигляді консольного застосунку з компіляцією коду вказівкою терміналу:

mcs *.cs -pkg:gtk-sharp-3.0

  1. Описати інтерфейс програми, що до початку гри має такий вигляд.

    Порівняти з очікуваним.

  2. Описати методи виклику вікон повідомлень з єдиним параметром — рядком тексту — для виведенням його у вікні.

    Порівняти з очікуваним.

  3. Створити порожний обробник натискання кнопки. Порівняти з очікуваним.

  4. Описати опрацювання події кнопки при написі на ній "Почати гру":
    • надати глобальним змінним n i p випадково вибрані значення;
    • змінити напис на кнопці на такий: "Хід першого гравця";
    • змінити напис під умовоюю на такий, що вказує на поточні значення n i p.
    Порівняти з очікуваним.
  5. Описати опрацювання події кнопки при написі на ній "Хід першого гравця":
    • перетворити вміст текстового поля на ціле число k;
    • при неможливості це зробити вивести відповідне повідомлення, інакше здійснити наступне;
    • якщо k відмінне від чисел 1, 2, …, p, вивести відповідне повідомлення;
    • якщо k перевищує n, вивести відповідне повідомлення;
    • якщо отримано правильне значення k:
      • зменшити значення n на k;
      • змінити напис на кнопці на такий: "Хід другого гравця";
      • змінити напис під умовоюю на такий, що вказує на поточні значення n i p;
      • вивести повідомлення щодо виграшності здійсненого ходу;
      • очистити текстове поле;
    • якщо n = 0:
      • вивести повідомлення про перемогу першого гравця;
      • очистити напис під умовою;
      • змінити напис на кнопці на такий: "Почати гру".
    Порівняти з очікуваним.
  6. Описати опрацювання події кнопки при написі на ній "Хід другого гравця" анагічно тому, як це зроблено на попередньому кроці. Порівняти з очікуваним.

  7. Записати програму з назвою Ваше_прізвище у вказану вчителем теку..

  8. Повідомити вчителя про завершення роботи над програмою.

6. Підбиття підсумків уроку
Обговорення проблем виконання завдання. Виставлення оцінок.

7. Домашнє завдання
У разі потреби доробити завдання. Удосконалити програму, передбачивши вибір варіанту гри Баше. Додатково для охочих: створити аналогічну програму мовою Ruby для іншої гри з використанням змінних величин, попередньо узгодивши зміст (правила) гри з учителем.


Текст упорядкував Олександр Рудик.