Anuncio

¿Siempre has querido aprender a codificar pero no sabías por dónde empezar? Aprende a controlar Minecraft en 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 a través de Secure Shell (SSH), este tutorial se centrará en la codificación directamente en el Pi.

¿Nuevo en Minecraft? No te preocupes, aquí está nuestro Guía para principiantes de Minecraft La guía para principiantes (recién llegados) de MinecraftSin embargo, si llegas tarde a la fiesta, no te preocupes: esta extensa guía para principiantes te tiene cubierto. Lee mas .

Introducción a Minecraft Pi

Menú Minecraft-Pi

Minecraft para Raspberry Pi ha sido desarrollado para aprender y jugar (y es gratis). Viene con una interfaz de programación de aplicaciones (API) que proporciona una forma para que el código se comunique fácilmente con Minecraft. Es brillante para aprender a codificar en Python, así como

instagram viewer
comenzando con la electrónica Electrónica para principiantes: 10 habilidades que debes saberMuchos de nosotros nunca hemos tocado un soldador, pero hacer cosas puede ser increíblemente gratificante. Aquí hay diez de las habilidades básicas de electrónica de bricolaje para ayudarlo a comenzar. Lee mas .

¿Qué es python?

Pitón Es un lenguaje de programación. Es interpretado, lo que significa que cuando ejecuta un archivo o programa Python, la computadora tiene que hacer un poco de trabajo en el archivo primero. Las desventajas son que puede considerarse lento en comparación con idiomas compilados.

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

Python distingue entre mayúsculas y minúsculas. Es importante saberlo, ya que Python no reconocerá objetos. incluso si están escritos correctamente Si el caso está mal. "Dosomething ()" no funcionará si el método se llama realmente "DoSomething ()". Python también usa sangría. Otros lenguajes de programación pueden no importarle cuántas sangrías tenga su código, mientras que Python hace cuidado. Las sangrías se usan para decirle a Python dónde pertenece el código. Otros idiomas pueden usar "llaves" ({}) para agrupar el código; Python no las 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 necesario. Python ignora cualquier cosa después de un hash.

Finalmente, hay dos versiones principales de Python: Python 2.7.xy 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á configurar y ejecutar Raspbian Cómo instalar un sistema operativo en una Raspberry PiAquí le mostramos cómo instalar un sistema operativo en su Raspberry Pi y cómo clonar su configuración perfecta para una recuperación rápida ante desastres. Lee mas , no se necesita mucha configuración inicial.

Terminal abierta (Menú> Accesorios> Terminal) y ejecuta 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 ellos mismos, esto ayuda a Pi a saber cómo se llaman los programas y dónde encontrarlos ellos).

sudo apt-get update. 

