1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/kinegratii-minesweeper

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Minesweeper (сапер)

Это игра Minesweeper, написанная на Python с использованием библиотеки tkinter/Tkinter. Поддерживает python2 и python3.## Функции

Обзор

  • Базовые функции: левый клик для раскрытия клетки, правый клик для пометки
  • Трекинг шагов игры и времени
  • Перезагрузка игры: возможность повторной игры на одной и той же карте
  • Настройка параметров карты, включая три уровня сложности: начальный, средний и продвинутый

Обзор алгоритма

Алгоритм игры представляет собой конечный автомат состояний. Существуют три состояния: игра в процессе, победа и поражение, из которых два последних являются конечными. Переключение состояний происходит при нажатии на клетку. Действия игры включают нажатие на клетку, которое может привести к трем случаям:

  • Нажатие на уже открытую клетку не приводит к изменениям, игра продолжается
  • Нажатие на мину приводит к поражению
  • Нажатие на клетку, которая не содержит мины
    • Если вокруг нет мин, необходимо открыть большую часть карты (используется очередь для широкого поиска)
    • Если вокруг есть мины, игра заканчивается победой, если количество незакрытых клеток равно количеству мин, иначе игра продолжается

Описание карты

Карта Minesweeper может быть описана тремя атрибутами:

  • width: ширина карты
  • height: высота карты
  • mine_list: список мин, каждый элемент которого представляет собой кортеж (x, y), указывающий на наличие мины в этой клетке Например, карта
1000
0000
0101
1001

может быть представлена как

Map(width=4, height=4, mine_list=((0,0),(2,1),(2,3),(3,0),(3,3)))
```Эти три атрибута могут использоваться для вычисления других атрибутов карты.

### Игра (Game)
Класс Game был спроектирован как конечный автомат состояний, использующий объект карты Map в качестве источника данных. Объект игры, помимо объекта Map, использует двумерный объект _swept_state_map для отслеживания того, была ли клетка открыта.

0010 0000 0010 0000

В графическом интерфейсе пользовательского интерфейса (GUI) состояние каждой клетки изменяется в соответствии с этим объектом.

## Разработка
### Интерфейс
Этот интерфейс был создан с использованием встроенной библиотеки tkinter.
1 Ответственный за клетки кнопки.
(x,y) левый клик функция

self.bt_map[x][y] = tk.Button(self.map_frame, text='', command=lambda x=x, y=y: self._on_click(x, y))

(x,y) правый клик функция, использующая замыкание для передачи x,y в функцию обратного вызова

def right_click_handler(event, self=self, x=x, y=y): return self._on_right_click(event, x, y) self.bt_map[x][y].bind('', right_click_handler)

2 Автоматический счетчик шагов
У каждого элемента tkinter есть методы after и after_cancel для установки и отмены таймера.
Основной метод представлен ниже:

def _timer(self): if self._state:


## Тестирование
Команда

python minesweeper test.py test


## Запуск
python2 или python3

python app_tk.pyw


## Упаковка
Используйте [PyInstaller](https://pythonhosted.org/PyInstaller/) для упаковки.
Установка PyInstaller

pip install PyInstaller

На Windows, в директории path\Scripts\ создается файл pyinstaller.exe, который следует добавить в переменные среды.Выполните следующую команду:

pyinstaller app_tk.pyw -F -w

где
- `-F` одиночный файл
- `-w` без консольного приложения

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
GPL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Язык

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/kinegratii-minesweeper.git
git@api.gitlife.ru:oschina-mirror/kinegratii-minesweeper.git
oschina-mirror
kinegratii-minesweeper
kinegratii-minesweeper
master