Discuss Scratch

Sergei_alfimtsev
Scratcher
3 posts

Как реализовать Sokoban на Scratch

Здравствуйте, уважаемые форумчане! Вместе со своими учениками решили создать на Scratch игру подобную Sokoban. Но столкнулись с проблемой:
Есть персонаж - ПОВОРЕНОК. Он умеет ходить, отталкиваться от стены, толкать перед собой ящик. А вот НЕ ТОЛКАТЬ ЯЩИК, если впереди стена, что-то не получается его научить.

Может кто писал что-то подобное поделитесь идеей как это сделать.

Дополнительная информация: стены составляются из блоков, которые являются спрайтами. Запрет поваренку наступать на стену реализован через блок сенсоров типа, если касается цвета и клавиша нажата, то изменить х на -шаг. Ящики упираются в стену по такому же принципу, а вот в случае, если ящик уперся в стену и повар касается ящика, то он на него наступает, так как запрета на движение ему нет. Как запретить ему движение в этом случае? Спасибо.
PawPrinter
Scratcher
47 posts

Как реализовать Sokoban на Scratch

Устроите систему координат, и сохранити в списке положение всех объектов в игре. Скажим стены находится в квадратах (1, 3), (2, 4), (2, 3), и так далие. Потом можна устроить скрипт который не позволяет ящикам занимать эти места. Желаю вам удачи в вашем проекте.
Sergei_alfimtsev
Scratcher
3 posts

Как реализовать Sokoban на Scratch

Спасибо, за ответ. Но до этого я уже и сам додумался. Проект уже реализован. Проблема заключалась несколько в другом. Как заставить поворенка не толкать ящик, если за ящиком стена. Пришлось вводить 8 дополнительных переменных отслеживающих положение поворенка. Если кто заинтересуется подробностями пишите на E-mail: Sergei_alfimtsev@mail.ru
Marcus-Cactus
Scratcher
100+ posts

Как реализовать Sokoban на Scratch

Привет! Я тут подумал немного над Вашей проблемой….. Вообщем, у меня есть идея : надо создать дополнительную переменную
(касается ли ящик стены?)
Ящик должен задавать ей значение 0 если НЕ касается, 1 если касается. При этом поворенок может двигаться и толкать ящик (в соответствующую сторону) ТОЛЬКО если переменная имеет значение 0. Ну вот и все.

Last edited by Marcus-Cactus (Dec. 28, 2017 08:50:38)

Sergei_alfimtsev
Scratcher
3 posts

Как реализовать Sokoban на Scratch

Примерно так я и решил данную проблему. Только переменных понадобилось не одна, а 8. По две на каждое направление. Так как пришлось проверять еще и то имеется ли за ящиком что-то, например, стена. Но все равно хоть и познова-то но спасибо.

Powered by DjangoBB