Как пользоваться математикой в майнкрафт

Обновлено: 05.07.2024

Рассказываем, как онлайн-конструктор превратился в инструмент для обучения.

Методы интерактивного обучения становятся всё более популярными. Специалисты называют одним из главных трендов современного образования геймификацию — систему приёмов, которые превращают образовательный процесс в игровой.

Некоторые эксперты мечтают о том, что через несколько лет школьное образование можно будет полноценно перенести в видеоигру и обучать детей математике и литературе с помощью, например, Fortnite. Подобные идеи не выглядят фантастикой, хотя бы потому, что первые эксперименты уже начались — во многих школах США и Европы в образовательный процесс активно внедряют Minecraft.

С помощью нескольких примеров и комментариев от эксперта в Minecraft-образовании из проекта Shkolakola Максима Сыныцы мы разобрались, как популярная среди школьников игра помогает им в учёбе.

Программирование в Minecraft

Елена Дегтярева

Расскажу о своем личном опыте и об опыте программирования в Minecraft своих детей.

В этом году там можно скачать русифицированный тренажер и программировать в Майнкрафт offline. Загрузить оффлайн версию тренажера Minecraft приключение. У нас он есть, буквально сегодня дети снова в нем играли. Не знаю каким образом, но 7летний сын, не умея читать, успешно проходит на нем уроки.

Следующий вариант программирования подходит для пользователей Майнкрафт Java edition - это программирование так называемых черепашек в версии 1.7.10. Может быть, это возможно и в других версиях, я не в курсе. Дочь училась программировать именно в этой версии. Но для того, чтобы появились черепашки в самом мире, нужно установить Forge-1.7.10 и ComputerCraftPlusComputerCraftEdu1.74

Программирование черепашек под силу учащимся начальных классов. Дочь начала заниматься в 9 лет и до сих пор продолжает этим заниматься. Преподаватель хвалит ее.

С помощью черепашек можно строить дома, замки, фонтаны, корабли, радугу, строить и ломать блоки, строить лабиринты и проходить их, рыть траншеи, туннели, сажать цветы и полоть. Что-то еще? Я не в курсе.

Версия Minecraft для Windows 10 поддерживает систему визуального программирования Microsoft MakeCode, она же имеется и в образовательной версии игры.

Но одной игры мало, нужно скачать и установить Code Connection. Во время запуска приложения рядом с игроком появится агент — специальный моб, которым можно управлять, а окно Code Connection примет такой вид:


В MakeCode и Tynker имеются разработанные проекты, по которым можно научиться программировать агента.

Я знакома со всеми 4 сайтами, которые здесь представлены. Думаю, что и вы тоже. Упомяну лишь Tynker. Мне он симпатичен тем, что на данном сайте предложено огромное количество курсов по программированию, но как всегда Платно. Есть, конечно, бесплатный вариант, но он сильно ограничен. Мы пробовали с дочерью принять участие в летнем марафоне программирования. Не дошли до середины, у дочери не было желания продолжать, хотя там были предложены интересные задания, а победители получили футболки.

Моя небольшая попытка показать работу Code connection дана здесь.

В этом месяце разработчики выпустили бета-версию игры 1.4.7.0 для ОУ со встроенным code builder.

Если вы заинтересовались программированием в Minecraft, то компания Microsoft разработала курсы по изучению программирования MakeCode в Minecraft и My Minecraft Journey

Рекомендуемые ссылки:

Теперь вы знаете, что программирование в Minecraft возможно, разработчики работают над тем, чтобы научить этому всех желающих.

И под конец добавлю, что программировать в Minecraft можно и с помощью Питона. Но данная наука мне не под силу. Увы.

Изучаем Дискретную Математику в игре Майнкрафт!

В статье: «Какое влияние оказывают компьютерные игры на человека?» я упомянул, что компьютерные игры можно использовать во благо, если взглянуть на них под другим углом.

Как и обещал в этой статье я напишу про Дискретную Математику, а точнее про применение булевых функций в игре Майнкрфт / Minecraft.

Необходимые инструменты:

« Компаратор аналоговых сигналов (от лат. comparare «сравнивать») — сравнивающее устройство: электронная схема, принимающая на свои входы два аналоговых сигнала и выдающая сигнал высокого уровня.» - из Wikipedia.

