Aprenda Python e Eletrônica com o Minecraft Pi Edition

Você sempre quis aprender a codificar, mas não sabia por onde começar? Aprenda a controlar o Minecraft no Raspberry Pi usando Python e alguns componentes eletrônicos simples.

Você sempre quis aprender a codificar, mas não sabia por onde começar?  Aprenda a controlar o Minecraft no Raspberry Pi usando Python e alguns componentes eletrônicos simples.
Propaganda

Você sempre quis aprender a codificar, mas não sabia por onde começar? Aprenda a controlar o Minecraft no Raspberry Pi usando Python e alguns componentes eletrônicos simples. Aqui está o resultado final:

Você precisará de um Pi 2 ou mais novo para este projeto, e enquanto você pode completar a maioria dessas tarefas via linha de comando através do Secure Shell (SSH), este tutorial irá focar na codificação diretamente no Pi.

Framboesa Pi 3 Modelo B Motherboard Framboesa Pi 3 Modelo B Motherboard Compre agora Na Amazon $ 29.99

Novo no Minecraft? Não se preocupe - aqui está o nosso Minecraft Beginner's Guide O (retardado) Beginner's Guide to Minecraft O (retardado) Beginner's Guide to Minecraft Se você chegar atrasado à festa, não se preocupe - este extenso guia para iniciantes o cobre. Consulte Mais informação .

Introdução ao Minecraft Pi

Minecraft-Pi-Menu

Minecraft para o Raspberry Pi foi desenvolvido para aprender e mexer (e é grátis). Ele vem com uma Application Programming Interface (API) que fornece uma maneira de o código falar facilmente com o Minecraft. É brilhante aprender como codificar em Python, bem como começar a usar eletrônicos. Eletrônica para iniciantes: 10 habilidades que você precisa saber Eletrônica para iniciantes: 10 habilidades que você precisa conhecer Muitos de nós nunca tocaram em um ferro de solda - mas fazer coisas incrivelmente gratificante. Aqui estão dez das habilidades de eletrônica DIY mais básicas para ajudá-lo a começar. Consulte Mais informação .

O que é o Python?

Python é uma linguagem de programação. Isso é interpretado, o que significa que quando você executa um arquivo ou programa Python, o computador precisa fazer um pequeno trabalho no arquivo primeiro. As desvantagens são que pode ser considerado lento quando comparado com linguagens compiladas.

Os benefícios das linguagens interpretadas são a velocidade de codificação e sua simpatia. Você não precisa dizer ao computador quais dados deseja armazenar, apenas que deseja armazenar algo e o computador vai descobrir o que fazer. Há exceções, é claro, e essa é uma visão simplificada, mas a programação deve ser divertida! Se você começar a investigar os detalhes técnicos complexos, pode se tornar um pouco trabalhoso.

