Как говорил Остап Бендер: «Автомобиль это не роскошь, а средство передвижения». Сейчас это можно говорить о владении языками программирования и разработке роботов.

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

И в основном приветствуются знания языков программирования высокого уровня: C++, C#, python, java, go, visual basic, java script и многие другие.
Данные языки являются текстовыми. В основном к ним переходят только к 8 классу — это примерно 14 лет.

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

Кого учить?

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

СОЗДАЛ МАЙНКРАФТ НА PYTHON!

В результате, отпадает сам собой вопрос «кого учить?». Изучить языки программирования может каждый в независимости от того, какой у него склад ума — «гуманитарий» или «аналитический». Изучение языков программирования тренирует участки мозга как левого, так и правого полушария.

Если первая проблема — «Кого учить?» решена, то вопрос «как учить?» и «когда учить?» актуален как всегда.

Я выбираю python

Проблем — пропасть. Все мы знаем, что для детей с 6 лет вводятся такие темы как «алгоритмизация» и «робототехника», где ребята учатся создавать программы с помощью пиктограмм. Сначала это происходит с помощью бумажных элементов, а затем постепенно переносится на компьютер, где в специальных компьютерных средах дети создают программы, используя те же пиктограммы. Такой «графико-визуальный» язык программирования преследует детей в основном до 11 класса, этому способствует и сама робототехника, а именно — программа обучения.

По статистике 70% робототехнических наборов занимает lego (wedo, ev3, nxt) — это огромная цифра. Вся родная среда программирования — это работа с иконками-пиктограммами, правда для продвинутого уровня есть возможность использовать более сложную математику и есть уже момент знакомства с понятием класса и функции.

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

Я поставил цель «смягчить» переход между графико-визуальным языком программирования и текстовым и уже на возрастном этапе — 11-12 лет, давать основные виды алгоритмов для решения определённых задач.
Таким «мостиком» стал язык программирования python и среда minecraft.

Язык программирования python на начальном этапе — очень понятный и лёгкий, что позволяет понизить порог вхождения в изучение языков программирования. Мне, как преподавателю, данный язык нравится своей чёткой строгой структурой написания кода. Тут необходимо строго соблюдать положение строк кода, так как это характеристика зависимости элементов кода между собой.

Minecraft

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

Для изучения языков программирования python и java было разработано ещё одно приложение minecraft pi.
Эта среда в первую очередь разрабатывалась для микрокомпьютеров семейства raspberry pi. Данный minecraft устанавливается по умолчанию с операционной средой для микрокомпьютера и является бесплатным приложением.

Есть специальная локализация для windows и ios.

Для того, чтобы код на python мог интегрироваться в среду minecraft, используются различные локальные сервера. Их множество.
Один из них это Bukkit

Подключившись к локальному серверу, мы можем создавать программы на python и интегрировать их в среду minecraft.

Особенности программирования на python для minecraft

Главная специфика разработки программ для визуализации своего результата в minecraft опирается на пространство координат.
Так как это 3d игра, то все объекты имеют 3 координаты X, Y, Z
И это кладезь в области визуализации:
1. графиков математических функций, как двухмерных, так и трёхмерных.

2. построение фигур стереометрии и планиметрии.

Еще это наглядная демонстрация того, зачем нужна математика со всеми её разделами.
Например:

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

2. построение фигур с использованием тригонометрии

3. практическое закрепление понятий, что же такое вектор, матрица (массив), список, логика предикатов.

4. почему используются радианы, а не градусы.

5. зачем нужны трансцендентные и комплексные числа
И конечно же, это наглядная демонстрация тех или иных алгоритмов.

Всё это возможно применить и реализовать в среде minecraft с использованием языка python.

Вторая особенность работы в minecraft — это то, что каждый объект состоит из кубиков одинакового размера. Кубик можно воспринимать как пиксель (точка функции). Для примера, представлены некоторые скриншоты применения математики в minecraft.

Пример 1. Парабола

парабола

Данная парабола была построены с использованием всем известной формулы y =x^2, но с некоторыми поправками.
А именно масштаб и построение.
Код программы :

parabola

Пример 2 График функции sin() через радианы

Sin()sin_rad

Пример 3 График функции sin () c использованием напрямую с координаты
Как видим, данные показатели градусов были восприняты алгоритмом, как радианы и это наложило отпечаток на построение. Получились затухающие колебания sin И cos()

Читайте также:  Как прыгать в майнкрафте

sin2

sin_grad

Пример 4. Винтовая линия

Такая же особенность прослеживается, если строить винтовую линию.

спираль Архимеда

Все эти примеры показывают влияние математики на мир.
Напоследок приведу пример применения цикла и условия для решения логических задач.

Конечно, изучение языка python и его библиотек не заканчивается использованием только среды minecraft
Это начальный уровень входа в достаточно сложную алгоритмику и поэтому подразумевает профессиональность учителя в области математики, программирования (заметьте, не информатики) и физики.

Надеюсь статья была вам полезна. Дерзайте и создавайте свои интересные проекты.

Источник: novator.team

Как сделать игру «Сапер» на Python в Minecraft

Кодинг на Python — занятие, предназначенное и подходящее как для взрослых, так и для детей. Усвоить принципы разработки и составления кода может и школьник 9–13 лет.

Однако при обучении ребенка языку программирования нужен особый подход. Пригодится совмещение учебы и игры — и программирование на примере Minecraft как раз отвечает этой цели. При помощи Пайтона в Майнкрафте возводятся небоскребы и даже целые миры.

Плюсы программирования в Майнкрафте для детей:

  • знакомые интерфейс и среда, наглядность и игровой подход не оттолкнут ребят от длинных строчек кода;
  • совмещение любимой вселенной и IT-языка помогут создать ассоциацию программирования с увлекательным занятием, которым хочется заниматься;
  • дети увидят, как разработка упрощает известные по игре процессы, позволяя сокращать затраченное на них время;
  • вместо позиции потребителя ребенок примерит на себя роль создателя.

Обучение программированию в Майнкрафте — надежный способ заинтересовать подростка IT. Проектируются в Майнкрафте при помощи кода не только предметы, но также полноценные программы и мини-игры: например, можно сделать квест или бота. И, конечно, привлекательный вариант — воссоздание классических игр. Интересуясь и пытаясь понять, как сделать простую игру на Python, естественно и постепенно школьник научится кодить.

Детская школа программирования «Пиксель» делится тем, как сделать онлайн-игру на Python в Minecraft.

Об устройстве игры «Сапер» на Питоне

как сделать игру на python

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

Однако у майнкрафтовской версии имеются нюансы. Переходим к формированию кода и разработке игры.

Установка программ: изучаем программирование в Minecraft

Чтобы понять, как сделать игру на Python, прежде всего нужно скачать на ПК Python и Minecraft, а затем настроить их. Предлагаем видеоролики с инструкциями об установке программ на разные операционные системы:

Процесс создания игры в видеоформате и код «Сапера» на Python мы добавили в конце статьи.

Старт создания «Сапера» на Пайтоне

Создаем новый файл (File — New file), называем его sapper — это слово переводится с английского как «сапер». Сохраняем файл в папку (File — Save as).

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

сапер на питоне

Положения по осям — в переменных x, y, z. Игра конструируется на высоте 100 — в y помещаем это число.

сапер на python

Составим команду, переносящую героя в заданное положение. В роли игровых клеток — блоки земли, в роли мин — блоки динамита, также участвуют блоки воздуха. После задаем переменные. Баллы — в переменной scores.

сапер на пайтон

8 из 9 блоков безопасны, а под одним из них — взрывчатка. Понадобится счетчик безобидных элементов земли. Задаем переменную countGrasses, помещаем туда цифру 8.

как сделать онлайн игру на python

В переменной grasses — площадка с пустующим списком, он заполнится позднее. Функция place при участии for формирует квадратное поле из 9 блоков. В циклах — промежуток от -1 до 2 для сооружения поля. Переменная i прибавляется к оси x, а k — к z. В циклах задействуются числа от -1 до 1. От оси y вычитаем 1 — земля возводится под героем. Помещаем функции в grasses с append.

игра сапер на python

Переменная game связана с происходящим в игровой вселенной. Для включения игрового режима помещается True. Пришло время использовать функцию place.

как сделать простую игру на pythonpython сапер код

Переходим к запуску цикла while game. Задаем остановку раз в 0.1 сек. В переменные xr и zr помещаем произвольные цифры от -1 до 1 и присоединяем к ним данные о расположении. К 1 — x, а ко 2 — z. Функцией setBlock в рандомном пространстве под платформой создается взрывчатка.

как сделать сапер на pythonкак написать сапер на python

Добавление условных конструкций в игре «Сапер» на Python

Переменная searchMode связана с режимом поиска. Для его включения туда помещается True. Новую информацию о герое ставим в переменную player. Прописываем следующий ход развития событий: если юзер оказывается не выше 100 — игровая зона уничтожается, а игра заканчивается.

программирование в майнкрафт для детейобучение программированию в майнкрафт

Команду, которая считывает нажатие на один из кубов, помещаем в переменную hit. При помощи for проверяем щелчки по блокам. Позицию клика размещаем в pos. Задаем еще одно условие: при нажатии по участку с динамитом поле уничтожается, производится выход из игры, командой break выполняется выход из цикла for.

Читайте также:  Из чего сделать вешалку в Майнкрафте

python программируем с minecraftпрограммирование на примере minecraft

Если же игрок нажимает по другому блоку, то получает 1 балл. При этом блок исчезает, а у счетчика элементов без взрывчатки отнимается 1. Прибавляем условие: нажаты безвредные блоки — производится перезагрузка платформы и счетчика. Для прерывания действия цикла for задается break.

изучаем программирование в minecraft

Реализация игры завершена — надеемся, теперь вам понятно, как сделать «Сапер» на Python. Пришло время играть и испытывать удачу.

Если вам понравилось писать игру для Minecraft на языке Python, рекомендуем попрактиковаться в сотворении следующих проектов. Как это сделать, подскажут видеоролики по обучению программированию в Майнкрафте на YouTube-канале детской IT-школы «Пиксель». Если остались непонятные моменты — важно вернуться назад и прослушать неясный фрагмент еще раз.

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

Видео по созданию игры:

Источник: clubpixel.ru

Картограф для Minecraft на Python

Есть такая замечательная игра — Minecraft. В целом очень напоминает Lego — можно строить из различных кубиков всё что душа пожелает. На Youtube можно найти много очень впечатляющих построек. Более того, строить можно совместно на специальных серверах.

В общем, в последнее время я довольно много играю в Minecraft

Одна из особенностей игры — процедурная генерация ландшафта. Т.е. в каком бы направлении Вы ни пошли, окружающий пейзаж будет создаваться по мере надобности. Общая площадь карты в Minecraft в несколько раз больше площади поверхности Земли. Сама карта подгружается частями — держать в памяти такое количество данных целиком просто бессмысленно. Недавно я от нечего делать решил написать парсер файлов Minecraft, чтобы сделать карту своей территории (я знаю что для этого есть инструменты, тот же c10t, но самому же всегда интереснее). Чтобы не было скучно, писать решил на Питоне

Вообще к Питону я приглядываюсь достаточно давно, и русскоязычное издание Learning Python лежит у меня под столом уже полгода. Но до сих пор ничего сложнее пробного hello world я на нём не писал. Парсер и картограф будут неплохим началом.

Формат файлов

Карта в Minecaft, как понятно из вышеприведённого описания, может быть очень большой. Поэтому она разбита на куски (chunks) размером 16 x 16 x 128 метров — этакие высокие колонны. Чанки сложены в директории по хешу их координат. В целом всё выглядит так: в корневой папке лежит основной файл level.dat, в котором хранится в т.ч. random seed для генерации ландшафта, и 64 папки верхнего уровня. В каждой из них находится по 64 папки второго уровня, в которых и лежат gzip-нутые файлы чанков.