И « Redstone » - красная пыль. «Это специальный механизм, который используется для передачи сигнала красного камня.» - из gamepedia.

Вот так выглядит простая схема, где:

  • Квадратный объект – это компаратор ;
  • Линии – это линиипроводящего песка ;

Так как же пользоваться этим?

Для начала необходимо разобраться в их свойствах .

Для Redstone всё просто: это проводник сигнала (обычный провод). Он проводит сигнал только на 15 блоков, если нет повторителя.

Но компаратор устройство сложнее. И мы будем рассматривать только одно его свойство, это сравнение .

Для того чтобы появился сигнал, необходимы источники, например, как на сриншоте выше был использован переключатель / триггер .

На нём видно, что стоит переключатель за три блока от компаратора. Соответственно мощность становится равной 13 , (15, 14, 13).

Поставим еще один переключатель, но уже сбоку, и видим, что сигнал дальше компаратора не идет.

Это легко объясняется тем, что у переключателя сбоку приоритет выше, потому что мощность сигнала получается равной 14 , (15, 14).

Так как 14 > 13 , то сигнал « перекрывается » и дальше не идет.

Но если будет мощность одинаковая , то сигнал пройдет!

Так причем же здесь Дискретная Математика?

Булевы функции состоят из булевых операций, а именно:

На скриншотах это как раз видно, что компаратор может как проводить , так и не проводить сигнал. Это является эквивалентом:

0 – не проводит и 1 - проводит.

Хорошим примером использования может служить видео из YouTube:

"8 bit CPU in Minecraft" (в конце статьи):

В нем реализованы операции:

  • ADD - сложение
  • SUB - вычитание
  • AND – логическое И
  • NAND – логическое НЕ И
  • NOR – логическое НЕ ИЛИ
  • XNOR - сложение по модулю 2
  • RSHIFT – сдвиг битов вправо / деление
  • и другие.

Вывод:

Если человек чем-то увлечен, пускай даже компьютерными играми, он может найти свою ветвь развития!

Как Minecraft применяют в образовании и есть ли польза

На сегодня более 400 школ из США, Индии и скандинавских стран применяют Minecraft в обучении, а в Швеции даже ввели обязательные уроки по игре.

Простота и универсальность позволяют применять Minecraft практически во всех базовых школьных предметах: решать математические задачи, иллюстрировать химические и физические эксперименты, моделировать органические системы в биологии и погружать в литературные или исторические миры.

Особенно Minecraft полезен для школьников из сёл или небольших городков — с помощью онлайн-платформы они могут получить новый опыт, больше узнать о мире и познакомиться с ровесниками из других стран. Важная составляющая успеха Minecraft — это сообщество, образовавшееся вокруг игры: как блогеры, так и преподаватели отмечают, что многие дети регулярно общаются на форумах в поисках советов и знакомятся со взрослыми игроками, которые помогают им освоить новые знания и виды деятельности.

Поэтому Minecraft — не только инструмент для обучения, но и платформа, которая помогает подготовиться ко взрослой жизни в современном обществе. Преподаватели, которые применяли игру на уроках, замечают , что Minecraft помогает детям почувствовать ответственность и дают возможность выступать в руководящей роли, потому что любой играющий в Minecraft ребёнок разбирается в нём лучше преподавателя и всегда готов подсказать.

Это, в том числе, помогает выстроить партнёрские отношения учителя с учениками — очень важный элемент образовательной коммуникации. Например, учитель математики Стивен Элфорд провёл эксперимент : попросил учеников сформировать в игре сообщества с собственными правилами и самостоятельно их регулировать. Результаты оказались впечатляющими: группы учеников построили совместные клубы, поровну распределив управление ими.

Математика в Майнкрафте

eu_tomat

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

Весь код охранной системы я разбирать не буду, сосредоточусь только на математике.

Остаток от деления

Начнем с такого фрагмента:

По названию функции видно, что автор осознавал ущербность этого кода, но лучшего решения не знал или забыл. Разберемся, что делает этот код. В цикле вычитает 360 из аргумента, если он больше или равен 360, или добавляет 360, если меньше нуля. А по сути, приводит значение угла к диапазону [0,360). Зачем это делается? Ведь, например, углы и -90˚ и 270˚ указывают одинаковое направление. Сколько бы полных оборотов (360˚) в какую бы сторону мы не совершили, направление от этого не изменится.

