Aprende Python y Electrónica con Minecraft Pi Edition

¿Siempre quisiste aprender a codificar pero no sabías por dónde empezar? Aprende a controlar Minecraft en la Raspberry Pi usando Python y algunos dispositivos electrónicos simples.

¿Siempre quisiste aprender a codificar pero no sabías por dónde empezar?  Aprende a controlar Minecraft en la Raspberry Pi usando Python y algunos dispositivos electrónicos simples.
Anuncio

¿Siempre quisiste aprender a codificar pero no sabías por dónde empezar? Aprende a controlar Minecraft en la Raspberry Pi usando Python y algunos dispositivos electrónicos simples. Aquí está el resultado final:

Necesitará un Pi 2 o más reciente para este proyecto, y aunque podría completar la mayoría de estas tareas a través de la línea de comandos sobre Secure Shell (SSH), este tutorial se centrará en la codificación directamente en el Pi.

Placa base Raspberry Pi 3 Modelo B Placa madre Raspberry Pi 3 Modelo B Comprar ahora En Amazon $ 29.99

¿Nuevo en Minecraft? No se preocupe: aquí está nuestra Guía para principiantes de Minecraft. Guía para principiantes (a última hora) de Minecraft. Guía para principiantes (a última hora) para Minecraft. Si llega tarde a la fiesta, no se preocupe: esta extensa guía para principiantes lo tiene cubierto. Lee mas .

Introducción a Minecraft Pi

Minecraft-Pi-Menu

Minecraft para Raspberry Pi ha sido desarrollado para aprender y retocar (y es gratis). Viene con una interfaz de programación de aplicaciones (API) que proporciona una forma de que el código pueda comunicarse fácilmente con Minecraft. Es genial aprender a codificar en Python, así como comenzar a utilizar la electrónica. Electrónica para principiantes: 10 habilidades que debes conocer Electrónica para principiantes: 10 habilidades que debes conocer Muchos de nosotros nunca hemos tocado un soldador, pero hacer cosas puede increíblemente gratificante Aquí encontrarás diez de las habilidades básicas de electrónica de bricolaje para ayudarte a comenzar. Lee mas .

¿Qué es Python?

Python es un lenguaje de programación. Se interpreta, lo que significa que cuando ejecuta un archivo o programa de Python, primero la computadora debe hacer un poco de trabajo con el archivo. Las desventajas son que puede considerarse lento en comparación con los lenguajes compilados.

Los beneficios de los lenguajes interpretados son la velocidad de codificación y su amabilidad. No necesita decirle a la computadora qué datos desea almacenar, solo que desea almacenar algo y la computadora se dará cuenta de qué hacer. Hay excepciones, por supuesto, y esta es una vista algo simplificada, ¡sin embargo la programación debería ser divertida! Si comienzas a profundizar en los complejos detalles técnicos, puede ser un poco laborioso.