Я уже писал что чанк отправляется в папку, соответствующую хешу его координат. Вот так можно вычислить этот хеш:

def base36encode(number): sign = » if not isinstance(number, (int, long)): raise TypeError(‘number must be an integer’) if number < 0: #raise ValueError(‘number must be positive’) sign = ‘-‘ number = number * -1 alphabet = ‘0123456789abcdefghijklmnopqrstuvwxyz’ base36 = » while number: number, i = divmod(number, 36) base36 = alphabet[i] + base36 return sign + base36 or sign + alphabet[0] chunk_x = -13 chunk_y = 44 filename = base36encode(divmod(chunk_x, 64)[1]) + «\» + base36encode(divmod(chunk_y, 64)[1]) + «\c.» + base36encode(chunk_x) + «.» + base36encode(chunk_y) + «.dat» print filename # выведет 1f18c.-d.18.dat

Код для преобразования в base36 взят с Википедии и допилен для отрицательных чисел.

Сам чанк (уже разархивированный) записан в специальном формате, называемом named binary tag — по сути, двоичный файл с именованными полями. В файле могут встречаться 11 видов стандартных тегов, последний из которых, compound, может содержать произволное количество других тегов (в том числе и типа compound). Стало быть, у нас будут структуры произвольного уровня вложенности.

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

Кроме блоков в файле хранятся сущности, принадлежащие чанку — например, монстры. Но нас пока что это не интересует.

Разбор файла

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

def read_tag(chunk): type = ord(chunk.read(1)) # Chunk starts with «10» byte print «Found tag type: %s» % (tag_types[type], ) if (type > 0): name = read_string(chunk) if (name != None): print «Name: %s» % name else: name = » payload = None # Read payload of each tag. «0» tag has no payload if (type == 1): payload = read_byte(chunk) elif (type == 2): payload = read_short(chunk) elif (type == 3): payload = read_int(chunk) elif (type == 4): payload = read_long(chunk) elif (type == 5): # no separate float for now payload = read_long(chunk) elif (type == 6): # no separate double for now payload = read_long(chunk) elif (type == 7): payload = read_byte_array(chunk) elif (type == 8): payload = read_string(chunk) elif (type == 9): payload = read_list_payload(chunk) elif (type == 10): payload = read_compound(chunk) return (type, name, payload)

Если мы прогоним этот скрипт по файлу какого нибудь чанка (предварительно распаковав его Winrar’ом или 7zip’ом), мы увидим что теги внутри compound-тега Level идут не в том порядке, который указан в спецификации. Т.к. все теги помечены именем, найти тег Blocks мы всё равно сможем, просто не получится взять его по заранее вычисленному смещению.

Читайте также:  Игры для мальчиков кому 8 лет Майнкрафт

Вот примерная схема одного чанка:

Found tag type: Compound Found tag type: Compound Name: Level Found tag type: Byte array Name: Data Array length: 16384 Found tag type: List Name: Entities 0 items of type Byte Found tag type: Long Name: LastUpdate Found tag type: Int Name: xPos Found tag type: Int Name: zPos Found tag type: List Name: TileEntities 0 items of type Byte Found tag type: Byte Name: TerrainPopulated Found tag type: Byte array Name: SkyLight Array length: 16384 Found tag type: Byte array Name: HeightMap Array length: 256 Found tag type: Byte array Name: BlockLight Array length: 16384 Found tag type: Byte array Name: Blocks Array length: 32768 Found tag type: End Read 12 elements in compound Found tag type: End Read 2 elements in compound

Для обрамляющего compound-тега названия нет — на соответствуюшем месте просто записан нулевой байт (длина строки — 0).

Разбираем блоки

Получив наконец блоки, мы увидим что в результате python преобразовывает массив байт в строку. Нас это вполне устраивает. Теперь нам надо сориентироваться в их пространственном расположении. Для начала, Minecraft своеобразно подходит к определеению осей координат: ось Y у него вертикальна. Вики по Minecraft нам подсказывает, что в массиве блоков можно найти нужный элемент по такой формуле:

Blocks[ y + ( z * ChunkSizeY(=128) + ( x * ChunkSizeY(=128) * ChunkSizeZ(=16) ) ) ]

Находим тег с блоками в результатах разбора:

for level in output[2]: # skip end tags if (level[0] == 0): continue for tag in level[2]: if (tag[0] == 0): continue print tag[1] if tag[1] == «Blocks»: blocks = tag[2]

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

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

for z in range(0, 16): for x in range (0, 16): print ord(blocks[ y + ( z * 128 + (x * 128 * 16)) ]), print

Фиксируем высоту (координату y) на 16, и выводим получившуюся матрицу чисел 16 на 16. Потом смотрим в таблицу значений блоков, чтобы узнать что именно мы увидели.

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 73 1 1 1 1 3 1 1 1 1 1 1 1 1 1 73 73 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 73 73 1 1 1 1 1 1 1 1 56 1 1 1 1 1 73 15 1 1 1 1 1 1 1 1 1 56 1 1 1 1 1 15 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

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

Генерация карты

Чтобы сохранять изображения, нам потребуется Python Imaging Library. Устанавливается она без проблем. После установки можно будет приступить к генерации карты среза.

Изображения мы не задумываясь возьмём прямо из стандартного набора текстур Minecraft Идём в %appdata%.minecraft, распаковываем minecraft.jar и достаём оттуда terrain.png. Выглядит он вот так:

Нам надо нарезать этот набор на аккуратные квадраты 16 на 16, и составить из них новое изображение. Вначале получаем тайлы:

import Image def get_cropbox(x, y): return (x*16, y*16, x*16 + 16, y*16 + 16) terrain = Image.open(«terrain.png») stone = terrain.crop(get_cropbox(0,0)) dirt = terrain.crop(get_cropbox(2,0)) gravel = terrain.crop(get_cropbox(3,1)) sand = terrain.crop(get_cropbox(2,1)) coal = terrain.crop(get_cropbox(2,2)) iron = terrain.crop(get_cropbox(1,2)) gold = terrain.crop(get_cropbox(0,2)) redstone = terrain.crop(get_cropbox(3,3)) diamond = terrain.crop(get_cropbox(2,3))

Вот примерно так. Функция get_cropbox написана для вычисления координат вырезания и вставки. Это не все блоки, которые могут встретиться в игре, но с файлом текстур дополнить этот список Вы сможете и самостоятельно. Я пока остановлюсь на том что может встретиться под землёй.

Теперь, примерно так же как мы выводили текстовые значения блоков, мы заполняем изображение карты:

map = Image.new(«RGB», (256, 256)) for x in range(0, 16): for z in range (0, 16): block_id = ord(blocks[ y + ( z * 128 + (x * 128 * 16)) ]) if block_id == 1: map.paste(stone, get_cropbox(x, z)) elif block_id == 3: map.paste(dirt, get_cropbox(x, z)) elif block_id == 13: map.paste(gravel, get_cropbox(x, z)) elif block_id == 12: map.paste(sand, get_cropbox(x, z)) elif block_id == 16: map.paste(coal, get_cropbox(x, z)) elif block_id == 15: map.paste(iron, get_cropbox(x, z)) elif block_id == 14: map.paste(gold, get_cropbox(x, z)) elif block_id == 73: map.paste(redstone, get_cropbox(x, z)) elif block_id == 56: map.paste(diamond, get_cropbox(x, z)) try: map.save(‘.map.png’, ‘PNG’) except: print «Something went wrong on save»

Здесь опять не все идентификаторы блоков, и если встретится что то незнакомое, на карте будет просто чёрный квадрат. И ещё тут надо помнить про систему координат, в частности, не путать y и z :). В результате этих манипуляций должен получиться PNG-файл со срезом карты:

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

Ссылки по теме

  • Официальный сайт Minecraft
  • Полный код картографа
  • Структура файла NBT
  • Структура чанка
  • Список блоков с их ID
  • AI, Minecraft и Node.js (пишем сервер для Minecraft)

Источник: kuroikaze85.wordpress.com