Тем не менее турель из OpenSecurity не принимает угол, выходящий за границы диапазона [0..360]. Приведение угла к нужному диапазону называют нормализацией. Угол можно нормализовать и в других диапазонах с полным углом, например [-180,+180]. Но наша турель требует диапазон [0,360]. Как же эффективно произвести нормализацию?

Лучшим решением является операция взятия остатка от деления. Заглянем в справочник:

Не сложно увидеть, что a % b дает нам ровно тот же результат, что и костыль qwertyMAN'а, но код сильно сократился и стал выполняться быстрее. qwertyMAN с этого костыля быстро спрыгнул, и в следующей версии упростил свой код, но поверь мне, брат, на форуме есть много таких костылей, и калеки не спешат с них слезать.
Вот, например, фрагмент кода, до которого я уже давно хотел докопаться. Код слишком длинный не только для своего функционала, но и для этой статьи, поэтому я спрячу его в спойлер:

Можно ли этот код упростить? Легко. Для начала заменим строки числами, например, по такой схеме: N=0; W=1; S=2; E=3
После чего становится очевидным такое решение:

С какой стороны света начинать отсчет, и в каком направлении, это уже другой вопрос, но принцип остается неизменным.
Главное, что код упростился, он не занимает огромное место в памяти и быстро выполняется.
Конечно, при использовании некоторых приближенных к машинным языков и при определенных условиях работы алгоритма использование деления может оказаться менее эффективным, чем проверки условий с последующим сложением/вычитанием. Но интерпретируемые языки, к которым относится Lua, это преимущество нивелируют. Поэтому по возможности используй операцию взятия остатка от деления при обсчете всяких циклических значений. Это удобно и эффективно.

Тригонометрия

Теперь взгляни на эту функцию

Что она делает? Понять не сложно: вычисляет угловые координаты цели: азимут и угол места в градусах.
Что тут не так?
1) присутствует acos с последующим добавлением/вычитанием 90˚, хотя известно, что и синус и косинус при добавлении/вычитании 90˚ преобразуются друг в друга. На этом я задерживаться не буду, формулы и их вывод есть в любом учебнике.
2) использование только asin или только acos тоже является не лучшей идеей: asin имеет низкое разрешение по углу в окрестности +/-90˚, а acos – в области 0 ˚и 180˚, снижая точность наведения, и для ее повышения потребуется использовать asin в окрестностях 0 ˚и 180˚ и acos в окрестности +/-90˚.
3) вычисление синусов и косинусов требует вычисления расстояния до цели r=sqrt(x*x+z*z), а, например, вычисление тангенса не требует.
4) область значений asin, acos и atan не покрывает полный оборот в 360˚, поэтому приходится прибегать к дополнительным вычислениям, как, например, это сделал автор: if z<0 then outX = (180-outX)%360 end .
5) не сошелся свет клином на всем известных со школы синусах, косинусах и тангенсах. Уделив несколько минут чтению списка математических функций, можно обнаружить такую красоту:


math.atan2(x, y)
Возвращает арктангенс x/y (в радианах), но использует знаки обоих параметров для вычисления «четверти» на плоскости. (Также корректно обрабатывает случай когда y равен нулю.)

В геометрии об этом не рассказывают, но такая функция имеется в стандартной библиотеке, пожалуй, любого высокоуровневого языка программирования. С ее помощью мы находим азимут цели единственной строкой azimuth=math.atan2(x, -z) . Осталось только выполнить преобразование в градусы, да скорректировать возвращаемый диапазон углов c [-180,+180] на принимаемый турелью [0..360], с чем мы уже разобрались.

Теперь надо правильно заполнить аргументы функции atan2. Для этого приведем всё, что у нас имеется, к картинке из школьного учебника.

Во-первых, на картинках в школьном учебнике угол растет при повороте от оси X, к оси Y, и тангенс угла вычисляется как tg(α) = y/x.
В справочнике же к atan2 указаны аргументы atan2(x, y) для вычисления арктангенса x/y. То есть, нам следует поменять аргументы местами. Имеем: math.atan2(y, x)

blogentry-13296-0-64746300-1456004244_thumb.jpg

