Это игра «Сапёр», написанная на Python, разработанная на основе tkinter/Tkinter и поддерживающая Python 2 и Python 3.
Общий алгоритм игры представляет собой конечный автомат. Всего существует три состояния в игре: успех, неудача и текущее состояние, причём последние два являются конечными. Состояние преобразуется в нажатие на квадрат. Действие игры заключается в нажатии на квадрат, есть три ситуации:
Карта «сапёра» может состоять из трёх атрибутов:
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 )