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 aparelhos eletrônicos simples. Aqui está o resultado final:
Você precisará de um Pi 2 ou mais recente para este projeto e, embora possa concluir a maioria dessas tarefas via linha de comando pelo Secure Shell (SSH), este tutorial se concentrará na codificação diretamente no Pi.
Novo no Minecraft? Não se preocupe - aqui está a nossa Guia para iniciantes do Minecraft O (iniciante) Guia do iniciante para MinecraftSe você estiver atrasado para a festa, não se preocupe - este extenso guia para iniciantes já o cobriu. consulte Mais informação .
Introdução ao Minecraft Pi

O Minecraft para o Raspberry Pi foi desenvolvido para aprender e mexer (e é gratuito). Ele vem com uma interface de programação de aplicativos (API), que fornece uma maneira de o código falar facilmente com o Minecraft. É brilhante para aprender a codificar em Python, além de começando com eletrônica
Eletrônica para iniciantes: 10 habilidades que você precisa conhecerMuitos de nós nunca tocaram em um ferro de soldar - mas tornar as coisas incrivelmente gratificantes. Aqui estão dez das habilidades básicas em eletrônica DIY para ajudar você a começar. consulte Mais informação .O que é Python?
Pitão é uma linguagem de programação. Isto é interpretado, o que significa que, quando você executa um arquivo ou programa Python, o computador precisa primeiro trabalhar um pouquinho no arquivo. As desvantagens são que pode ser considerado lento quando comparado com linguagens compiladas.
Os benefícios das linguagens interpretadas são a velocidade da codificação e a facilidade de uso. Você não precisa avisar o computador o que dados que você deseja armazenar, apenas que deseja armazenar algo e o computador descobrirá o que fazer. Existem exceções, é claro, e essa é uma visão um pouco simplificada, porém a programação deve ser divertida! Se você começar a se aprofundar nos detalhes técnicos complexos, pode se tornar um pouco trabalhoso.
Python faz distinção entre maiúsculas e minúsculas. É importante saber, pois o Python não reconhece objetos mesmo que estejam escritas corretamente se o caso estiver errado. “Dosomething ()” não funcionará se o método for realmente chamado de “DoSomething ()”. 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 faz Cuidado. Os recuos são usados para informar ao Python onde o código pertence. Outros idiomas podem usar o "Curly Braces" ({}) para agrupar o código - o Python não os usa. O Python usa um hash (#) para comentários, e os comentários são usados para dizer a outros desenvolvedores ou pessoas que olham para o código o que uma parte específica faz ou por que é necessária. Python ignora qualquer coisa após 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
Fornecer seu Pi já está configuração e execução do Raspbian Como instalar um sistema operacional em um Raspberry PiVeja como instalar um sistema operacional no seu Raspberry Pi e como clonar sua configuração perfeita para uma rápida recuperação de desastres. consulte Mais informação , não há muita configuração inicial necessária.
Terminal aberto (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 mais recente de programas (ele não fará o download dos próprios programas, isso ajudará o Pi a saber como os programas são chamados e onde encontrar eles).
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 o Minecraft Pi não estiver instalado por qualquer motivo, é simples de instalar 5 maneiras de instalar o software no Raspberry PiPara fazer qualquer coisa com um Raspberry Pi, você precisará saber como instalar um sistema operacional e um software para executá-lo. Se você é novo no Linux, isso pode ser assustador. consulte Mais informação :
sudo apt-get instala minecraft-pi
Navegue até os documentos e crie uma nova pasta chamada "Minecraft":
Documentos em cd / mkdir Minecraft
Você pode ver o conteúdo desta nova pasta:
ls
Aqui está 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 indo para Menu> Jogos> Minecraft Pi. Você precisará dessa execução, mas voltará mais tarde.
Abra o Python 3 a partir de Menu> Programação> Python 3 (IDLE). Este programa fornece uma maneira de você executar comandos Python e escrever programas.
Agora você pode digitar seus comandos Python aqui, mas isso não é muito prático. Vamos para Arquivo> Novo Arquivo e depois Arquivo> Salvar e salve isso na pasta que você criou anteriormente. (Documentos> Minecraft). Vamos chamar de "hello_world.py“. Você não precisa usar a extensão .py, ela será adicionada automaticamente, mas é uma boa prática.
Se você voltar ao terminal e navegar até a pasta Minecraft, verá o arquivo que acabou de criar:
cd Minecraft / ls
Você pode executar este arquivo assim:
python hello_world
Observe como "python" está em letras minúsculas. Isso deve ser anterior ao nome do arquivo, pois indica ao Pi que o arquivo a seguir é Python, portanto deve ser executado como tal.
Volte para o editor Python e digite:
print "Olá, mundo!"
Salve este arquivo e execute-o novamente - agora você verá "Olá, mundo!" 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:
de mcpi.minecraft importar Minecraft mc = Minecraft.create () mc.postToChat ("Olá, mundo!")
Agora, se você salvar e executar este arquivo, deverá ver "Olá, mundo!" aparecer no jogo Minecraft. Vamos detalhar o código:
de mcpi.minecraft import Minecraft
Essa linha informa ao Python que você deseja usar o código de outro arquivo. Este arquivo mcpi.minecraft foi desenvolvido para permitir o controle fácil do Minecraft.
mc = Minecraft.create ()
Esta linha cria um objeto chamado "mc" (Minecraft). Você precisa criar isso para permitir a comunicação com o jogo Minecraft - não basta incluir o arquivo.
mc.postToChat ("Olá, mundo!")
Finalmente, esta linha diz ao Minecraft para escrever um texto para o chat. Tente mudar "Olá, mundo!" para outra coisa e veja o que acontece, mas lembre-se de incluir as aspas duplas. Se você está tendo problemas com o software, estes são alguns erros comuns do Python e Minecraft Pi:
- AttributeError - este é um erro de digitação, como pint ou prnt em vez de print
- NameError: o nome 'Minecraft' não está definido - lembre-se de importar os módulos necessários
- NameError: o nome 'true' não está definido - o Python faz distinção entre maiúsculas e minúsculas, altere para "True"
- socket.error: [Erro 111] Conexão recusada - Verifique se o Minecraft está sendo executado
Projetos
Agora que você conhece o básico do Python e do Minecraft, vamos fazer alguns projetos interessantes. Todo o codec pode ser baixado de Github.
Construtor de ponte automatizado

Este programa efetivamente construirá uma ponte sobre a água. Quando o jogador se aproxima de um corpo d'água, o programa converte 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 bloco ao redor do jogador. O Minecraft Pi é um pouco limitado, portanto, não é possível atualizar vários blocos diferentes em massa. No entanto, você pode codificar esse comportamento facilmente.
Crie um novo arquivo (Arquivo> Novo Arquivo) e salve-o como "bridge_builder.py“.
de mcpi.minecraft import Minecraft. mc = Minecraft.create () # cria um objeto Minecraft enquanto True: x, y, z = mc.player.getPos () # armazena posição do jogador # armazena os blocos ao redor 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) se a == 8 ou a == 9 ou b == 8 ou b == 9 ou c == 8 ou c == 9 ou d == 8 ou d == 9: # 8 ou 9 é água. Defina os blocos circundantes no chão como sólidos (pedra) se houver água 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.set Blocos (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 no nível do joelho - não funcionaria muito bem! Mc.getBlock () retorna o id de um bloco para as coordenadas fornecidas. Como x, ye z são as coordenadas do player, você pode adicionar ou subtrair deles para obter posições ao redor do player. Você não precisa usar os valores x, ye z, você pode usar qualquer número; no entanto, pode não saber como esse bloco específico se relaciona com o jogador - é melhor usar valores relativos ao jogador. Execute esse arquivo na linha de comando e veja o que acontece.
Você deve ver que uma pequena área do solo se transforma em pedra quando 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 () é a identificação do bloco. Um é o ID do bloco para pedra. Você pode mudar isso para madeira, grama ou qualquer coisa. Se você quisesse, poderia facilmente converter isso em um design complexo - talvez uma ponte suspensa!
Botão Super Mining

Este exemplo fará um breve trabalho de mineração. Consiste em um botão físico que, quando pressionado, extrai 10 blocos em cubos. Vamos começar com o botão. Semelhante aos botões do Arduino, você precisará de uma pequena quantidade de eletrônicos, os quais devem ser encontrados em um kit básico para iniciantes O que há no seu kit inicial do Arduino? [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á em seu kit. consulte Mais informação :
- 1 x tábua de pão
- 1 x interruptor momentâneo
- 1 x resistor de 220 ohm
- Fêmea> cabos de salto masculinos
- Masculino> Cabos de salto masculinos
Aqui está o circuito:

Esse resistor é chamado de resistor "pull down". Isso ajuda a garantir que o que o Pi pensa ser o botão pressionado, realmente é o botão pressionado. Você não precisa usar isso, no entanto, é recomendável, pois você pode encontrar muito ruído e leituras falsas sem ele.
O botão está conectado ao pino 14 da General Purpose Input Output (GPIO). Você pode usar qualquer pino GPIO, mas veja o pinagem primeiro, como eles não são todos controláveis do Pi e variam um pouco 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.
RPi de importação. GPIO como GPIO. tempo de importação GPIO.setmode (GPIO.BCM) # diz ao Pi quais cabeçalhos usar. GPIO.setup (14, GPIO.IN) # diga ao Pi que este pino é uma entrada enquanto True: se GPIO.input (14) == True: # procure o botão, pressione print "BOTÃO FUNCIONA!" # log result time.sleep (0.5) # aguarde 0.5 segundos.
pressione Control + C para parar o script. Se tudo estiver funcionando corretamente, você deverá ver "O BOTÃO FUNCIONA!" no terminal. Observe como, como o módulo Minecraft, este teste está usando o RPi. GPIO e módulos de tempo. Isso permite que o Pi acesse os pinos de hardware e forneça funções de temporização úteis.
Agora vamos terminar o resto do código. Crie um novo arquivo chamado "super_mine.py“. Aqui está o código:
RPi de importação. GPIO como GPIO. hora de importação. de mcpi.minecraft import Minecraft mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # informe ao Pi quais cabeçalhos usar. GPIO.setup (14, GPIO.IN) # diz ao Pi que este pino é uma entrada enquanto True: se GPIO.input (14) == True: # procure o botão, pressione x, y, z = mc.player.getPos ( ) # ler o jogador posição mc.setBlocks (x, y, z, x + 10, y + 10, z + 10, 0) # mine 10 blocos mc.setBlocks (x, y, z, x - 10, y + 10, z - 10, 0) # mina 10 blocos time.sleep (0,5) # espera 0,5 segundos.
mc.player.getPos () retorna as coordenadas atuais dos jogadores, que são armazenadas em x, ye z. o setBlocks () O método diz ao Minecraft para preencher todos os blocos entre o início e o fim com o seguinte bloco. Zero é o ID do bloco para o ar. Você pode alterar isso para outro ID de bloco para preencher uma área de maneira sólida. Você também pode alterar as coordenadas para +100 ou até +1000 blocos, no entanto, o Pi pode começar a sofrer se você ficar louco demais. Observe como y + 10 é o mesmo para as duas linhas. Você pode mudar para y-10 se quiser remover os blocos subterrâneos.
Teletransporte

Outro uso simples desse botão pode ser o "teleporte". O Minecraft Pi Api fornece uma maneira de definir a posição do jogador. O código a seguir irá "teleportar" o player para um local predefinido:
mc.player.setPos (0, 0, 0)
Observe que o método dele aceita três parâmetros; x, ye z - para que você possa configurá-los em qualquer coisa para teleportar instantaneamente o player para esse local.
Crie uma cópia do arquivo super_mine (Arquivo> Salvar cópia como) e modifique-o substituindo o if pelo seguinte:
se GPIO.input (14) == Verdadeiro: # procure o botão, pressione mc.player.setPos (0, 0, 0) # teleporte o jogador time.sleep (0,5) # aguarde 0,5 segundos.
Este arquivo agora deve ficar assim:
RPi de importação. GPIO como GPIO. de mcpi.minecraft import Minecraft. time de importação mc = Minecraft.create () # create Objeto Minecraft GPIO.setmode (GPIO.BCM) # informe ao Pi quais cabeçalhos usar. GPIO.setup (14, GPIO.IN) # diga ao Pi que este pino é uma entrada enquanto True: se GPIO.input (14) == True: # procure o botão pressione mc.player.setPos (0, 0, 0) # teleporte o jogador time.sleep (0.5) # wait 0.5 segundos.
Salve-o como "teleport.py" e corra.
Você pode achar que o player fica preso dentro de alguns blocos ao usá-lo. Nesse caso, você precisará ajuste as coordenadas para um espaço aberto conhecido (a parte superior esquerda da tela mostra sua localização).
Construir uma casa

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 ao redor do jogador para criar uma casa. Diferentes IDs de bloco serão usados para diferentes materiais (janelas, paredes, etc.). Para facilitar a codificação, um bloco sólido será criado e, em seguida, removido por dentro (coloque o bloco no ar), isso criará uma concha oca. Você pode adicionar extras como uma cama ou porta, no entanto, o projeto Minecraft Pi é um pouco incompleto e, embora esses objetos funcionem quando colocados pelo jogador, eles não são brilhantes ao usar o Python.
de mcpi.minecraft import Minecraft. RPi de importação. GPIO como GPIO. time de importação mc = Minecraft.create () # create Objeto Minecraft GPIO.setmode (GPIO.BCM) # informe ao Pi quais cabeçalhos usar. GPIO.setup (14, GPIO.IN) # diz ao Pi que este pino é uma entrada enquanto True: se 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 dentro de 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 + Se a resposta ajudou de alguma forma, por favor, marque como resposta, caso a sua dúvida não tenha sido solucionada, por favor, poste novamente. mc.setBlocks (x + 7, y + 1, z + 4, x + 7, y + 1, z + 6, 102) # make window 3.
Salve isso como "house.py" e corra. Tudo bem, você deve ver uma pequena casa aparecer (talvez você precise 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 Game

Em seguida, vamos fazer um mini-jogo! Isso será bastante simples, quando o jogador pisar em um bloco de areia, ele se tornará lava após um período aleatório de tempo. Este é um bom jogo, pois você pode criar seus próprios níveis ou modificá-lo para dificultar as coisas. 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:
de mcpi.minecraft import Minecraft. importação aleatória. tempo de importação mc = Minecraft.create () # cria um objeto Minecraft enquanto True: x, y, z = mc.player.getPos () block_under_player = mc.getBlock (x, y - 1, z) se block_under_player == 12: # jogador parado na areia, inicie o cronômetro random_time = random.uniform (0.1, 2.5) # gere um número aleatório time.sleep (tempo_ aleatório); # wait mc.setBlock (x, y - 1, z, 11) # transforme-o em lava.
Este código é um bom começo para o aleatória() função: random.uniform (0.1, 2.5) irá gerar um número aleatório entre 0,1 (1/10 de segundo) e 2,5 (2 1/2 segundos). Aumentar esses números facilitará o jogo.
Experimente! Fique em um bloco de areia, que em breve se tornará lava. Isso pode ser a base de um jogo mais complexo.
Faça outro mini-jogo

A premissa para este jogo é simples - não fique no chão de madeira quando o tempo acabar. O jogador é teleportado para uma "arena". Eles são forçados a ficar parados até o jogo começar. Uma vez iniciado, o piso ficará molhado quando o cronômetro acabar. O jogador deve estar em pé na zona segura (blocos de diamante) para sobreviver. Cada nível reduz o temporizador em um segundo. Após cada nível de sucesso, a área segura fica maior. Confira o código abaixo:
hora de importação. importação aleatória. de mcpi.minecraft importa Minecraft mc = Minecraft.create () # cria Minecraft Object # clear area. mc.setBlocks (-10, 1, -10, 25, 5, 25, 0) # cria arena shell. mc.setBlocks (0, 0, 0, 25, 10, 25, 17) # escavar arena. mc.setBlocks (1, 1, 1, 24, 10, 24, 0) # move o jogador para a arena. mc.player.setPos (14, 25, 20) # teleport player # faz com que fiquem parados. teleporte o jogador para começar a posição a cada 1/10 de segundo. # faça isso por 5 segundos e inicie o jogo. time.sleep (2) total_wait = 0. mc.postToChat ("Aguardando para iniciar") enquanto total_wait <5: mc.player.setPos (14, 1, 20) # teleporta o jogador time.sleep (0.1) total_wait + = 0.1 mc.postToChat ("BEGIN!") # 10 níveis. para nível no intervalo (10): x, y, z = mc.player.getPos () level_time = 10 - level # reduz o tempo em 1 segundo para cada nível mc.postToChat ("Level -" + str (nível + 1) + "início") # build floor mc.setBlocks (0, 0, 0, 25, 0, 25, 17) # criar área segura 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 enquanto elapsed_time <10: x, y, z = mc.player.getPos () time.sleep (0,25) elapsed_time + = 0,25 # verificar o jogador ainda está no chão se y <0,75: mc.postToChat ("Game Over ") pausa; else: # remove o chão mc.setBlocks (-10, 0, -10, 25, 0, 25, 8) # coloque a área segura de volta mc.setBlocks (safe_area_start, 0, safe_area_end, safe_area_start + level, 0, safe_area_end + level, 57) time.sleep (2.5) continue quebrando.
Salve isso como "mini_game_2.py”E faça uma corrida.
O Pi 2 tem alguns problemas de desempenho ao executar o 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 ao design e otimizações ruins dos desenvolvedores. Esses problemas não estão relacionados à execução de código (pois continuam quando o Python não está sendo executado), no entanto, eles são compostos por este mini-jogo. Se o seu Pi estiver realmente com problemas, você pode reduzir o tamanho da arena ou overclock seu Pi Suco não é suficiente? Espremer seu Raspberry Pi OverclockingSe há algum hardware lançado em 2012 pelo qual você provavelmente se apaixonará, é o Raspberry Pi doce como açúcar, um mini computador projetado e construído no Reino Unido e enviado em todo o mundo ... consulte Mais informação .
Diamond Detector

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
- 1 x resistor de 220 ohm
- Fêmea> cabos de salto masculinos
- Masculino> Cabos de salto masculinos
Aqui está o circuito:

Conecte o ânodo (perna longa) ao GPIO Pin 14. Este pino atua como + 5v. Conecte o cátodo (perna curta) ao terra.
Eu usei um brinquedo barato de minério e modifiquei-o removendo a tampa traseira e os eletrônicos e coloquei um LED embaixo dele. Você poderia facilmente tornar isso permanente com cola quente ou algo semelhante.

Salve este código como "diamonds.py“:
RPi de importação. GPIO como GPIO. hora de importação. from mcpi.minecraft import Minecraft mc = Minecraft.create () # create Minecraft Object led_pin = 14 # armazene o número do pino GPIO GPIO.setmode (GPIO.BCM) # informe ao Pi quais cabeçalhos usar. GPIO.setup (14, GPIO.OUT) # diga ao Pi que esse pino é uma saída enquanto True: # repita indefinidamente x, y, z = mc.player.getPos () para i no intervalo (15): # observe todos os bloquear até bloco 15 se mc.getBlock (x, y - i, z) == 56: GPIO.output (led_pin, True) # acende o LED time.sleep (0.25) # wait GPIO.output (led_pin, False) # acende o LED off time.sleep (0,25) # esperar.
Quando houver um bloco de minério de diamante embaixo do jogador (dentro de 15 blocos), a luz piscará.
Você fez algo legal com o Minecraft Pi? Deixe-me saber nos comentários o que você fez ou o quão longe você chegou nos jogos.
Joe é graduado em Ciência da Computação pela Universidade de Lincoln, Reino Unido. Ele é um desenvolvedor de software profissional e, quando não está pilotando drones ou escrevendo músicas, pode ser encontrado tirando fotos ou produzindo vídeos.