Python es sensible a mayúsculas y minúsculas Es importante saber esto, ya que Python no reconocerá los objetos, incluso si están deletreados correctamente si el caso es incorrecto. "Dosomething ()" no funcionará si el método se llama realmente "DoSomething ()". Python también usa indentación . Puede que a otros lenguajes de programación no les importe cuántas sangrías tenga su código, mientras que a Python sí le importa. Las sangrías se usan para decirle a Python a dónde pertenece el código. Otros idiomas pueden usar "Curly Braces" ({}) para agrupar el código; Python no los usa. Python usa un hash (#) para comentarios, y los comentarios se usan para decirle a otros desarrolladores o personas que miran el código qué hace una parte en particular, o por qué es necesaria. Python ignora cualquier cosa después de un hash.

Finalmente, hay dos versiones principales de Python: Python 2.7.x y Python 3.x. Hay algunas diferencias entre los dos (¿cuáles son las diferencias?). Este tutorial usará Python 3.

Configuración inicial

Proporcionar su Pi ya está configurado y funcionando Raspbian Cómo instalar un sistema operativo en su Raspberry Pi Cómo instalar un sistema operativo en su Raspberry Pi A continuación, le mostramos cómo instalar y ejecutar un nuevo sistema operativo en su Pi y cómo clonar su configuración perfecta para una recuperación de desastres rápida. Lea más, no se necesita mucha configuración inicial.

Abra la Terminal ( Menú> Accesorios> Terminal ) y ejecute este comando. Siempre es una buena práctica mantener actualizada la lista de repositorios, y esto descargará la última lista de programas (no descargará los programas por sí mismos, esto ayuda al Pi a saber qué programas son llamados y dónde encontrarlos).

sudo apt-get update 

Ahora actualiza el Pi (esto puede llevar un tiempo):

 sudo apt-get upgrade 

Python y Minecraft Pi ya están instalados, sin embargo, si Minecraft Pi no está instalado por algún motivo, es fácil de instalar. 5 maneras de instalar el software en Raspberry Pi. 5 maneras de instalar software en Raspberry Pi. Para hacer cualquier cosa con una Raspberry Pi, necesita saber cómo instalar un sistema operativo y el software para ejecutarlo. Si eres nuevo en Linux, esto puede ser desalentador. Lee mas :

 sudo apt-get install minecraft-pi 

Navegue a documentos y cree una nueva carpeta llamada "Minecraft":

 cd Documents/ mkdir Minecraft 

Puede ver el contenido de esta nueva carpeta:

 ls 

Aquí hay un consejo: si comienza a escribir y pulsa la tecla TAB, la línea de comando intentará completar automáticamente la declaración por usted.

Puede examinar la ruta al directorio actual usando pwd, que significa Print Working Directory:

 pwd 

Inicia Minecraft yendo a Menú> Juegos> Minecraft Pi . Necesitarás esta ejecución, pero volverás más tarde.

Abre Python 3 desde Menú> Programación> Python 3 (IDLE) . Este programa proporciona una forma de ejecutar comandos de Python y escribir programas.

Ahora podría escribir sus comandos de Python aquí, pero eso no es muy práctico. Vaya a Archivo> Nuevo archivo y luego a Archivo> Guardar y guárdelo en la carpeta que creó anteriormente. ( Documentos> Minecraft ). Llamémoslo " hello_world.py ". No tiene que usar la extensión .py, esto se agregará automáticamente, pero es una buena práctica.

Si vuelves a la terminal y navegas hacia la carpeta de Minecraft, deberías ver el archivo que acabas de crear:

 cd Minecraft/ ls 

Puede ejecutar este archivo de esta manera:

 python hello_world 

Observe cómo "python" es todo en minúsculas. Esto tiene que ser antes del nombre del archivo, ya que le dice al Pi que el siguiente archivo es Python, por lo que debe ejecutarse como tal.

Vuelve al editor de Python y escribe:

 print "Hello, World!" 

Guarde este archivo y ejecútelo de nuevo; ahora debería ver "¡Hola, mundo!" En la línea de comando, ¡limpio! El comando de impresión simplemente le dice a Python que emita el siguiente texto entre comillas dobles. Esto es bueno, pero no terriblemente útil para Minecraft, vamos a vincularlo:

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

Ahora, si guarda y ejecuta este archivo, debería aparecer "Hello, World!" En el juego de Minecraft. Desglosemos el código:

 from mcpi.minecraft import Minecraft 

Esta línea le dice a Python que quiere usar código de otro archivo. Este archivo mcpi.minecraft fue desarrollado para permitir un control fácil de Minecraft.

 mc = Minecraft.create() 

Esta línea crea un objeto llamado "mc" (Minecraft). Tienes que crear esto para permitir la comunicación con el juego de Minecraft: no basta con incluir el archivo.

 mc.postToChat("Hello, World!") 

Finalmente, esta línea le dice a Minecraft que escriba un texto en el chat. Intente cambiar "¡Hola, mundo!" A otra cosa y vea qué sucede, pero recuerde incluir ambas comillas dobles. Si tiene problemas de software, estos son algunos errores comunes de Python y Minecraft Pi:

  • AttributeError: este es un error tipográfico, como pint o prnt en lugar de imprimir
  • NameError: name 'Minecraft' no está definido. Recuerda importar los módulos que necesitas
  • NameError: name 'true' no está definido: Python distingue entre mayúsculas y minúsculas, cambia a "True"
  • socket.error: [Errno 111] Conexión rechazada - Asegúrate de que Minecraft esté ejecutándose

Proyectos

Ahora que conoce los conceptos básicos de Python y Minecraft, hagamos algunos proyectos geniales. Todo el código puede ser descargado desde Github.

Constructor de puentes automatizado

Minecraft-Pi-Bridge-Builder

Este programa construirá efectivamente un puente sobre el agua. Cuando el jugador se acerca a una masa de agua, el programa convertirá varios bloques en piedra. Como Minecraft usa un sistema de coordenadas, es muy fácil obtener la ubicación del jugador, junto con el tipo de bloques alrededor del jugador. Minecraft Pi es un poco limitado, por lo que no es posible actualizar múltiples bloques diferentes a granel. Sin embargo, puede codificar fácilmente este comportamiento usted mismo.

Cree un nuevo archivo ( Archivo> Nuevo archivo ) y guárdelo 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 cómo el valor y realmente está mirando y - 1. Este es el nivel del piso. Si se usara el valor de y, el script buscaría bloques a la altura de la rodilla, ¡no funcionaría muy bien! Mc.getBlock () devuelve la identificación de un bloque para las coordenadas dadas. Como x, y y z son las coordenadas del jugador, puede sumar o restar de ellas para obtener posiciones alrededor del jugador. No tiene que usar los valores x, y, z, puede usar cualquier número, sin embargo, es posible que no sepa cómo ese bloque en particular se relaciona con el jugador; es mejor usar valores relativos al jugador. Ejecute este archivo desde la línea de comando y vea qué sucede.

Debería ver que una pequeña área de terreno se convierte en piedra una vez que el jugador llega a una masa de agua. No es genial, puedes caminar lo suficientemente rápido como para causar un problema. Podrías resolver esto convirtiendo un mayor volumen de agua en tierra. La parte final del método mc.setBlocks () es la identificación del bloque. Uno es el ID de bloque para piedra. Puedes cambiar esto a madera, hierba o cualquier cosa. Si lo desea, podría convertirlo fácilmente en un diseño complejo, ¡tal vez un puente colgante!

Botón Súper Minería

Minecraft-Pi-Super-Mine

Este ejemplo reducirá el trabajo de minería. Consiste en un botón físico, que cuando se presiona, extrae 10 bloques en cubos. Comencemos con el botón. Al igual que con los botones en el Arduino, necesitará una pequeña cantidad de componentes electrónicos, todos los cuales se encuentran en un kit de inicio básico. ¿Qué hay en su Arduino Starter Kit? [Arduino Beginners] ¿Qué hay en tu Arduino Starter Kit? [Arduino Beginners] Frente a una caja llena de componentes electrónicos, es fácil sentirse abrumado. Aquí hay una guía para encontrar exactamente lo que encontrará en su kit. Lee mas :

  • 1 x Tablero
  • 1 x interruptor momentáneo
  • 1 x resistencia de 220 ohmios
  • Mujer> cables de salto macho
  • Male> Male jump cables

Aquí está el circuito:

Pi-Button-Connection

Esta resistencia se llama resistencia "desplegable". Ayuda a asegurar que lo que Pi piensa que es el botón que se está presionando, realmente es el botón que se está presionando. No tiene que usar esto, sin embargo, se recomienda, ya que puede encontrar mucho ruido y lecturas falsas sin él.

El botón está conectado a la clavija 14 de salida de entrada de propósito general (GPIO). Puede usar cualquier pin GPIO, sin embargo, primero mire la pinout, ya que no son todos controlables desde el Pi, y varían ligeramente entre los modelos.

Ahora que el botón está conectado, es hora de probarlo. Crea un nuevo archivo y guárdalo como " button_test.py ". Agregue este código, guárdelo y luego ejecútelo en la 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 

Presione Control + C para detener el script. Si todo funciona correctamente, debería ver "¡BOTÓN FUNCIONA!" En la Terminal. Observe cómo, al igual que el módulo de Minecraft, esta prueba utiliza el RPi.GPIO y los módulos de tiempo. Estos permiten que el Pi acceda a los pines de hardware y brinde funciones de temporización útiles.

Ahora terminemos el resto del código. Crea un nuevo archivo llamado " super_mine.py ". Aquí está el 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 () devuelve las coordenadas actuales de los jugadores, que luego se almacenan en x, y y z. El método setBlocks () le dice a Minecraft que complete todos los bloques entre el inicio y el final con el siguiente bloque. Zero es la identificación de bloque para el aire. Puede cambiar esto a otro ID de bloque para completar un área sólida. También puedes cambiar las coordenadas a +100 o incluso a +1000 bloques, sin embargo, el Pi puede comenzar a tener problemas si te vuelves loco. Observe cómo y + 10 es el mismo para ambas líneas. Podrías cambiar esto a y - 10 si quisieras eliminar bloques subterráneos.

Teletransportarse

Minecraft-Pi-Teleporting

Otro uso simple para este botón podría ser "teletransportarse". El Minecraft Pi Api proporciona una forma de establecer la posición del jugador. El siguiente código "teletransportará" el reproductor a una ubicación preestablecida:

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

Tenga en cuenta que su método acepta tres parámetros; x, y, z - para que pueda configurarlos para cualquier cosa, teletransportar instantáneamente al jugador a esa ubicación.

Cree una copia del archivo super_mine ( Archivo> Guardar copia como ) y modifíquela reemplazando el si con lo siguiente:

 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 archivo ahora debería verse así:

 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 

Guárdelo como " teleport.py " y ejecútelo.

Puede encontrar que el jugador se queda atascado dentro de algunos bloques al usar esto, en cuyo caso deberá ajustar las coordenadas a un espacio abierto conocido (la esquina superior izquierda de la pantalla muestra su ubicación actual).

Construir una casa

Minecraft-Pi-House

Una última tarea para este botón es construir una casa. Al igual que el ejemplo anterior de extracción rápida, esto simplemente reemplazará los bloques que rodean al jugador para hacer una casa. Se usarán diferentes identificadores de bloque para diferentes materiales (ventana, paredes, etc.). Para hacer las cosas más fáciles de codificar, se creará un bloque sólido, y luego se quitará el interior (se establecerá el bloque en el aire), esto creará un caparazón hueco. Puede agregar extras como una cama o puerta, sin embargo, el proyecto de Minecraft Pi es un poco incompleto, y mientras estos objetos funcionan cuando los coloca el jugador, no son brillantes cuando usan 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 

Guarde esto como " house.py " y ejecútelo. Si todo está bien, deberías ver aparecer una casa pequeña (es posible que debas darte la vuelta para encontrarla). Es muy simple, una apertura y algunas ventanas. En teoría, no hay límite para la construcción grande o compleja que podría construir.

Haz un mini juego

Minecraft-Pi-Lava-Game

¡Luego, hagamos un mini-juego! Esto será bastante simple, cuando el jugador pise un bloque de arena, se convertirá en lava después de una cantidad aleatoria de tiempo. Este es un buen juego para hacer, ya que puedes diseñar tus propios niveles o modificarlos para hacer las cosas más difíciles. No necesitarás el botón para este ejemplo.

Crea un nuevo archivo y guárdalo como " mini_game.py ". Aquí está el 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 es un buen iniciador de la función random () : random.uniform (0.1, 2.5) generará un número aleatorio entre 0.1 (1/10 de segundo) y 2.5 (2 1/2 segundos). Aumentar estos números hará que el juego sea más fácil.

¡Pruébalo! Párate sobre un bloque de arena, y pronto se convertirá en lava. Esta podría ser la base de un juego más complejo.

Hacer un otro mini juego

Minecraft-Pi-Mini-Game

La premisa de este juego es simple: no te quedes parado en el suelo de madera cuando se acabe el tiempo. El jugador es teletransportado a una "arena". Se ven obligados a quedarse quietos hasta que comience el juego. Una vez que se inicia, el piso se convertirá en agua una vez que se agote el tiempo. El jugador debe estar parado en la zona segura (bloques de diamantes) para sobrevivir. Cada nivel reduce el temporizador por un segundo. Después de cada nivel exitoso, el área segura aumenta de tamaño. Mira el código a continuación:

 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 

Guarde esto como " mini_game_2.py " y pruébelo .

El Pi 2 tiene algunos problemas de rendimiento al ejecutar Minecraft. El gráfico de uso de la Unidad Central de Procesamiento (CPU) ( esquina superior derecha ) nunca muestra ninguna carga pesada, por lo que esto se debe a un diseño y optimizaciones deficientes por parte de los desarrolladores. Estos problemas no están relacionados con la ejecución del código (ya que continúan cuando Python no se está ejecutando), sin embargo, se ven agravados por este mini juego. Si tu Pi realmente está luchando, es posible que quieras reducir el tamaño de la arena o hacer overclock en tu Pi Pi Not Enough Juice? Exprime tu Raspberry Pi con Overclocking No Basta con Jugo? Exprime tu Raspberry Pi por Overclocking Si hay algún hardware lanzado en 2012 del que te puedas enamorar, es la dulce como el azúcar Raspberry Pi, una mini computadora diseñada y construida en el Reino Unido que ha sido distribuida por todo el mundo. .. Lee mas .

Detector de diamantes

Minecraft-Pi-Diamonds

Hagamos otro circuito. Esto utilizará un diodo emisor de luz (LED) para iluminar cuando haya diamantes debajo (dentro de los 15 bloques). Esto es lo que necesitas:

  • 1 x Tablero
  • 1 x LED
  • 1 x resistencia de 220 ohmios
  • Mujer> cables de salto macho
  • Male> Male jump cables

Aquí está el circuito:

Pi-LED-Connection

Conecte el ánodo (pata larga) al pin 14 de GPIO. Este pin actúa como + 5v. Conecte el cátodo (pata corta) a tierra.

He usado un juguete de mineral barato y lo modifiqué quitando la cubierta posterior y los componentes electrónicos, luego coloqué un LED debajo. Podrías fácilmente hacer esto permanente con pegamento caliente o 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 

Cuando hay un bloque de mineral de diamantes debajo del jugador (dentro de 15 cuadras) la luz parpadeará.

Think Geek Minecraft Light-Up Diamond Ore Think Geek Minecraft Light-Up Diamond Ore Comprar ahora En Amazon $ 12.89

¿Has hecho algo genial con Minecraft Pi? Déjame saber en los comentarios lo que hiciste o lo lejos que lo hiciste en los juegos.

In this article