Как сделать генератор лабиринта с нуля? - PullRequest
0 голосов
/ 03 декабря 2018

Я в настоящее время учусь в средней школе, и я учусь в классе APCSP (AP Computer Science Principles), который в моем случае изучает программирование с нуля.Я в замешательстве и понятия не имею, что я делаю.Скретч очень сбивает с толку, и я чувствую, что учиться бессмысленно.

Мой вопрос таков: может ли кто-нибудь помочь мне с тем, как создать Maze Generator на Scratch, так как это мой проект, и он доставляет мне трудности.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Царапина действительно бессмысленна!Простой генератор лабиринта поможет вам нарисовать заранее определенные фигуры (например, длинный коридор или перекресток).Вы должны также сделать (невидимые) квадраты, чтобы отделить все и иметь программу рисовать в квадратах.

Позже я добавлю ссылку, которая приведет к примеру проекта с кодом.

0 голосов
/ 12 января 2019

На самом деле возможно построить с нуля, но зависит от того, что вы ищете.Я предполагаю, что вы хотите создать простой лабиринт, как в старомодных 8-битных играх, таких как boulder dash.

Сначала определитесь с размером вашего лабиринта: например, 5 х 5 блоков.Если вы хотите создать лабиринт, представьте, что рисуете его на сетке на бумаге.Блоки либо "пустые", либо заполнены. Наш лабиринт может быть представлен числами.Пустые блоки представлены 0, а заполненные блоки - 1.

. Вы можете визуализировать эту матрицу следующим образом, если все блоки пусты:

0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0

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

1,1,1,1,1,
1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1,
1,1,1,1,1

Использование переменной «list» для хранения этой информации будет наилучшим образом соответствовать возможностям MIT Scratch.

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

Нам также нужно посмотреть, как наш лабиринтбудет относиться к размеру сцены.Ширина и высота в пикселях стандартного скретч-проекта составляет 480x360.

Лабиринт 5 x 5 разделен на блоки шириной 480/5 = 96 и высотой 360/5 = 72.Другими словами, размер блока должен составлять 96x72 пикселя на основе полноэкранного лабиринта.

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

После этого нам нужно программно создать наш лабиринт.Я сделал пример, вы можете исследовать случайное рисование блоков лабиринта: https://scratch.mit.edu/projects/278731659/

(Вы можете изменить значение строк и столбцов, чтобы увеличить его масштаб, но помните ограничение на количество клоновблочный спрайт может иметь 300)

Это только начало и ни в коем случае не полное решение.Я просто надеюсь, что это поможет вам мыслить в правильном направлении.

Вы можете сделать это более продвинутым, добавив функцию для исследования и исправления нашей случайно нарисованной сетки, чтобы сгенерировать пройденный путь из положения x в положение y.Например, правило, которое вы можете запрограммировать: каждая пустая позиция в сетке должна иметь как минимум две другие пустые позиции в пространствах выше, ниже, слева и справа от нее.

0 голосов
/ 16 декабря 2018

Есть много разных способов сделать это;будь то спрайты и штамп или 2D списки и ручка.В любом случае, основным компонентом является алгоритм. На этой странице википедии подробно рассказывается о том, как работает создание лабиринта, и несколько различных алгоритмов.Существует также серия видеороликов The Coding Train здесь , где он создает генератор лабиринтов с помощью метода 2D-списка сверху (однако этот метод немного сложнее с нуля).В любом случае, лучше всего посмотреть на примеры, сделанные другими, выяснить, как они работают, и попытаться воссоздать их или сделать их лучше. Вот хорошее место для начала.

...