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

OSCHINA-MIRROR/wututua-mine-sweeping-in-python

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

Это игра «Сапёр», написанная на Python, разработанная на основе tkinter/Tkinter и поддерживающая Python 2 и Python 3.

Особенности

Обзор

  • Основные функции: левый клик — «сапёр», правый клик — отметка;
  • Запись шагов игры и времени;
  • Сброс игры: можно играть в несколько игр на одной карте;
  • Настраиваемые параметры карты, по умолчанию предоставляются три уровня сложности: начальный, средний и продвинутый.

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

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

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

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

Карта «сапёра» может состоять из трёх атрибутов:

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

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

Игра

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

0000
0010
0000```
В графическом интерфейсе состояние соответствующей ячейки также изменяется в соответствии с этой картой.

## Разработка
### Интерфейс
Это написано встроенной библиотекой 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('<Button-3>', right_click_handler)```
2. Автоматический контроль подсчёта.
Каждый элемент управления tkinter имеет два метода, after и after_cancel, для установки функции синхронизации и отмены функции синхронизации соответственно.
Основной метод выглядит следующим образом:
```def _timer(self):
    if self._state:
        self.increase()
        self._timer_id = self.after(1000, self._timer)

def start_timer(self):
    if not self._state:
        self._state = True
        self._timer()

def stop_timer(self):
    self._state = False
    if self._timer_id:
        self.after_cancel(self._timer_id)
        self._timer_id = None```

## Тестирование
Команда:
```python minesweeper test.py test```

## Запуск
Python 2 или Python 3:
```python app_tk.pyw```

## Упаковка
Используйте [PyInstaller](https://pythonhosted.org/PyInstaller/) для упаковки.
Установите PyInstaller:
```pip install PyInstaller```
Под Windows сгенерируйте файл pyinstaller.exe в каталоге path\Scripts\ и добавьте этот каталог в переменную среды.
Просто выполните следующую команду. Сгенерированные файлы находятся в текущем каталоге \dist\.
```pyinstaller app_tk.pyw -F -w```
среди них:
--F один файл;
--w оконная программа.

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

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

Введение

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

Обновления

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

Участники

все

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

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