Теперь разберемся с координатами мира Майнкрафта, положением турели, и тоже приведем их к картинке из школьного учебника. Сначала нарисуем координаты Майнкрафта при обращении лицом на север, вид сверху. Ось X направлена на восток, ось Z – на юг. Азимут поворота турели отсчитывается от северного направления по часовой стрелке.

Прошу простить мне изображение угла прямой линией, а не дугой. Надеюсь, это не сильно помешает пониманию выполненных преобразований.

X, Z – координаты мира Майнкрафта;
R – вектор на цель;
α – небольшой положительный угол между нулевым положением турели и вектором на цель.

На первом рисунке изображены исходные координаты майна и поворота турели.
На втором – поворот рисунка на 90˚ по часовой стрелке.
На третьем – отражение рисунка по вертикали (как бы взгляд на плоскость карты не сверху, а снизу, из-под земли). В принципе, можно было бы обойтись без второго рисунка, отразив первый по диагонали, идущей из правого верхнего угла, но для улучшения восприятия я привел оба рисунка.
На четвертом рисунке выполняется инверсия оси Z.

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

Все совершённые преобразования были нужны лишь для наглядности, и из них можно вывести более простое правило. Тригонометрия из школьного учебника основана на росте угла от оси X к оси Y. Но аналогичные формулы применимы при росте угла от оси -Z к оси X при соответствующих заменах в формулах. То есть, надо всего лишь знать от какой оси начинается рост угла и к какой оси происходит движение.

В результате выполненных преобразований ты можешь легко заметить, что координаты из учебника (x,y) соответствуют координатам Майнкрафта (-z,x).
В нашем случае:

Таким образом наш код приобретает вид: math.atan2(x, -z)
Осталось лишь преобразовать радианы в градусы и нормализовать их в диапазоне [0..360]: azimuth=math.deg(math.atan2(x,-z))%360

blogentry-13296-0-72447800-1456004250_thumb.jpg

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

Теперь тело функции, вычисляющей углы направления турели, умещается в три строки.

Или даже в одну, если не создавать промежуточные переменные и сразу возвращать результат.

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

Почему Minecraft?

Во-первых, потому что Minecraft — самая популярная игра в мире. Ежемесячно в неё играют порядка 112 миллионов человек, конструктор лидирует по просмотрам на YouTube за 2019 год (видео, связанные с Minecraft’ом посмотрели более ста миллиардов раз), а сайт Polygon вообще признал её игрой десятилетия. У Minecraft огромная фан-база, а значит среди учеников наверняка есть те, кто хорошо знаком с игрой — лишний раз правила объяснять не придётся.

Во-вторых, Minecraft даёт простор для фантазии и почти не ограничивает возможности. В нём можно строить, добывать ресурсы, создавать и проходить квесты, заниматься совместной деятельностью или просто бродить по миру. Чем больше свободы, тем больше идей, как её можно использовать. В этой игре нет линейного повествования, но есть множество инструментов для творчества, — поэтому свобода игрока ничем не ограничена. Во многом именно она заставляет многих возвращаться в Minecraft снова и снова.

Стивен Элфорд , учитель математики и естественных наук:

Я недавно начал играть в Metro Exodus, и это потрясающий кинематографический опыт в виртуальном мире, — но игра стоит на сюжетных рельсах. Я могу пойти туда-то и сделать то-то, но всё равно должен следовать сюжетной линии. Думаю, Minecraft несёт в себе такую ценность, особенно для работы в классе, потому что в нём нет основной сюжетной линии, и учитель может сам её определять.

В-третьих, Minecraft — это конструктор: форма развлечения, понятная детям с раннего возраста. Давно доказано, что работа с конструктором развивает в детях логику, пространственное мышление, память и фантазию. Привыкнув создавать миры из кубиков или деталей Lego, ребёнок легко перестраивается на онлайн-конструктор и схватывает его правила интуитивно.

Максим Сыныця , технический директор компании Shkolakola:

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

Кроме того, Minecraft понятен детям. Его легко освоить за счёт простоты и доступности, — плюс, удобно, что у игры есть большая детская аудитория. Поэтому Minecraft и стал популярным инструментом в образовании: это удобная платформа для создания контента, а интерес детей по всему миру к ней огромен.

Читайте также: