Праздник 8 Марта в Майнкрафт
Для начала давайте создадим вот такой список:
список = [0, 1, 2, 3, 4, 5]
x,y,z = mc.player.getTilePos()
for цвет in список:
mc.setBlock(x, y, z, 35, цвет)
y += 1
Эта программа использует список с цветами шерстяных блоков, перебирая его в цикле for, чтобы создать радужный столбик.
Запустив эту программу в Minecraft, вы увидите одинокий столбик из шерстяных блоков. Обратите внимание, что его высота — шесть блоков, а ширина — один блок. Мы уже не раз использовали переменные с координатами x, y и z. Каждую из этих переменных можно назвать измерением. Так вот, данная программа создает столбик из шерстяных блоков в измерении y. Заменив y в последней строке кода на x, вы можете создать «столбик» в измерении x.
Ну а теперь начнем думать в двух измерениях! Одномерный список позволяет хранить в каждой позиции по одному элементу, однако в двухмерном списке элементов может быть несколько.
список = [[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4],
[5, 5, 5]]
Внимательно присмотревшись, вы обнаружите в первой строке этого кода открывающую квадратную скобку, после которой идет список с нулями, а затем запятая. Это не что иное, как список внутри списка! Мы можем назвать основной список внешним и сказать, что в нем находятся вложенные списки.
По индексу 1 располагается список с тремя единицами. По индексу 2 — с тремя двойками. Подобные списки мы видим и в следующих строках. В последней строке внешнего списка находится список с тремя пятерками, а за ним стоит закрывающая квадратная скобка. Итак, в этом коде показан список с шестью элементами, каждый из которых также является списком. Вот он какой, двухмерный список!
x,y,z = mc.player.getTilePos()
началоX = x
for ряд in список:
for ЦВЕТ in РЯД:
mc.setBlock(x, y, z, 35, ЦВЕТ)
x += 1
y += 1
x = началоX
Прежде чем я объясню, что происходит в коде, посмотрите результат моей работы. Это стена, высота которой равна шести блокам (в измерении y), а ширина — трем блокам (в измерении x).
Поскольку мы работаем в двух измерениях, для обработки значений
из списка СПИСОК нам понадобятся два цикла for. Первый перебирает элементы внешнего списка, а второй, вложенный, — элементы каждого из вложенных списков.
Происходит это так: на первой итерации внешнего цикла из списка СПИСОК программа берет элемент с индексом 0 и сохраняет его значение в переменной ряд.
Теперь в РЯД находится список [0, 0, 0], ведь это и есть первый элемент внешнего списка.
Затем второй, вложенный цикл перебирает элементы из списка РЯД, поочередно сохраняя каждый из них в переменной ЦВЕТ. В данном случае все эти элементы равны 0. Во вложенном цикле программа создает блоки, используя переменную ЦВЕТ для задания цвета каждому из них.
Вам нужно будет подставить вместо идентификаторов блоков шерсти идентификаторы блоков лазурита.
Весь список будет выглядеть так:
СПИСОК = [[35, 35, 22, 22, 22, 22, 35, 35],
[35, 22, 35, 35, 35, 35, 22, 35],
[22, 35, 22, 35, 35, 22, 35, 22],
[22, 35, 35, 35, 35, 35, 35, 22],
[22, 35, 22, 35, 35, 22, 35, 22],
[22, 35, 35, 22, 22, 35, 35, 22],
[35, 22, 35, 35, 35, 35, 22, 35],
[35, 35, 22, 22, 22, 22, 35, 35]]
Сейчас в двухмерном списке блоков находятся только блоки белой шерсти — картинку из них не составишь. Ваша задача — изменить содержимое списка так, чтобы получился смайлик.
Запустим и проверим работу программы.
А теперь используя пиксель арт для цифр и букв создадим надпись 8 марта
СПИСОК = [[0, 57, 0, 0, 0, 22, 0, 0, 0, 22, 0, 22, 22, 22, 22, 0, 22, 22, 22, 0, 22, 22, 22, 0, 0, 22, 22, 0],
[57, 0, 57, 0, 0, 22, 22, 0, 22, 22, 0, 22, 0, 0, 22, 0, 22, 0, 22, 0, 0, 22, 0, 0, 22, 0, 0, 22],
[57, 0, 57, 0, 0, 22, 0, 22, 0, 22, 0, 22, 0, 0, 22, 0, 22, 0, 22, 0, 0, 22, 0, 0, 22, 0, 0, 22],
[0, 57, 0, 0, 0, 22, 0, 0, 0, 22, 0, 22, 22, 22, 22, 0, 22, 22, 22, 0, 0, 22, 0, 0, 22, 0, 0, 22],
[57, 0, 57, 0, 0, 22, 0, 0, 0, 22, 0, 22, 0, 0, 22, 0, 22, 0, 0, 0, 0, 22, 0, 0, 22, 22, 22, 22],
[57, 0, 57, 0, 0, 22, 0, 0, 0, 22, 0, 22, 0, 0, 22, 0, 22, 0, 0, 0, 0, 22, 0, 0, 22, 0, 0, 22],
[0, 57, 0, 0, 0, 22, 0, 0, 0, 22, 0, 22, 0, 0, 22, 0, 22, 0, 0, 0, 0, 22, 0, 0, 22, 0, 0, 22]]
x,y,z = mc.player.getTilePos()
началоX = x
for РЯД in reversed(СПИСОК):
for БЛОК in РЯД:
mc.setBlock(x, y, z, БЛОК)
x += 1
y += 1
x = началоX