Skip to content

akanashin/minesweeper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

minesweeper

Игрушка "Сапер" для БК0010-01. Бэйсик.

В файле screen.png приведен один из скриншотов. Неоткрытые клетки - зеленые с синей окантовкой. Открытые - черные с синей окантовкой. Курсор обозначается красной рамкой вокруг клетки. Флажки и символы в открытых клетках рисуются красным цветом.

Суть игры: есть поле, на нем мины. Надо открыть все клетки, где нет мин. Это есть критерий победы. Мины можно обозначать флажками. Это ни на что не влияет, чистая визуальщина.

Параметры задаются в строке 11:

  • размер в клетках по горизонтали
  • размер в клетках по вертикали
  • количество мин Сейчас там прописано 12х10, 20 мин. Размер поля ограничен экраном (клетка занимает 11 на 11 пикселей) и объемом памяти (при слишком большом размере будет выдана ошибка 7 где-то при запуске программы, места бывают разные).

Программа построена на процедурах. Условная структура:

  • строки 0-100: параметры программы
  • строки 100-200: главный цикл программы (рисование поля, опрос и реакция на клавиши)
  • строки 1000-1040: опрос клавиатуры. Возвращает код 1..6 - перемещение курсора (влево/вправо/вверх/вниз), открытие клетки и поставить/снять флаг. Используются клавиши: стрелки, ПРОБЕЛ, ВВОД.
  • строки 2000-2190: рисование поля. Двигаемся по диагонали, рисуем вверх и слево. В условиях медленной графики там получается симпатичнее.
  • строки 2300-2431: рисует одну открытую клетку. Тут принцип следующий: ставим опорную точку, после чего рисуем символ оператором DRAW. Хотел засунуть строки в массив и обращаться туда по индексу, но что-то не сработало.
  • строки 2500-2525: рисует одну закрашенную клетку (используется для начального рисования поля).
  • строки 2600-2630 и 2700-2730: рисование и убирание курсора. Сделано единообразно, рисуем красным, убираем - рисуем черным.
  • строки 3000-3099: перемещение курсора. На основании кода клавиши вычисляются новые координаты. Если курсор двигается - убирается старый и рисуется новый.
  • строки 4000-4090: открывает клетку. Обрабатывает конец игры (все открыто или ткнулись в мину). Для открывания пустых участков пользуется процедурой 4100.
  • строки 4100-4190: открывает пустой участок, ограниченный краем поля или непустыми клетками. Тут применяется схема а-ля стек: новые пустые клетки помещяются в массив S2, индекс для него хранится в S1. Непустые клетки открываются, пустые - помещаются в стек для дальнейшего обхода соседей. Алгоритм заканчивается, когда стек стал пуст.
  • строки 4200-4290: открывает неоткрытую клетку и подсчитывает количество открытых.
  • строки 5000-5040: ставит или убирает флаг. Делается единым кодом. Постановка флага - рисует флаг красным, убирание флага - рисует флаг зеленым (цвет фона).
  • строки 8000-8080: конец игры. Выдает сообщение и показывает все мины на поле.
  • строки 9000-9190: начальное заполнение поля, расстановка мин и вычисление счетчиков мин. Пометка клеток как неоткрытых (+100 к числовому значению клетки).

В общем, может быть интересно начинающим. И посмеяться.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages