Это игра в сапера, написанная на Python с использованием библиотеки tkinter/Tkinter. Поддерживает python2 и python3.
Алгоритм игры представляет собой конечный автомат состояний. В нем есть три основных состояния: игра продолжается, победа, поражение. Последние два являются окончательными состояниями. Переход между состояниями происходит при нажатии на клетку.
Действия игры заключаются в нажатии на клетку, что может привести к одному из трех возможных результатов:
Каждая карта сапера может быть представлена тремя атрибутами:
Например, следующий пример карты:
1000
0000
0101
1001
Может быть представлен как:
Map(width=4, height=4, mine_list=((0,0),(2,1),(2,3),(3,0)))
Из этих трёх атрибутов можно вычислить остальные свойства карты.
Класс Game был спроектирован как конечный автомат состояний, использующий объект Map в качестве источника данных. Объект игры также использует двумерный массив _swept_state_map
для отслеживания того, были ли клетки открыты.
0010
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
Для запуска программы используйте python2 или python3:
python app_tk.pyw
Используется PyInstaller для упаковки. Установите PyInstaller:
pip install PyInstaller
На Windows, pyinstaller.exe находится в каталоге path\Scripts. Добавьте этот каталог в переменные среды. Запустите следующую команду для создания исполняемых файлов:
pyinstaller app_tk.pyw -F -w
Где:
-F
создает однофайловый исполняемый файл-w
создает безконсольное приложениеВы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )