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

OSCHINA-MIRROR/kinegratii-minesweeper

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

Мины (Сапер)

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

Возможности

Обзор

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

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

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

Действия игры заключаются в нажатии на клетку, что может привести к одному из трех возможных результатов:

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

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

Каждая карта сапера может быть представлена тремя атрибутами:

  • 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)))

Из этих трёх атрибутов можно вычислить остальные свойства карты.

Игра (Game)

Класс 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 )

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

Введение

Описание недоступно Развернуть Свернуть
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