Ahora actualice el Pi (esto puede tomar 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 simple de instalar 5 formas de instalar software en Raspberry PiPara hacer cualquier cosa con una Raspberry Pi, necesitará 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 los documentos y cree una nueva carpeta llamada "Minecraft":

Documentos de cd / mkdir Minecraft

Puede ver el contenido de esta nueva carpeta:

ls

Aquí hay un consejo: si comienza a escribir y presiona 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 Imprimir directorio de trabajo:

pwd

Inicia Minecraft yendo a Menú> Juegos> Minecraft Pi. Necesitará que esto se ejecute, pero volverá más adelante.

Abra 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. Ir Archivo> Nuevo archivo y entonces 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, se agregará automáticamente, pero es una buena práctica.

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

cd Minecraft / ls

Puede ejecutar este archivo así:

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 a Pi que el siguiente archivo es Python, por lo que debe ejecutarse como tal.

Vuelva al editor de Python y escriba:

imprimir "¡Hola, mundo!"

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

de mcpi.minecraft import Minecraft mc = Minecraft.create () mc.postToChat ("¡Hola, mundo!")

Ahora, si guarda y ejecuta este archivo, debería ver "¡Hola, mundo!" aparecer en el juego de Minecraft. Desglosemos el código:

de mcpi.minecraft import Minecraft

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

mc = Minecraft.create ()

Esta línea crea un objeto llamado "mc" (Minecraft). Debes crear esto para permitir la comunicación con el juego de Minecraft; no es suficiente solo incluir el archivo.

mc.postToChat ("¡Hola, mundo!")

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 pinta o prnt en lugar de print
  • NameError: el nombre "Minecraft" no está definido; recuerde importar los módulos que necesita
  • NameError: el nombre "verdadero" no está definido - Python distingue entre mayúsculas y minúsculas, cambie a "Verdadero"
  • socket.error: [Errno 111] Conexión rechazada - Asegúrese de que Minecraft se esté ejecutando

Proyectos

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

Constructor de puentes automatizado

Minecraft-Pi-Bridge-Builder

Este programa construirá efectivamente un puente sobre el agua. Cuando el jugador se acerca a un cuerpo 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 varios bloques diferentes de forma masiva. Sin embargo, puede codificar fácilmente este comportamiento usted mismo.

Crear un nuevo archivo (Archivo> Nuevo archivo) y guárdelo como "bridge_builder.py“.

de mcpi.minecraft import Minecraft. mc = Minecraft.create () # crea objetos de Minecraft mientras es verdadero: x, y, z = mc.player.getPos () # almacena la posición del jugador # almacena los bloques circundantes 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) si a == 8 o a == 9 o b == 8 o b == 9 o c == 8 o c == 9 o d == 8 o d == 9: # 8 o 9 es agua. Establezca los bloques circundantes en el piso en un sólido (piedra) si se encuentra agua 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 de y realmente está mirando y - 1. Este es el nivel del piso. Si se usara el valor de y, el script buscaría bloques aproximadamente al nivel de la rodilla, ¡no funcionaría muy bien! Mc.getBlock () devuelve el id 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 y z, podría 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 comandos y vea qué sucede.

Deberías ver que una pequeña área de tierra se convierte en piedra una vez que el jugador alcanza un cuerpo de agua. No es genial: puedes caminar lo suficientemente rápido como para causar un problema. Podría 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. Podrías cambiar esto a madera, hierba o cualquier cosa. Si quisieras, podrías convertir esto fácilmente en un diseño complejo, ¡tal vez un puente colgante!

Súper botón de minería

Minecraft-Pi-Super-Mine

Este ejemplo hará un trabajo corto de minería. Consiste en un botón físico que, cuando se presiona, extraerá 10 bloques en cubos. Comencemos con el botón. Similar a los botones del Arduino, necesitará una pequeña cantidad de componentes electrónicos, todos los cuales se deben encontrar en un kit básico de inicio ¿Qué hay en su kit de inicio Arduino? [Principiantes de Arduino]Frente a una caja llena de componentes electrónicos, es fácil sentirse abrumado. Aquí hay una guía de lo que encontrará exactamente en su kit. Lee mas :

  • 1 x placa de prueba
  • 1 x interruptor momentáneo
  • 1 x resistencia de 220 ohmios
  • Cables de salto hembra> macho
  • Macho> Macho cables de salto

Aquí está el circuito:

Pi-Button-Connection

Esta resistencia se llama resistencia "pull down". Ayuda a asegurar que lo que el Pi piensa 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 al pin 14 de entrada de salida de uso general (GPIO). Puede usar cualquier pin GPIO, sin embargo, mire el pinout primero, ya que no todos son controlables desde el Pi, y varían ligeramente entre los modelos.

Ahora que el botón está conectado, es hora de probarlo. Cree un nuevo archivo y guárdelo como "button_test.py“. Agregue este código, guárdelo y ejecútelo en la Terminal.

importar RPi. GPIO como GPIO. tiempo de importación GPIO.setmode (GPIO.BCM) # dile a Pi qué encabezados usar. GPIO.setup (14, GPIO.IN) # dígale al Pi que este pin es una entrada mientras es Verdadero: si GPIO.input (14) == Verdadero: # busque el botón presione imprimir "¡EL BOTÓN FUNCIONA!" # log result time.sleep (0.5) # esperar 0.5 segundos. 

prensa Control + C para detener el guión Si todo funciona correctamente, debería ver "¡EL BOTÓN FUNCIONA!" en la terminal Observe cómo, al igual que el módulo Minecraft, esta prueba está utilizando el RPi. GPIO y módulos de tiempo. Estos permiten que el Pi acceda a los pines del hardware y proporciona funciones de temporización útiles.

Ahora terminemos el resto del código. Crear un nuevo archivo llamado "super_mine.py“. Aquí está el código:

importar RPi. GPIO como GPIO. tiempo de importación desde mcpi.minecraft import Minecraft mc = Minecraft.create () # crear Minecraft Object GPIO.setmode (GPIO.BCM) # decirle a Pi qué encabezados usar. GPIO.setup (14, GPIO.IN) # le dice al Pi que este pin es una entrada mientras es verdadero: if GPIO.input (14) == True: # busca el botón y presiona x, y, z = mc.player.getPos ( ) # lee el jugador 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) # mina 10 bloques de tiempo.sueño (0.5) # espera 0.5 segundos. 

mc.player.getPos () devuelve las coordenadas actuales de los jugadores, que luego se almacenan en x, y y z. los setBlocks () El método le dice a Minecraft que complete todos los bloques entre el inicio y el final con el siguiente bloque. Cero es la id de bloque para el aire. Puede cambiar esto a otra ID de bloque para llenar de forma sólida un área. También puedes cambiar las coordenadas a +100 o incluso +1000 bloques, sin embargo, el Pi puede comenzar a luchar si te vuelves demasiado loco. Observe cómo y + 10 es igual para ambas líneas. Puede cambiar esto a y - 10 si desea eliminar bloques bajo tierra.

Teletransporte

Minecraft-Pi-Teletransportación

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á" al jugador a una ubicación predeterminada:

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

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

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

if GPIO.input (14) == True: # busque el botón y presione mc.player.setPos (0, 0, 0) # teleport player player time.sleep (0.5) # wait 0.5 segundos. 

Este archivo debería verse así:

importar RPi. GPIO como GPIO. de mcpi.minecraft import Minecraft. import time mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # le dice al Pi qué encabezados usar. GPIO.setup (14, GPIO.IN) # le dice al Pi que este pin es una entrada mientras es verdadero: if GPIO.input (14) == True: # busque el botón presione mc.player.setPos (0, 0, 0) # teleport player time.sleep (0.5) # wait 0.5 segundos. 

Guárdelo como "teleport.py" y correr.

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

Construir una casa

Minecraft-Pi-House

Una última tarea para este botón es construir una casa. Al igual que en el ejemplo de minería rápida anterior, esto simplemente reemplazará los bloques que rodean al jugador para hacer una casa. Se usarán diferentes ID de bloque para diferentes materiales (ventanas, paredes, etc.). Para que las cosas sean más fáciles de codificar, se creará un bloque sólido y luego se quitará el interior (establecer el bloque en el aire), esto creará un caparazón hueco. Puede agregar extras como una cama o puerta, sin embargo, el proyecto Minecraft Pi está un poco incompleto, y aunque estos objetos funcionan cuando los coloca el jugador, no son brillantes cuando se usa Python.

de mcpi.minecraft import Minecraft. importar RPi. GPIO como GPIO. import time mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # le dice al Pi qué encabezados usar. GPIO.setup (14, GPIO.IN) # le dice al Pi que este pin es una entrada mientras es verdadero: 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) # hacer shell mc.setBlocks (x + 3, y, z + 3, x + 6, y + 2, z + 7, 0) # eliminar 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 + 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. 

Guarda esto como "house.py" y correr. Todo bien, deberías ver aparecer una pequeña casa (es posible que debas darte la vuelta para encontrarla). Es muy simple, una apertura y algunas ventanas. En teoría, no hay límite de cuán grande o complejo puede construir un edificio.

Hacer un mini juego

Minecraft-Pi-Lava-Game

¡A continuación, 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 de tiempo aleatoria. Este es un buen juego, ya que puedes diseñar tus propios niveles o modificarlo para hacer las cosas más difíciles. No necesitará el botón para este ejemplo.

Cree un nuevo archivo y guárdelo como "mini_game.py“. Aquí está el código:

de mcpi.minecraft import Minecraft. Importar al azar. tiempo de importación mc = Minecraft.create () # crear objeto de Minecraft mientras verdadero: x, y, z = mc.player.getPos () block_under_player = mc.getBlock (x, y - 1, z) si block_under_player == 12: # jugador parado en la arena, inicia el temporizador random_time = random.uniform (0.1, 2.5) # genera un número aleatorio time.sleep (tiempo aleatorio); # wait mc.setBlock (x, y - 1, z, 11) # conviértelo en lava. 

Este código es un buen comienzo en aleatorio() función: 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 facilitará el juego.

¡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 otro mini juego

Minecraft-Pi-Mini-Juego

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

tiempo de importación Importar al azar. desde mcpi.minecraft import Minecraft mc = Minecraft.create () # crear objeto Minecraft # despejar área. mc.setBlocks (-10, 1, -10, 25, 5, 25, 0) # crear arena shell. mc.setBlocks (0, 0, 0, 25, 10, 25, 17) # arena hueca. mc.setBlocks (1, 1, 1, 24, 10, 24, 0) # mueve al jugador a la arena. mc.player.setPos (14, 25, 20) # jugador de teletransporte # haz que se queden quietos. # jugador de teletransporte a la posición inicial cada 1/10 de segundo. # haz esto durante 5 segundos y luego inicia el juego. time.sleep (2) total_wait = 0. mc.postToChat ("Esperando para comenzar") mientras total_wait <5: mc.player.setPos (14, 1, 20) # teleport jugador time.sleep (0.1) total_wait + = 0.1 mc.postToChat ("¡COMIENZA!") # 10 niveles. para el nivel en el rango (10): x, y, z = mc.player.getPos () level_time = 10 - level # reduce el tiempo en 1 segundo para cada nivel mc.postToChat ("Level -" + str (nivel + 1) + "inicio") # construir piso mc.setBlocks (0, 0, 0, 25, 0, 25, 17) # hacer á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 while elapsed_time <10: x, y, z = mc.player.getPos () time.sleep (0.25) elapsed_time + = 0.25 # comprueba que el jugador todavía está en el piso si y <0.75: mc.postToChat ("Juego Durante las vacaciones; de lo contrario: # eliminar piso mc.setBlocks (-10, 0, -10, 25, 0, 25, 8) # volver a colocar el área segura mc.setBlocks (safe_area_start, 0, safe_area_end, safe_area_start + nivel, 0, safe_area_end + nivel, 57) time.sleep (2.5) continuar descanso.

Guarda esto como "mini_game_2.py"Y pruébalo.

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 una 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 el código en ejecución (ya que continúan cuando Python no se está ejecutando), sin embargo, se ven agravados por este mini juego. Si su Pi realmente está luchando, es posible que desee reducir el tamaño de la arena o overclockear tu Pi ¿No hay suficiente jugo? Exprima su Raspberry Pi haciendo overclockingSi hay algún hardware lanzado en 2012 del que probablemente te enamorarás, es la dulce Raspberry Pi, una mini computadora diseñada y construida en el Reino Unido que se ha enviado a todo el ... Lee mas .

Detector de diamantes

Minecraft-Pi-Diamantes

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

  • 1 x placa de prueba
  • 1 x LED
  • 1 x resistencia de 220 ohmios
  • Cables de salto hembra> macho
  • Macho> Macho cables de salto

Aquí está el circuito:

Pi-LED-Connection

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

Utilicé un juguete de mineral barato y lo modifiqué quitando la cubierta posterior y la electrónica, luego coloqué un LED debajo de él. Podría fácilmente hacer esto permanente con pegamento caliente o algo similar.

Minecraft-Mineral-Juguete

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

importar RPi. GPIO como GPIO. tiempo de importación desde mcpi.minecraft importar Minecraft mc = Minecraft.create () # crear objeto de Minecraft led_pin = 14 # almacenar el número de pin GPIO GPIO.setmode (GPIO.BCM) # decirle al Pi qué encabezados usar. GPIO.setup (14, GPIO.OUT) # dígale a Pi que este pin es una salida mientras es Verdadero: # repita indefinidamente x, y, z = mc.player.getPos () para i en el rango (15): # mire cada bloquear hasta bloque 15 si mc.getBlock (x, y - i, z) == 56: GPIO.output (led_pin, True) # enciende el LED time.sleep (0.25) # espera GPIO.output (led_pin, False) # enciende el LED tiempo libre dormido (0.25) # Espere. 

Cuando hay un bloque de mineral de diamante debajo del jugador (dentro de 15 bloques), la luz parpadeará.

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

Joe se graduó en Ciencias de la Computación de la Universidad de Lincoln, Reino Unido. Es un desarrollador de software profesional, y cuando no está volando drones o escribiendo música, a menudo se lo puede encontrar tomando fotos o produciendo videos.