Python é sensível a maiúsculas e minúsculas. Isso é importante saber, já que o Python não reconhecerá objetos mesmo se eles estiverem escritos corretamente se o caso estiver errado. “Dosomething ()” não funcionará se o método for realmente chamado “DoSomething ()”. O Python também usa recuo . Outras linguagens de programação podem não se importar com quantos recuos seu código possui, enquanto o Python se importa. Recuos são usados ​​para informar ao Python onde o código pertence. Outros idiomas podem usar “Curly Braces” ({}) para agrupar códigos - o Python não os usa. Python usa um hash (#) para comentários, e comentários são usados ​​para dizer a outros desenvolvedores ou pessoas que estão olhando para o código o que uma parte em particular faz, ou porque ela é necessária. Python ignora qualquer coisa depois de um hash.

Finalmente, existem duas versões principais do Python - Python 2.7.xe Python 3.x. Existem algumas diferenças entre os dois (quais são as diferenças?). Este tutorial usará o Python 3.

Configuração inicial

Fornecendo o seu Pi já está configurado e executando Raspbian Como instalar um sistema operacional para o seu Raspberry Pi Como instalar um sistema operacional para o seu Raspberry Pi Veja como obter um novo sistema operacional instalado e funcionando em seu Pi - e como clonar sua configuração perfeita para recuperação rápida de desastres. Leia mais, não há muita configuração inicial necessária.

Abra o Terminal ( Menu> Acessórios> Terminal ) e execute este comando. É sempre uma boa prática manter a lista de repositórios atualizada, e isso fará o download da lista de programas mais recente (ela não fará o download dos programas, o que ajudará o Pi a saber quais programas são chamados e onde encontrá-los).

sudo apt-get update 

Agora atualize o Pi (isso pode demorar um pouco):

 sudo apt-get upgrade 

Python e Minecraft Pi já estão instalados, no entanto, se Minecraft Pi não está instalado por qualquer motivo, é simples de instalar 5 maneiras de instalar o software em Raspberry Pi 5 maneiras de instalar o software em Raspberry Pi Para fazer qualquer coisa com um Raspberry Pi, você vai precisa saber como instalar um sistema operacional e software para rodar nele. Se você é novo no Linux, isso pode ser assustador. Consulte Mais informação :

 sudo apt-get install minecraft-pi 

Navegue até documentos e crie uma nova pasta chamada “Minecraft”:

 cd Documents/ mkdir Minecraft 

Você pode ver o conteúdo desta nova pasta:

 ls 

Aqui vai uma dica - se você começar a digitar e pressionar a tecla TAB, a linha de comando tentará preencher automaticamente a declaração para você.

Você pode examinar o caminho para o diretório atual usando pwd, que significa Print Working Directory:

 pwd 

Inicie o Minecraft acessando Menu> Jogos> Minecraft Pi . Você precisará desta execução, mas voltará a ela mais tarde.

Abra o Python 3 em Menu> Programação> Python 3 (IDLE) . Este programa fornece uma maneira de executar comandos do Python e escrever programas.

Agora você pode digitar seus comandos em Python aqui, mas isso não é muito prático. Vá para Arquivo> Novo arquivo e, em seguida, Arquivo> Salvar e salve-o na pasta que você criou anteriormente. ( Documentos> Minecraft ). Vamos chamá-lo de " hello_world.py ". Você não precisa usar a extensão .py, isso será adicionado automaticamente, mas é uma boa prática.

Se você voltar para o terminal e navegar para a pasta Minecraft, deverá ver o arquivo que acabou de criar:

 cd Minecraft/ ls 

Você pode executar este arquivo como este:

 python hello_world 

Observe como “python” é tudo em minúsculas. Isso tem que ser antes do nome do arquivo, como diz ao Pi que o arquivo a seguir é Python, então ele deve ser executado como tal.

Volte para o editor Python e digite:

 print "Hello, World!" 

Salve este arquivo e execute-o novamente - você deverá ver “Hello, World!” Aparecer na linha de comando - puro! O comando print simplesmente diz ao Python para gerar o seguinte texto entre aspas duplas. Isso é bom, mas não muito útil para o Minecraft, vamos ligá-lo:

 from mcpi.minecraft import Minecraft mc = Minecraft.create() mc.postToChat("Hello, World!") 

Agora, se você salvar e executar esse arquivo, verá “Hello, World!” No jogo Minecraft. Vamos analisar o código:

 from mcpi.minecraft import Minecraft 

Esta linha informa ao Python que você deseja usar o código de outro arquivo. Este arquivo mcpi.minecraft foi desenvolvido para permitir o fácil controle do Minecraft.

 mc = Minecraft.create() 

Esta linha cria um objeto chamado "mc" (Minecraft). Você tem que criar isso para permitir a comunicação com o jogo Minecraft - não é suficiente apenas incluir o arquivo.

 mc.postToChat("Hello, World!") 

Finalmente, esta linha diz ao Minecraft para escrever algum texto para o chat. Tente mudar "Hello, World!" Para outra coisa e veja o que acontece, mas lembre-se de incluir as duaspas. Se você está tendo problemas de software, estes são alguns erros comuns de Python e Minecraft Pi:

  • AttributeError - este é um erro de digitação, como pinta ou prnt em vez de imprimir
  • NameError: o nome 'Minecraft' não está definido - lembre-se de importar os módulos que você precisa
  • NameError: o nome 'true' não está definido - o Python diferencia maiúsculas de minúsculas, mude para "True"
  • socket.error: [Errno 111] Conexão recusada - Verifique se o Minecraft está sendo executado

Projetos

Agora que você conhece os fundamentos do Python e do Minecraft, vamos criar alguns projetos interessantes. Todo o codecan pode ser baixado do Github.

Construtor de Ponte Automatizado

Minecraft-Pi-Bridge-Builder

Este programa irá efetivamente construir uma ponte sobre a água. Quando o jogador se aproxima de uma massa de água, o programa converterá vários blocos em pedra. Como o Minecraft usa um sistema de coordenadas, é muito fácil obter a localização do jogador, juntamente com o tipo de blocos ao redor do jogador. O Minecraft Pi é um pouco limitado, por isso não é possível atualizar vários blocos diferentes em massa. Você pode codificar esse comportamento facilmente, no entanto.

Crie um novo arquivo ( File> New File ) e salve-o como “ bridge_builder.py “.

 from mcpi.minecraft import Minecraft mc = Minecraft.create() # create Minecraft Object while True: x, y, z = mc.player.getPos() # store player position # store the surrounding blocks a = mc.getBlock(x, y - 1, z + 1) b = mc.getBlock(x, y - 1, z - 1) c = mc.getBlock(x - 1, y - 1, z) d = mc.getBlock(x + 1, y - 1, z) if a == 8 or a == 9 or b == 8 or b == 9 or c == 8 or c == 9 or d == 8 or d == 9: # 8 or 9 is water. Set surrounding blocks on floor to a solid (stone) if water is found mc.setBlocks(x, y - 1, z, x + 1, y - 1, z + 1, 1) mc.setBlocks(x, y - 1, z, x - 1, y - 1, z - 1, 1) mc.setBlocks(x, y - 1, z, x - 1, y - 1, z + 1, 1) mc.setBlocks(x, y - 1, z, x + 1, y - 1, z - 1, 1) 

Observe como o valor y está realmente olhando para y - 1. Este é o nível do chão. Se o valor de y fosse usado, o script procuraria blocos ao nível do joelho - não funcionaria muito bem! Mc.getBlock () retorna o id de um bloco para as coordenadas dadas. Como x, yez são as coordenadas do jogador, você pode adicionar ou subtrair delas para obter posições ao redor do jogador. Você não precisa usar os valores x, ye z, você pode usar qualquer número, mas você pode não saber como esse bloco específico se relaciona com o jogador - é melhor usar valores relativos ao jogador. Execute este arquivo na linha de comando e veja o que acontece.

Você deve ver que uma pequena área de terra se transforma em pedra uma vez que o jogador atinge um corpo de água. Não é ótimo - você é capaz de andar rápido o suficiente para causar um problema. Você poderia resolver isso convertendo um volume maior de água em terra. A parte final do método mc.setBlocks () é o id do bloco. Um é o id do bloco para pedra. Você pode mudar isso para madeira, grama ou qualquer coisa. Se você quisesse, você poderia facilmente converter isso em um design complexo - talvez uma ponte suspensa!

Botão Super Mineração

Minecraft-Pi-Super-Mine

Este exemplo fará um trabalho curto de mineração. Consiste em um botão físico que, quando pressionado, irá minerar 10 blocos ao cubo. Vamos começar com o botão. Semelhante aos botões do Arduino, você precisará de uma pequena quantidade de componentes eletrônicos, os quais devem ser encontrados em um kit inicial básico. O que há em seu Arduino Starter Kit? [Iniciantes no Arduino] O que há no seu Arduino Starter Kit? [Iniciantes em Arduino] Diante de uma caixa cheia de componentes eletrônicos, é fácil ficar sobrecarregado. Aqui está um guia para exatamente o que você encontrará no seu kit. Consulte Mais informação :

  • 1 x tábua de pão
  • 1 x interruptor momentâneo
  • Resistor de 1 x 220 ohm
  • Feminino> cabos de salto masculinos
  • Male> Male jump cables

Aqui está o circuito:

Conexão Pi-Button

Este resistor é chamado de resistor “pull down”. Isso ajuda a garantir que o que o Pi acha que é o botão pressionado, é realmente o botão que está sendo pressionado. Você não tem que usar isso, no entanto, é recomendado, pois você pode encontrar muito barulho e falsas leituras sem ele.

O botão é conectado ao pino de Saída de Entrada para Propósito Geral (GPIO) 14. Você pode usar qualquer pino GPIO, porém observe primeiro a pinagem, pois eles não são todos controláveis ​​a partir do Pi e variam ligeiramente entre os modelos.

Agora que o botão está conectado, é hora de testá-lo. Crie um novo arquivo e salve-o como “ button_test.py “. Adicione este código, salve-o e execute-o no Terminal.

 import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input while True: if GPIO.input(14) == True: # look for button press print "BUTTON WORKS!" # log result time.sleep(0.5) # wait 0.5 seconds 

Pressione Control + C para parar o script. Se tudo estiver funcionando corretamente, você deverá ver “BUTTON WORKS!” No Terminal. Observe como, como o módulo Minecraft, este teste está usando o RPi.GPIO e os módulos de tempo. Isso permite que o Pi acesse os pinos de hardware e forneça funções úteis de temporização.

Agora vamos terminar o resto do código. Crie um novo chamado “ super_mine.py “. Aqui está o código:

 import RPi.GPIO as GPIO import time from mcpi.minecraft import Minecraft mc = Minecraft.create() # create Minecraft Object GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input while True: if GPIO.input(14) == True: # look for button press x, y, z = mc.player.getPos() # read the player position mc.setBlocks(x, y, z, x + 10, y + 10, z + 10, 0) # mine 10 blocks mc.setBlocks(x, y, z, x - 10, y + 10, z - 10, 0) # mine 10 blocks time.sleep(0.5) # wait 0.5 seconds 

mc.player.getPos () retorna as coordenadas atuais dos jogadores, que são então armazenadas em x, y e z. O método setBlocks () diz ao Minecraft para preencher todos os blocos entre o início e o final com o seguinte bloco. Zero é o id do bloco para o ar. Você poderia mudar isso para outro id de bloco para preencher uma área. Você também pode alterar as coordenadas para +100 ou até mesmo +1000 blocos, mas o Pi pode começar a se debater se você ficar muito louco. Observe como y + 10 é o mesmo para ambas as linhas. Você poderia mudar isso para y - 10 se você quisesse remover blocos no subsolo.

Teleporte

Minecraft-Pi-Teleporting

Outro uso simples para este botão pode ser “teleportar”. O Minecraft Pi Api fornece uma maneira de definir a posição do jogador. O código a seguir irá “teleportar” o jogador para um local pré-definido:

 mc.player.setPos(0, 0, 0) 

Note que seu método aceita três parâmetros; x, yez para que você possa configurá-los para qualquer coisa para teleportar o jogador instantaneamente para esse local.

Crie uma cópia do arquivo super_mine ( File> Save Copy As ) e modifique-a, substituindo o if pelo seguinte:

 if GPIO.input(14) == True: # look for button press mc.player.setPos(0, 0, 0) # teleport player time.sleep(0.5) # wait 0.5 seconds 

Este arquivo deve ter esta aparência:

 import RPi.GPIO as GPIO from mcpi.minecraft import Minecraft import time mc = Minecraft.create() # create Minecraft Object GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input while True: if GPIO.input(14) == True: # look for button press mc.player.setPos(0, 0, 0) # teleport player time.sleep(0.5) # wait 0.5 seconds 

Salve-o como “ teleport.py ” e execute.

Você pode achar que o player fica preso dentro de alguns blocos ao usá-lo, nesse caso você precisará ajustar as coordenadas para um espaço aberto conhecido (o canto superior esquerdo da tela mostra sua localização atual).

Construa uma casa

Minecraft-Pi-House

Uma última tarefa para este botão é construir uma casa. Muito parecido com o exemplo de mineração rápida acima, isso simplesmente substituirá os blocos que cercam o jogador para fazer uma casa. Ids de bloco diferentes serão usados ​​para diferentes materiais (janela, paredes, etc.). Para tornar as coisas mais fáceis de codificar, um bloco sólido será criado e, em seguida, o interior removido (set block to air), isso criará um shell oco. Você pode adicionar extras como uma cama ou uma porta, mas o projeto Minecraft Pi é um pouco incompleto e, embora esses objetos funcionem quando colocados pelo player, eles não são brilhantes quando se usa o Python.

 from mcpi.minecraft import Minecraft import RPi.GPIO as GPIO import time mc = Minecraft.create() # create Minecraft Object GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.IN) # tell the Pi this pin is an input while True: if GPIO.input(14) == True: x, y, z = mc.player.getPos() mc.setBlocks(x + 2, y - 1, z + 2, x + 7, y + 3, z + 8, 5) # make shell mc.setBlocks(x + 3, y, z + 3, x + 6, y + 2, z + 7, 0) # remove inside mc.setBlocks(x + 2, y, z + 5, x + 2, y + 1, z + 5, 0) # make doorway mc.setBlocks(x + 4, y + 1, z + 8, x + 5, y + 1, z + 8, 102) # make window 1 mc.setBlocks(x + 4, y + 1, z + 2, x + 5, y + 1, z + 2, 102) # make window 2 mc.setBlocks(x + 7, y + 1, z + 4, x + 7, y + 1, z + 6, 102) # make window 3 

Salve isso como “ house.py ” e execute. Estando tudo bem, você deve ver uma pequena casa aparecer (você pode precisar se virar para encontrá-la). É muito simples, uma abertura e algumas janelas. Em teoria, não há limite para o tamanho ou complexidade de um edifício que você poderia construir.

Faça um Mini Jogo

Minecraft-Pi-Lava-Game

Em seguida, vamos fazer um mini-jogo! Isto será bastante simples, quando o jogador pisa em um bloco de areia, ele se transformará em lava após um período aleatório de tempo. Este é um bom jogo para fazer, pois você pode projetar seus próprios níveis ou modificá-lo para tornar as coisas mais difíceis. Você não precisará do botão para este exemplo.

Crie um novo arquivo e salve-o como “ mini_game.py “. Aqui está o código:

 from mcpi.minecraft import Minecraft import random import time mc = Minecraft.create() # create Minecraft Object while True: x, y, z = mc.player.getPos() block_under_player = mc.getBlock(x, y - 1, z) if block_under_player == 12: # player standing on sand, start the timer random_time = random.uniform(0.1, 2.5) # generate random number time.sleep(random_time); # wait mc.setBlock(x, y - 1, z, 11) # turn it into lava 

Este código é um bom começo na função random () : random.uniform (0.1, 2.5) irá gerar um número aleatório entre 0.1 (1/10 segundo) e 2, 5 (2 1/2 segundos). Aumentar esses números tornará o jogo mais fácil.

Experimente! Fique em um bloco de areia e em breve ele se transformará em lava. Esta poderia ser a base de um jogo mais complexo.

Faça um outro mini jogo

Minecraft-Pi-Mini-Game

A premissa para este jogo é simples - não fique de pé no chão de madeira quando o tempo acabar. O jogador é teletransportado para uma “arena”. Eles são forçados a ficar parados até o jogo começar. Uma vez iniciado, o piso se transformará em água quando o tempo acabar. O jogador deve estar em pé na zona de segurança (blocos de diamante) para sobreviver. Cada nível reduz o cronômetro em um segundo. Após cada nível de sucesso, a área segura fica maior. Confira o código abaixo:

 import time import random from mcpi.minecraft import Minecraft mc = Minecraft.create() # create Minecraft Object # clear area mc.setBlocks(-10, 1, -10, 25, 5, 25, 0) # create arena shell mc.setBlocks(0, 0, 0, 25, 10, 25, 17) # hollow out arena mc.setBlocks(1, 1, 1, 24, 10, 24, 0) # move player to arena mc.player.setPos(14, 25, 20) # teleport player # make them stay put # teleport player to start position every 1/10th second. # do this for 5 seconds then start the game time.sleep(2) total_wait = 0 mc.postToChat("Waiting to Start") while total_wait< 5: mc.player.setPos(14, 1, 20) # teleport player time.sleep(0.1) total_wait += 0.1 mc.postToChat("BEGIN!") # 10 levels for level in range(10): x, y, z = mc.player.getPos() level_time = 10 - level # reduce time by 1 second for each level mc.postToChat("Level - " + str(level + 1) + " start") # build floor mc.setBlocks(0, 0, 0, 25, 0, 25, 17) # make safe area safe_area_start = random.uniform(0, 22) safe_area_end = random.uniform(0, 22) mc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57) elapsed_time = 0 while elapsed_time< 10: x, y, z = mc.player.getPos() time.sleep(0.25) elapsed_time += 0.25 # check player is still on floor if y< 0.75: mc.postToChat("Game Over") break; else: # remove floor mc.setBlocks(-10, 0, -10, 25, 0, 25, 8) # put safe area back mc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57) time.sleep(2.5) continue break 

Salve isso como “ mini_game_2.py ” e dê uma corrida.

O Pi 2 tem alguns problemas de desempenho durante a execução do Minecraft. O gráfico de uso da Unidade Central de Processamento (CPU) ( canto superior direito ) nunca mostra nenhuma carga pesada, portanto, isso deve estar relacionado a um design e otimizações inadequadas por parte dos desenvolvedores. Esses problemas não estão relacionados à execução de código (como eles continuam quando o Python não está em execução), no entanto, eles são compostos por este mini-jogo. Se o seu Pi está realmente lutando você pode querer reduzir o tamanho da arena ou fazer overclock do seu Pi Not Enough Juice? Espremer seu Raspberry Pi por Overclocking Suco não é suficiente? Esprema o seu Raspberry Pi por Overclocking Se existe algum hardware lançado em 2012 com o qual você provavelmente se apaixonará, é o doce Raspberry Pi, um mini computador projetado e construído no Reino Unido que foi enviado para todo o mundo. .. Consulte Mais informação .

Detector de diamantes

Minecraft-Pi-Diamonds

Vamos fazer outro circuito. Isso usará um diodo emissor de luz (LED) para acender quando houver diamantes embaixo (dentro de 15 blocos). Aqui está o que você precisa:

  • 1 x tábua de pão
  • 1 x LED
  • Resistor de 1 x 220 ohm
  • Feminino> cabos de salto masculinos
  • Male> Male jump cables

Aqui está o circuito:

Ligação Pi-LED

Conecte o ânodo (perna longa) ao pino 14 GPIO. Esse pino age como + 5v. Ligue o cátodo (perna curta) ao chão.

Eu usei um brinquedo de minério barato e modifiquei-o removendo a tampa traseira e a eletrônica, então coloquei um LED embaixo dele. Você poderia facilmente tornar isso permanente com cola quente ou algo similar.

Minecraft-Ore-Toy

Guarde este código como “ diamonds.py “:

 import RPi.GPIO as GPIO import time from mcpi.minecraft import Minecraft mc = Minecraft.create() # create Minecraft Object led_pin = 14 # store the GPIO pin number GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use GPIO.setup(14, GPIO.OUT) # tell the Pi this pin is an output while True: # repeat indefinitely x, y, z = mc.player.getPos() for i in range(15): # look at every block until block 15 if mc.getBlock(x, y - i, z) == 56: GPIO.output(led_pin, True) # turn LED on time.sleep(0.25) # wait GPIO.output(led_pin, False) # turn LED off time.sleep(0.25) # wait 

Quando há um bloco de minério de diamante embaixo do jogador (dentro de 15 blocos) a luz piscará.

Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft Minecraft

Você fez algo legal com o Minecraft Pi? Deixe-me saber nos comentários o que você fez ou até onde você chegou nos jogos.

In this article