Блог онлайн школы Пиксель

Как сделать игру “Раннер” в Minecraft на Python

Школа программирования для детей “Пиксель” продолжает делиться бесплатными уроками по созданию игр на Python. В этом уроке мы создадим “Раннер” в Minecraft с помощью языка программирования Python. Игра будет очень динамичной. Нельзя будет стоять на месте, иначе блоки под игроком будут исчезать. Наступив на золотой блок, игрок получит одно очко, а наступив на обсидиан — потеряет один балл. Игра получится очень интересной. Не будем затягивать, давайте начнем программировать.

Начало программирования “Раннера” на Пайтон

программирование майнкрафт для детей
Создадим python файл через среду разработки IDLE. Назовем файл runner. Импортируем необходимые модули: minecraft, block, time и random. Модуль random нам пригодится для создания блоков в случайном порядке. Объявим стандартную переменную mc для проведения операций в игре.
В список под названием blocks поместим блоки, которые будут задействованы в этой игре. У первого блока индекс 0, у последнего — 3. Для динамичного изменения последнего индекса создадим переменную lastBlock. В ней вычислим длину списка, используя функцию len. Отнимаем единицу от длины списка и получится индекс последнего элемента в списке.
Переменная count будет задавать линию, на которой будут появляться блоки в случайном порядке. В будущем мы определим площадку 10 на 10 и будем на ней по центру. Сделаем так, чтобы первая линия начала появляться на 7 блоков дальше от нас. В нашей игре будет запущен таймер и будет считаться количество очков. Очки начисляются за собранное золото.

Координаты персонажа

Настроим позицию персонажа и появление стартовой площадки. В переменной x хранится позиция персонажа по данной оси, в y приравняем значение 200, а в переменной z к координате по оси z прибавим 100. Определим функцию под названием spawn с тремя аргументами: x, y, z. Функция телепортирует персонажа на плиту. Чуть ниже будем использовать эту функцию.

Вывод сообщения в чат и условия игры

В чат выведем сообщения об игре. В нашей игре нельзя стоять на месте и рекомендуется собирать золотые блоки. Наступать на черные блоки лучше не стоит. За это будет сниматься один балл. Через 10 секунд игра начнется. Переменная isExit содержит значение False. Она сообщает программе, покинули мы данную игру или нет.
В бесконечном цикле останавливаем программу на одну миллисекунду и к таймеру прибавляем ноль точка один. В переменной pos хранится команда получения позиции персонажа. Она будет постоянно обновляться. В переменную b поместим номер блока, который находится под ногами у персонажа.
раннер майнкрафт
Если под ногами обнаруживается золотой блок, то на том месте появляется воздух, в игре прибавляется одно очко и количество очков выводится в чат. Если под ногами обсидиан, то игрока штрафуют на минус один балл и снова количество очков выводится в чат. Если игрок падает вниз, то он проигрывает. Выводится в чат общее время и общее количество очков. Очки и время снова становятся равны нулю. А через пять секунд мы возрождаемся в точке спавна. Но на месте стоять все равно нельзя. Это очень опасно.
Нам понадобятся 5 переменных со случайными числами от нуля до последнего блока в списке. Пять блоков строятся следующим образом: к x прибавляется count, который отвечает за линию, в которой будут строятся блоки, y остается без изменений, z отвечает за каждый блок в линии. Случайные числа помещаются в квадратные скобки списка blocks. Тем самым у нас получается случайная генерация уровня. К count прибавляем 2, чтобы линии строились через одну.
Напишем команду, убирающую блок под ногами. Напоследок организуем выход из игры на случай, если игрок устанет и захочет покинуть игру. Если игрок напишет в чате exit, то переменная isExit будет равна True. Это означает, что режим выхода из игры будет активирован. Логика выхода из игры прописана в последнем условии. При включении режима выхода из игры активируется команда break, посредством которой цикл прекращает свою работу. А это значит, что и программа перестанет работать. Проверим полную версию игры.
Если у вас есть идеи для создания игр, но вам не хватает навыков программирования, записывайтесь на курсы в школу программирования “Пиксель”. Мы поможем вам обрести все необходимые навыки.

Полный код программы:

import mcpi.minecraft as minecraft
import mcpi.block as block
import time
import random
mc = minecraft.Minecraft.create()
blocks = [
block.AIR.id,
block.ICE.id,
block.GOLD_BLOCK.id,
block.OBSIDIAN.id
]
lastBlock = len(blocks) - 1
count = 7
timer = 0
scores = 0
pos = mc.player.getTilePos()
x = pos.x
y = 200
z = pos.z + 100
def spawn(x, y, z):
mc.player.setTilePos(x, y + 5, z)
mc.setBlocks(x - 5, y, z - 5, x + 5, y, z + 5, blocks[1])
spawn(x, y, z)
mc.postToChat("Через 10 секунд начнется игра. Не стой на месте! Собирай золотые блоки.")
mc.postToChat("Не наступай на черные блоки!!!")
time.sleep(10)
mc.postToChat("Игра началась!!!")
isExit = False
while True:
time.sleep(0.1)
timer += 0.1
pos = mc.player.getTilePos()
b = mc.getBlock(pos.x, pos.y - 1, pos.z)
if b == blocks[2]:
mc.setBlock(pos.x, pos.y - 1, pos.z, blocks[0])
scores += 1
mc.postToChat("Scores: " + str(scores))
if b == blocks[3]:
scores -= 1
mc.postToChat("Scores: " + str(scores))
if pos.y < y - 10:
mc.postToChat("Game Over!")
mc.postToChat("-------------------")
mc.postToChat("All scores: " + str(scores))
mc.postToChat("Time: " + str(int(timer)))
mc.postToChat("-------------------")
pos = mc.player.getTilePos()
x = pos.x
z = pos.z + 100
count = 7
scores = 0
timer = 0
time.sleep(5)
spawn(x, y, z)
r1 = random.randint(0, lastBlock)
r2 = random.randint(0, lastBlock)
r3 = random.randint(0, lastBlock)
r4 = random.randint(0, lastBlock)
r5 = random.randint(0, lastBlock)
mc.setBlock(x + count, y, z - 2, blocks[r1])
mc.setBlock(x + count, y, z - 1, blocks[r2])
mc.setBlock(x + count, y, z, blocks[r3])
mc.setBlock(x + count, y, z + 1, blocks[r4])
mc.setBlock(x + count, y, z + 2, blocks[r5])
count += 2
mc.setBlock(pos.x, pos.y - 1, pos.z, blocks[0])
chat = mc.events.pollChatPosts()
for c in chat:
m = c.message
if m == "exit":
mc.postToChat("Bye Bye!!!")
isExit = True
if isExit:
break

Видеоурок по программированию игры “Раннер” на Python:

Бесплатные видеоуроки Minecraft для детей