Тема: реалізація алгоритму гри «Сапер» з визначенням для кожного елемента таблиці кількість сусідніх елементів з мінами мовою Python.
Мета:
Обладнання: комп'ютери зі встановленими ОС, браузером, і середовищем програмування мовою Python з використанням бібліотеки tkinter, (дана) інструкція.
Структура уроку
Хід уроку
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. Вироблення практичних навичок
Примітка. Існує щонайменше дві різні способи виконання завдання.
Створити списки об'єктів (наприклад, написів), кожен з яких відповідає певній клітинці поля. І змінювати властивості цих об'єктів (колір тла і текст) після ходу гравця.
Всі дані про поточний стан гри зберігати у списках булевих та цілих змінних, а ходи гравця відображати змінами значень у цих списках та малюванням на полотні Canvas. Інакше кажучи, об'єкт, що відповідає клітині поля, буде створено не на початку гри, а лише у момент звертання клацання у відповідній частині поля.
Другий підхід дає можливість мінімальними засобами вирішити поставлене завдання. Саме тому і подання алгоритму словами, і демонстраційне розв'язання витримані у цьому підході. Незначними змінами і словесний алгоритм, і програму можна переписати для першого підходу.
Вказівки щодо виконання завдання
Cтворити вікно для введення параметрів гри з подальшим випадковим вибором розташування мін. Педбачити використання генератора випадкових чисел (модуль random) і глобальної змінної — кількості невідкритих полів без мін.
Порівняти з очікуваним.
Примітка. Всі подальші кроки стосуються лише тіла обробника події натискання кнопки, назва якого (наприклад, game) — значення властивості command цієї кнопки/
При неприйнятних значеннях параметрів виводити вікно повідомлення про хибність значень параметрів і вийти з обробника події. Прийнятними значеннями параметрів вважати такі, при яких справджується такий вираз:
(5<nx) and (nx<51) and (5<ny) and (ny<31) and (0<m) and (m<100)
Cтворити вікно з полотном для зображення ігрового поля, розміри якого у пікселях дорівнюють добуткам 30 і кількості клітин по горизонталі та вертикалі.
Створити обробник події натискання лівої кнопки миші на ігровому полі, що виводить повідомлення про номери клітини по вертикалі й горизонталі (нумерацію починати з 1).
Примітка. Всі подальші кроки стосуються лише тіла обробника події натискання кнопки миші на ігровому полі, у якому закоментовано вказівку виведення вікна повідомлення про рядок і стовпчик клітини, на якій клацнули лівою кнопкою миші.
Описати список кольорів і символів для відкритих клітин.
c = [ "#eeeeee", # білий колір "#0000ee", # синій колір "#008800", # зелений колір "#daa520", # золотарний колір goldenrod "#800080", # фіолетовий колір "#ee0000", # червоний колір "#808000", # оливковий колір "#4b0082", # колір індиго "#8b4513", # сідельно коричневий колір saddle brown "#808080"] # сірий колір - для невиявленої міни s = [" ","1","2","3", "4","5","6","7","8","●"]
якщо клітина містить міну, в усіх клітинах на білому тлі вивести кількість мін у сусідніх клітинах або зображення міни, якщо її розташовано у цій клітині;
інакше — при відсутності міни у клітині:
при відсутності мін у сусідніх клітинах:
виявити усі клітини, у які є шлях з початкової клітити через клітини, для яких немає мін у сусідніх клітинах;
в усіх таких виявлених клітинах на білому тлі вивести кількість мін у сусідніх клітинах;
зменшити відповідним чином кількість невідкритих клітин без мін;
інакше — при наявності мін у сусідніх клітинах:
в обраній клітині на білому тлі вивести кількість мін у сусідніх клітинах;
зменшити на 1 кількість невідкритих клітин без мін.
Якщо кількість невідкритих клітин без мін дорівнює нулю, вікно з повідомленням про перемогу.
Порівняти з очікуваним.
Перевірити правильність виконання проекту. У разі потреби внести зміни у код програми.
Повідомити вчителя про завершення роботи над проектом.
6. Підбиття підсумків уроку
Обговорення проблем виконання завдання. Виставлення оцінок.
7. Домашнє завдання
У разі потреби доробити завдання. Змінити створену програму:
або не використовуючи вікна "Параметри гри", змінювати значення параметрів за допомогою меню або вікон діалогу;
або використати списки об'єктів-написів, кожен з яких відповідає певній клітинці поля, і змінювати властивості цих об'єктів (колір тла і текст) після ходу гравця.
Текст упорядкував Олександр Рудик.