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

Тема: реалізація алгоритму гри «Сапер» з визначенням для кожного елемента таблиці кількість сусідніх елементів з мінами мовою Python.

Мета:

Обладнання: комп'ютери зі встановленими ОС, браузером, і середовищем програмування мовою Python з використанням бібліотеки tkinter, (дана) інструкція.

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

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

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

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

Протлумачити дію вказівок мовою Python

import random
from tkinter import *
a=[]
for j in range(n):
  a.append(random.randint(0, 100))
global n
main = Tk()
main.title("Параметри гри")
main.geometry("300x200")
main.mainloop()

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

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

Розглянемо таке навчальне завдання.

Завдання. Створити комп'ютерну гру «Сапер» мовою Python з використанням бібліотеки tkinter.

Правила комп'ютерної гри «Сапер»

Мета гри: знайти всі порожні клітинки, не зачепивши міни.
Рівні складності вказують, обираючи розмір поля.
Початок гри: потрібно клацнути по довільній клітині ігрового поля.
Перебіг гри:

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





Перед виконанням завдання ознайомитися з частиною опису бібліотеки tkinter, у якій висвітлено роботу з таким:

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


Примітка. Існує щонайменше дві різні способи виконання завдання.

  1. Створити списки об'єктів (наприклад, написів), кожен з яких відповідає певній клітинці поля. І змінювати властивості цих об'єктів (колір тла і текст) після ходу гравця.

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

Другий підхід дає можливість мінімальними засобами вирішити поставлене завдання. Саме тому і подання алгоритму словами, і демонстраційне розв'язання витримані у цьому підході. Незначними змінами і словесний алгоритм, і програму можна переписати для першого підходу.

Вказівки щодо виконання завдання

  1. Cтворити вікно для введення параметрів гри з подальшим випадковим вибором розташування мін. Педбачити використання генератора випадкових чисел (модуль random) і глобальної змінної — кількості невідкритих полів без мін.

    Натискання кнопки має призводити до виведення вікна повідом­лення про хибність значень параметрів.

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

  2. Примітка. Всі подальші кроки стосуються лише тіла обробника події натискання кнопки, назва якого (наприклад, game) — значення властивості command цієї кнопки/

  3. Зчитати параметри гри:
    • кількості клітин nx , ny;
    • відсоток клітин з мінами m.
  4. При неприйнятних значеннях параметрів виводити вікно повідом­лення про хибність значень параметрів і вийти з обробника події. Прийнятними значеннями параметрів вважати такі, при яких справджується такий вираз:

    (5<nx) and (nx<51) and (5<ny) and (ny<31) and (0<m) and (m<100)

  5. Підрахувати кількість мін.
  6. Випадковим чином заповнити частину клітин мінами.
  7. Підрахувати кількість мін у сусідніх клітинах для кожної клітини.
  8. Cтворити вікно з полотном для зображення ігрового поля, розміри якого у пікселях дорівнюють добуткам 30 і кількості клітин по горизонталі та вертикалі.

  9. Зобразити межі клітин товщиною 3 пікселі сірого кольору "gray80".
  10. Створити обробник події натискання лівої кнопки миші на ігровому полі, що виводить повідомлення про номери клітини по вертикалі й горизонталі (нумерацію починати з 1).





  11. Порівняти створене з очікуваним у коді обробника події натискання кнопки.

    Примітка. Всі подальші кроки стосуються лише тіла обробника події натискання кнопки миші на ігровому полі, у якому закоментовано вказівку виведення вікна повідомлення про рядок і стовпчик клітини, на якій клацнули лівою кнопкою миші.

  12. Описати список кольорів і символів для відкритих клітин.

    c = [
      "#eeeeee", # білий колір
      "#0000ee", # синій колір
      "#008800", # зелений колір
      "#daa520", # золотарний колір goldenrod
      "#800080", # фіолетовий колір
      "#ee0000", # червоний колір
      "#808000", # оливковий колір
      "#4b0082", # колір індиго
      "#8b4513", # сідельно коричневий колір saddle brown
      "#808080"] # сірий колір - для невиявленої міни
    s = [" ","1","2","3", "4","5","6","7","8","●"]
  13. Якщо клітину досі невідкрито (зафарбовано зеленим), робити таке:

    • якщо клітина містить міну, в усіх клітинах на білому тлі вивести кількість мін у сусідніх клітинах або зображення міни, якщо її розташовано у цій клітині;

    • інакше — при відсутності міни у клітині:

      • при відсутності мін у сусідніх клітинах:

        • виявити усі клітини, у які є шлях з початкової клітити через клітини, для яких немає мін у сусідніх клітинах;

        • в усіх таких виявлених клітинах на білому тлі вивести кількість мін у сусідніх клітинах;

        • зменшити відповідним чином кількість невідкритих клітин без мін;

      • інакше — при наявності мін у сусідніх клітинах:

        • в обраній клітині на білому тлі вивести кількість мін у сусідніх клітинах;

        • зменшити на 1 кількість невідкритих клітин без мін.

      Якщо кількість невідкритих клітин без мін дорівнює нулю, вікно з повідомленням про перемогу.

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

  15. Перевірити правильність виконання проекту. У разі потреби внести зміни у код програми.

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

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

7. Домашнє завдання

У разі потреби доробити завдання. Змінити створену програму:


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