Игрушка "Сапер" для БК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 к числовому значению клетки).
В общем, может быть интересно начинающим. И посмеяться.