Saiba python e eletrônica com minecraft edição pi
Você sempre quis aprender a código, mas não sabia por onde começar? Saiba como controlar Minecraft sobre o Raspberry Pi usando Python e alguns eletrônicos simples. Aqui está o resultado final:
Conteúdo
Você vai precisar de um Pi 2 ou mais recente para este projeto, e enquanto você poderia completar a maioria dessas tarefas via linha de comando sobre Secure Shell (SSH), este tutorial incidirá sobre codificação diretamente sobre o Pi.
Raspberry PI 3 Modelo B A1.2GHz 64-bit quad-core ARMv8 CPU, 1GB RAMRaspberry PI 3 Modelo B A1.2GHz 64-bit quad-core ARMv8 CPU, 1GB RAM1,2 GHz de 64 bits quad-core ARMv8, 1 GB de RAM Compre Agora No Amazon $ 30,39Novo para Minecraft? Não se preocupe - aqui está a nossa Guia do Minecraft Beginner.
Introdução ao Minecraft Pi
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 para o código de facilmente conversar com Minecraft. É brilhante para aprender como codificar em Python, bem como começando com a eletrônica.Eletrônica para iniciantes: 10 habilidades que você precisa saberEletrônica para iniciantes: 10 habilidades que você precisa saberMuitos de nós nunca sequer tocou um ferro de solda -, mas fazendo as coisas podem extremamente gratificante. Aqui está dez das habilidades mais básicas Eletrônica DIY para ajudar você a começar.consulte Mais informação
O que é Python?
Python é uma linguagem de programação. Isto é interpretado, o que significa que quando você executar um arquivo ou programa Python, o computador tem que fazer um pouco de trabalho para o arquivo primeiro. As desvantagens são que ele pode ser considerado lento quando comparado com linguagens compiladas.
Os benefícios de linguagens interpretadas são a velocidade de codificação e sua simpatia. Você não precisa dizer ao computador o que dados que deseja armazenar, só que você deseja armazenar algo eo computador irá descobrir o que fazer. Há exceções, é claro, e esta é uma visão um tanto simplificada, porém a programação deve ser divertido! Se você começar a cavar em detalhes técnicos complexos ela pode se tornar um pouco trabalhoso.
Video: Learn Programming and Electronics with Minecraft Pi
Python é sensível a maiúsculas. Isso é importante saber, como Python não vai reconhecer objetos mesmo se eles estão escritas corretamente se o caso é errado. “DoSomething ()” não vai funcionar se o método é realmente chamado “DoSomething ()”. Python também usa recuo. Outras linguagens de programação pode não se importar quantas travessões seu código tem, enquanto Python faz Cuidado. Travessões são utilizadas para contar Python onde o código pertence. Outros idiomas podem usar “Curly Suspensórios” ({}) para código de grupo - Python não usa estes. Python usa um hash (#) para comentários, e comentários são usados para contar outros desenvolvedores ou pessoas a ver o código que uma parte específica faz, ou porque ela é necessária. Python ignora qualquer coisa após um hash.
Finalmente, existem duas principais versões do Python - 2.7.x Python e Python 3.x. Existem algumas diferenças entre os dois (Quais são as diferenças?). Este tutorial vai usar Python 3.
Configuração inicial
Proporcionar o seu Pi já está instalação e funcionamento Raspbian, não há um monte de configuração inicial necessário.Como instalar um sistema operacional para seu Raspberry PiComo instalar um sistema operacional para seu Raspberry PiAqui está como se um novo sistema operacional instalado e funcionando em seu Pi - e como clonar sua configuração perfeita para recuperação de desastres rápida.consulte Mais informação
Abra o Terminal (Cardápio gt; Acessórios gt; terminal) E execute este comando. É sempre uma boa prática para manter a lista de repositórios até à data, e isso vai baixar a última lista de programas (que não vai baixar os próprios programas, o que ajuda o Pi saber o que os programas são chamados e onde encontrá-los).
sudo apt-get atualizar
Agora atualizar o Pi (pode demorar um pouco):
sudo apt-get atualizar
Python e Minecraft Pi já estão instalados, no entanto, se Minecraft Pi não é instalado por qualquer motivo, é simples de instalar:5 maneiras de instalar software no Raspberry Pi5 maneiras de instalar software no Raspberry PiPara fazer qualquer coisa com um Raspberry Pi, você 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 instalar minecraft-pi
Navegar para documentos e criar uma nova pasta chamada “Minecraft”:
Video: Minecraft - Star Wars - Coded on a Raspberry Pi
CD documentos /mkdir Minecraft
Você pode visualizar o conteúdo desta nova pasta:
ls
Aqui vai uma dica - se você começar a digitar e pressione a tecla TAB, a linha de comando tentará autocomplete a declaração para você.
Você pode examinar o caminho para o diretório atual usando pwd, que significa Diretório de trabalho da impressão:
pwd
Comece Minecraft, indo para Cardápio gt; jogos gt; Minecraft Pi. Você irá precisar dessa corrida, mas vai voltar para ele mais tarde.
Abrir Python 3 de Cardápio gt; Programação gt; Python 3 (IDLE). Este programa fornece uma maneira para que você possa executar comandos Python e escrever programas.
Agora você pode digitar o seu Python comandos aqui, mas isso não é muito prático. Vamos para Arquivo gt; Novo arquivo e depois Arquivo gt; Salve e salve este na pasta que criou anteriormente. (documentos gt; Minecraft). Vamos chamá-lo “hello_world.py“. Você não tem que usar a extensão .py, este será adicionado automaticamente, mas é uma boa prática.
Se você voltar para o terminal e navegue para a pasta Minecraft você deve ver o arquivo que você acabou de criar:
CD Minecraft/ls
Você pode executar esse arquivo como este:
hello_world python
Observe como “python” é tudo em minúsculas. Isso tem que ser antes do nome do arquivo, como diz o Pi que o seguinte arquivo é Python, por isso deve ser executado como tal.
Volte para o editor Python e digite:
impressão "Olá Mundo!"
Salve este arquivo e executá-lo novamente - você deve ver agora “Olá, mundo!” Aparecer na linha de comando - puro! O comando de impressão simplesmente diz Python para a saída o seguinte texto entre aspas duplas. Isso é bom, mas não muito útil para Minecraft, vamos ligá-lo para cima:
a partir de MCPI.Minecraft importar Minecraftmc = Minecraft.crio()mc.postToChat("Olá Mundo!")
Agora, se você salvar e executar esse arquivo, você deve ver “Olá, mundo!” Aparecer no jogo Minecraft. Vamos quebra o código:
a partir de MCPI.Minecraft importar Minecraft
Esta linha diz ao Python que deseja usar o código de outro arquivo. Este arquivo mcpi.minecraft foi desenvolvido para permitir fácil controle de Minecraft.
mc = Minecraft.crio()
Esta linha cria um objeto chamado de “mc” (Minecraft). Você tem que criar esta para permitir a comunicação para o jogo Minecraft - não é suficiente apenas para incluir o arquivo.
mc.postToChat("Olá Mundo!")
Finalmente, esta linha diz Minecraft para escrever algum texto para o chat. Tente alterar “Olá, mundo!” Para outra coisa e ver o que acontece, mas lembre-se de incluir tanto as aspas. Se você está tendo problemas de software, estes são alguns erros comuns Python e Minecraft Pi:
- AttributeError - este é um erro de digitação, como pinta ou PRNT em vez de impressão
- NameError: nome ‘Minecraft` não está definido - lembre-se de importar os módulos que você precisa
- NameError: nome ‘verdadeiro` não é definido - Python é sensível a maiúsculas, mude para‘True’
- socket.error: [Errno 111] Conexão recusada - Certifique-se de Minecraft está em execução
projetos
Agora que você sabe o básico de Python e Minecraft, vamos fazer alguns projetos interessantes. Todo o codecan ser baixado do Github.
Automated Ponte Builder
Este programa vai efetivamente construir uma ponte sobre a água. Quando o jogador fica perto de um corpo de água, o programa irá converter vários blocos de pedra. Como Minecraft usa um sistema de coordenadas, é muito fácil chegar a localização do jogador, juntamente com o tipo de blocos ao redor do jogador. Minecraft Pi é um pouco limitado, por isso não é possível atualizar vários blocos diferentes a granel. Você pode facilmente codificar esse comportamento mesmo, no entanto.
Criar um novo arquivo (Arquivo gt; Novo arquivo) E salve-o como “bridge_builder.py“.
a partir de MCPI.Minecraft importar Minecraftmc = Minecraft.crio() # Criar Minecraft Objetoenquanto Verdade:X, y, z = mc.jogador.getpos() # Posição do jogador loja# Armazenar os blocos circundantesuma = 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)E se uma == 8 ou uma == 9 ou b == 8 ou b == 9 ou c == 8 ou c == 9 ou d == 8 ou d == 9:# 8 ou 9 é água. Situado em torno blocos no chão para um sólido (pedra) se a água é encontradamc.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 foi utilizado o valor de y, o script iria olhar para os blocos na altura do joelho - que não iria funcionar muito bem! Mc.getBlock () retorna o id de um bloco para as coordenadas dadas. Como x, y, e z são as coordenadas do jogador, você pode adicionar ou subtrair-los para obter posições em torno do jogador. Você não tem que usar os x, y, e z valores, você poderia usar qualquer número, no entanto, você pode não saber como que determinado bloco relaciona-se com o jogador - é melhor usar valores relativos ao jogador. Executar este arquivo a partir da linha de comando e ver 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 é grande - você é capaz de andar rápido o suficiente para causar um problema. Você poderia resolver isso através da conversão de um volume maior de água para a terra. A parte final do método mc.setBlocks () é a ID de bloco. Um deles é o ID do bloco de pedra. Você poderia mudar isso para madeira, grama, ou qualquer coisa. Se você quisesse, você poderia facilmente converter isso em um projeto complexo - talvez uma ponte suspensa!
Botão Super Mining
Video: Using Python in Minecraft
Este exemplo vai fazer o trabalho de mineração. Ele consiste de um botão físico, que, quando pressionado, irá extrair 10 blocos cúbicos. Vamos começar com o botão. Similar aos botões do Arduino, você vai precisar de uma pequena quantidade de eletrônicos, os quais devem ser encontradas em uma kit básico de arranque:O que está em seu Arduino Starter Kit? [Arduino iniciantes]O que está em seu Arduino Starter Kit? [Arduino iniciantes]Confrontados com uma caixa cheia de componentes eletrônicos, é fácil de ser oprimido. Aqui está um guia para exatamente o que você vai encontrar no seu kit.consulte Mais informação
- 1 x Tábua
- 1 x interruptor instantâneo
- 1 x 220 ohm
- Fêmea gt; cabos de salto masculino
- Masculino gt; cabos de salto masculino
Aqui está o circuito:
Este resistor é chamado um resistor “puxar para baixo”. Ele ajuda a garantir que o que o Pi acha que é o botão ser pressionado, realmente é o botão ser pressionado. Você não tem que usar isso, no entanto, recomenda-se, como você pode encontrar lotes de ruído e leituras falsas sem ele.
O botão está ligado ao General Purpose Input Output (GPIO) pino 14. Você pode usar qualquer pino GPIO, no entanto olhar para a pinagem primeiro lugar, como eles não são todos controláveis a partir do Pi, e variam ligeiramente entre modelos.
Agora que o botão está ligado, é hora de testá-lo. Criar um novo arquivo e salvá-lo como “button_test.py“. Adicione este código, salve-o em seguida, executá-lo no Terminal.
importar RPI.GPIO Como GPIOimportar timeGPIO.setmode(GPIO.BCM) # Dizer a Pi que cabeçalhos de usarGPIO.configuração(14, GPIO.DENTRO) # Dizer a Pi este pino é uma entradaenquanto Verdade:E se GPIO.entrada(14) == Verdade: # Olhar para pressionar o botãoimpressão "OBRAS botão!" resultado log #Tempo.dormir(0,5) # Esperar 0,5 segundos
pressione Controlo + C para parar o script. Se tudo estiver funcionando corretamente, você deve ver “botão funciona!” No Terminal. Observe como, como o módulo de Minecraft, este teste está usando os módulos RPi.GPIO e hora. Estes permitem que o Pi para acessar os pinos de hardware e fornecer funções de temporização úteis.
Agora vamos terminar o resto do código. Criar um novo filecalled “super_mine.py“. Aqui está o código:
importar RPI.GPIO Como GPIOimportar Tempoa partir de MCPI.Minecraft importar Minecraftmc = Minecraft.crio() # Criar Minecraft ObjetoGPIO.setmode(GPIO.BCM) # Dizer a Pi que cabeçalhos de usarGPIO.configuração(14, GPIO.DENTRO) # Dizer a Pi este pino é uma entradaenquanto Verdade:E se GPIO.entrada(14) == Verdade: # Olhar para pressionar o botãoX, y, z = mc.jogador.getpos() # Ler a posição do jogadormc.setBlocks(X, y, z, X + 10, y + 10, z + 10, 0) # Mina 10 blocos mc.setBlocks(X, y, z, X - 10, y + 10, z - 10, 0) # Mina 10 blocosTempo.dormir(0,5) # Esperar 0,5 segundos
mc.player.getPos () retorna os jogadores coordenadas actuais, os quais são então armazenados em x, y, e z. o setBlocks () método diz Minecraft para preencher todos os blocos entre o início eo fim com o bloco seguinte. Zero é o bloco-id para o ar. Você poderia mudar isso para um outro bloco-id para preenchimento sólido uma área. Você também pode alterar as coordenadas para +100 ou mesmo mil blocos, no entanto, o Pi pode começar a lutar, se você ficar muito louco. Observe como y + 10, é a mesma para ambas as linhas. Você poderia mudar isso para y - 10 se você queria remover blocos subterrâneo.
teleporting
Outro uso simples para este botão pode ser a “teleportar”. O Minecraft Pi API fornece uma maneira de definir a posição do jogador. O código a seguir “teleportar” o jogador a um local predefinido:
mc.jogador.setpos(0, 0, 0)
Note-se que o seu método aceita três x Parametros-, y, e z - para que você possa definir estes a qualquer coisa de se teletransportar instantaneamente o jogador para esse local.
Crie uma cópia do arquivo super_mine (Arquivo gt; Salvar cópia como) E modificá-lo, substituindo o caso com o seguinte:
E se GPIO.entrada(14) == Verdade: # Olhar para pressionar o botãomc.jogador.setpos(0, 0, 0) # Jogador teleporteTempo.dormir(0,5) # Esperar 0,5 segundos
Este arquivo deve agora olhar como este:
importar RPI.GPIO Como GPIOa partir de MCPI.Minecraft importar Minecraftimportar timemc = Minecraft.crio() # Criar Minecraft ObjetoGPIO.setmode(GPIO.BCM) # Dizer a Pi que cabeçalhos de usarGPIO.configuração(14, GPIO.DENTRO) # Dizer a Pi este pino é uma entradaenquanto Verdade:E se GPIO.entrada(14) == Verdade: # Olhar para pressionar o botãomc.jogador.setpos(0, 0, 0) # Jogador teleporteTempo.dormir(0,5) # Esperar 0,5 segundos
Salve-o como “teleport.py" e corra.
Você pode encontrar o jogador fica preso dentro de alguns blocos ao usar este, caso em que você precisa para ajustar as coordenadas para um espaço aberto conhecido (no canto superior esquerdo da tela mostra a sua localização actual).
Construir uma casa
Uma última tarefa para este botão é para construir uma casa. Muito parecido com o exemplo de mineração rápida acima, isso vai simplesmente substituir blocos que cercam o jogador para fazer uma casa. Diferentes bloco-ids vai ser usado para diferentes materiais (janelas, paredes, etc). Para tornar as coisas mais fáceis de código, um bloco sólido será criado, e depois o interior removido (definido bloco ao ar), isso vai criar uma concha vazia. Você pode adicionar extras, como uma cama ou porta, no entanto o projeto Minecraft Pi é um pouco incompleta, e enquanto esses objetos funciona quando colocada pelo jogador, eles não são brilhantes quando utilizar Python.
a partir de MCPI.Minecraft importar Minecraftimportar RPI.GPIO Como GPIOimportar timemc = Minecraft.crio() # Criar Minecraft ObjetoGPIO.setmode(GPIO.BCM) # Dizer a Pi que cabeçalhos de usarGPIO.configuração(14, GPIO.DENTRO) # Dizer a Pi este pino é uma entradaenquanto Verdade:E se GPIO.entrada(14) == Verdade:X, y, z = mc.jogador.getpos()mc.setBlocks(X + 2, y - 1, z + 2, X + 7, y + 3, z + 8, 5) # Make shellmc.setBlocks(X + 3, y, z + 3, X + 6, y + 2, z + 7, 0) # Remover dentromc.setBlocks(X + 2, y, z + 5, X + 2, y + 1, z + 5, 0) # Make portamc.setBlocks(X + 4, y + 1, z + 8, X + 5, y + 1, z + 8, 102) # Make janela 1mc.setBlocks(X + 4, y + 1, z + 2, X + 5, y + 1, z + 2, 102) # Make janela 2mc.setBlocks(X + 7, y + 1, z + 4, X + 7, y + 1, z + 6, 102) # Make janela 3
Salvar como “house.py" e corra. Se tudo correr bem, você deve ver aparecer uma pequena casa (você pode precisar de se virar para encontrá-lo). É muito simples, uma abertura e algumas janelas. Em teoria, não há limite para o quão grande ou complexo de um edifício que você poderia construir.
Fazer um jogo de Mini
Em seguida, vamos fazer um mini-jogo! Isso vai ser bastante simples, quando o jogador pisa sobre um bloco de areia, ele vai se transformar em lava após um período de tempo aleatório. Este é um bom jogo para fazer, como você poderia projetar seus próprios níveis ou modificá-lo para fazer as coisas mais difíceis. Você não vai precisar o botão para este exemplo.
Criar um novo arquivo e salvá-lo como “mini_game.py“. Aqui está o código:
a partir de MCPI.Minecraft importar Minecraftimportar aleatóriaimportar timemc = Minecraft.crio() # Criar Minecraft Objetoenquanto Verdade:X, y, z = mc.jogador.getpos()block_under_player = mc.getBlock(X, y - 1, z)E se block_under_player == 12:# Jogador que está na areia, iniciar o temporizadorrandom_time = aleatória.uniforme(0,1, 2,5) # Gerar número aleatórioTempo.dormir(random_time)- # esperarmc.setBlock(X, y - 1, z, 11) # Transformá-lo em lava
Este código é um bom começo na aleatória() função: random.uniform (0.1, 2.5) vai gerar um número aleatório entre 0,1 (1/10 segundo) e 2.5 (2 1/2 segundos). Aumentando esses números vai tornar o jogo mais fácil.
Experimente! Ficar em um bloco de areia, e ele vai logo se transformar em lava. Esta poderia ser a base de um jogo mais complexo.
Fazer uma outra mini-jogo
A premissa para este jogo é simples - não estar de pé no chão de madeira quando o tempo se esgote. O jogador é teleportado para uma “arena”. Eles são forçados a ficar parado até que o jogo começa. Uma vez iniciado, o chão vai virar à água uma vez que o tempo se esgote. O jogador deve estar em pé na zona segura (blocos de diamante) para sobreviver. Cada nível reduz o temporizador de um segundo. Depois de cada nível de sucesso da área de segurança fica maior. Confira o código abaixo:
importar Tempoimportar aleatóriaa partir de MCPI.Minecraft importar Minecraftmc = Minecraft.crio() # Criar Minecraft Objeto# Área claramc.setBlocks(-10, 1, -10, 25, 5, 25, 0)# Criar shell Arenamc.setBlocks(0, 0, 0, 25, 10, 25, 17)# Escavar Arenamc.setBlocks(1, 1, 1, 24, 10, 24, 0)# Movimento jogador a Arenamc.jogador.setpos(14, 25, 20) # Jogador teleporte # Fazê-los ficar parado# Teleporto jogador para a posição inicial a cada 1 / 10th segundo.# Fazer isso por 5 segundos, em seguida, iniciar o jogoTempo.dormir(2)total_wait = 0mc.postToChat("Esperando para começar")enquanto total_wait lt; 5:mc.jogador.setpos(14, 1, 20) # Jogador teleporteTempo.dormir(0,1)total_wait += 0,1mc.postToChat("INÍCIO!")# 10 níveispara nível dentro alcance(10):X, y, z = mc.jogador.getpos()level_time = 10 - nível # Reduzir o tempo de 1 segundo para cada nívelmc.postToChat("Nível - " + str(nível + 1) + " começar")# Chão construçãomc.setBlocks(0, 0, 0, 25, 0, 25, 17)# Tornar a área segurasafe_area_start = aleatória.uniforme(0, 22)safe_area_end = aleatória.uniforme(0, 22)mc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + nível, 0, safe_area_end + nível, 57)tempo gasto = 0enquanto tempo gasto lt; 10:X, y, z = mc.jogador.getpos()Tempo.dormir(0,25)tempo gasto += 0,25jogador # cheque ainda está no chãoE se y lt; 0,75:mc.postToChat("Fim de jogo")pausa-outro:# Chão removemc.setBlocks(-10, 0, -10, 25, 0, 25, 8)# Colocá área segura de voltamc.setBlocks(safe_area_start, 0, safe_area_end, safe_area_start + nível, 0, safe_area_end + nível, 57)Tempo.dormir(2,5)continuarpausa
Salvar como “mini_game_2.py”E dar-lhe uma corrida.
O Pi 2 tem alguns problemas de desempenho enquanto executando Minecraft. A Unidade Central de Processamento (CPU) gráfico de uso (canto superior direito) Nunca mostra qualquer carga pesada, de modo que este deve ser para baixo a má concepção e otimizações pelos desenvolvedores. Estas questões não estão relacionadas com a execução de código (como eles continuam quando Python não está em execução), porém eles são agravados por este mini-jogo. Se o seu Pi é realmente lutando você pode querer reduzir o tamanho da arena ou overclock seu Pi.Não bastante suco? Esprema seus Raspberry Pi por OverclockingNão bastante suco? Esprema seus Raspberry Pi por OverclockingSe houver qualquer hardware lançado em 2012, que é provável que você se apaixonar, é o doce-como-açúcar Raspberry Pi, um mini computador projetado e construído no Reino Unido que vendeu em todo o ...consulte Mais informação
diamante Detector
Vamos fazer outro circuito. Isto irá usar um Light Emitting Diode (LED) para iluminar quando existem diamantes debaixo (dentro de 15 blocos). Aqui está o que você precisa:
- 1 x Tábua
- 1 x LED
- 1 x 220 ohm
- Fêmea gt;