Skip to content

vdovetzi/Minesweeper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

Сапёр

Реализуйте класс Minesweeper для игры "Сапёр".

Структура класса

Конструкторы

  • принимающий размеры поля и количество мин - расставляет мины на поле случайным образом
  • принимающий размеры поля и список клеток - расставляет мины на указанных клетках

Методы

  • NewGame - инициализирует новую игру; имеет два варианта, аналогичных конструкторам
  • OpenCell - аналог клика левой кнопкой мыши
    • если игра выиграна или проиграна, ничего не делает
    • если клетка с флажком, ничего не делает
    • если клетка без флажка, открывает клетку; алгоритм отрытия клеток описан ниже
  • MarkCell - аналог клика правой кнопкой мыши
    • если игра выиграна или проиграна, ничего не делает
    • пустую клетку отмечает флажком
    • с клетки с флажком снимает флажок
  • GetGameStatus - возвращает статус игры
  • GetGameTime - возвращает время игры в секундах. Время начинает отсчитываться при первом клике в игре и замораживается при выигрыше или проигрыше. До первого клика в игре возвращает 0.
  • RenderField - возвращает список строк, соответствующий отрисованному полю. Соответствие элементов символам:
    • закрытая клетка - -
    • клетка с миной - *
    • клетка с флагом - ?
    • открытая клетка без мин - число от 1 до 8 (соответствует количеству мин в соседних клетках), вместо 0 рисуется .

Алгоритм открытия клетки

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

Игра считается выигранной, когда открыты все клетки кроме тех, на которых стоят мины.

Реализация

Внутреннее представление игры не должно быть завязано на отображение. Преобразуйте внутреннее представление в строки только в методе RenderField.

Наивный алгоритм случайной расстановки мин может быть неэффективен при количестве мин, близком к общему количеству клеток.

Поле может быть очень большим. Не используйте рекурсивный вызов функций/методов для открытия клеток.

Для работы со временем можно использовать std::time.

Можете реализовать простой консольный интерфейс, чтобы протестировать свой код в реальной игре.

About

Class for Minesweeper game

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages