Найти в Дзене
Некто

Как сделать лабиринт на КУМИР часть 2

Всем привет! В первой части я показал, как заставить квадратик двигаться по полю, не выходя за границы. Здесь я покажу, как добавить сам лабиринт, сделать так, чтобы квадрат не проходил сквозь и как добавить финальные титры. На скриншоте то, как игра выглядит в конце предыдущей статьи. Сейчас надо создать редактор лабиринта. Приступим к работе! В процедуре описать_лабиринт лабиринт описывается как массив. Индекс обозначает горизонталь, а по индексу занесена строка, в которой 0 - пустая клетка, 1 - нужно нарисовать квадрат. Вы можете взять такие же цифры, как у меня, а при необходимости отредактировать лабиринт сначала нарисовать его на бумаге, на поверхности 17x17 клеток и перенести в программу. В основном алгоритме описывается другой массив "клетки". В этот массив будет занесен массив, получившийся в результате работы процедуры. Важно! Я использую кумир-про. Если вы используете обычную версию, нужно в начале программы дописать "использовать Строки". Теперь нужно сделать процедуру,

Всем привет! В первой части я показал, как заставить квадратик двигаться по полю, не выходя за границы. Здесь я покажу, как добавить сам лабиринт, сделать так, чтобы квадрат не проходил сквозь и как добавить финальные титры.

-2

На скриншоте то, как игра выглядит в конце предыдущей статьи. Сейчас надо создать редактор лабиринта. Приступим к работе!

В процедуре описать_лабиринт лабиринт описывается как массив. Индекс обозначает горизонталь, а по индексу занесена строка, в которой 0 - пустая клетка, 1 - нужно нарисовать квадрат. Вы можете взять такие же цифры, как у меня, а при необходимости отредактировать лабиринт сначала нарисовать его на бумаге, на поверхности 17x17 клеток и перенести в программу. В основном алгоритме описывается другой массив "клетки". В этот массив будет занесен массив, получившийся в результате работы процедуры. Важно! Я использую кумир-про. Если вы используете обычную версию, нужно в начале программы дописать "использовать Строки". Теперь нужно сделать процедуру, которая будет рисовать лабиринт.

Процедура нарисовать принимает арг лит таб клетки[1:17] - туда надо передать, которые мы сделали в предыдущем примере. арг рез цел таб клетки_сост[1:17, 1:17] - массив, в который будет записан результат. Его нужно описать и в основном алгоритме. Эта процедура отвечает сразу две операции: первое - узнать состояние клетки и, если она должна быть закрашена, закрасить, второе - занести состояние клетки в массив состояний клетки_сост, зачем это нужно объясню потом. Состояние проверяется двумя циклами: первый отвечает за горизонталь и заносит элемент массива по текущему индексу в переменную сейчас, второй проходит по "сейчас", рисует клетку и заносит состояние в массив. Теперь лабиринт проходится, но наш квадрат проходит сквозь клетки, но даже стирает их. Чтобы это исправить, надо сделать ещё одну процедуру, которая будет проверять состояние клетки перед изменением координат.

Функция "состояние" проверяет занята-ли клетка, исходя из раннего созданного массива состояний. Теперь, перед тем, как менять координаты, сначала проверяется не выходит-ли клетка за границы поля, а потом занятость клетки. Остаётся сделать некий конец игры. Это будет квадрат, при контакте с которым показываются финальные титры и игра завершается.

Теперь при создании лабиринта (в процедуре нарисовать_лабиринт) создаётся красная клетка с состоянием 3, которая служит концом игры. При увеличении координат теперь проверяется ещё и не встал-ли игрок на красную клетку. Если встал, то создаётся новый лист и на нем надпись "Вы прошли лабиринт" и командой "выход" программа завершается. Вроде бы все хорошо, но тут случился некоторый фейл: я не нашёл как поменять размер надписи (скорее всего никак), а вручную рисовать её лень, поэтому это выглядит так:

-3

Всем спасибо за внимание!