Aprende Python y Electrónica con Minecraft Pi Edition

  • Owen Little
  • 0
  • 4366
  • 1168
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á nuestra Guía para principiantes de Minecraft La guía para principiantes (tardía) de Minecraft La guía para principiantes (tardía) para Minecraft Sin embargo, si llegas tarde a la fiesta, no te preocupes, esta extensa guía para principiantes te tiene cubierto. .

Introducción a 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 para comenzar a usar la electrónica. Electrónica para principiantes: 10 habilidades que necesita saber Electrónica para principiantes: 10 habilidades que necesita saber Muchos de nosotros nunca hemos tocado un soldador, pero hacer cosas puede Increíblemente gratificante. Aquí hay diez de las habilidades básicas de electrónica de bricolaje para ayudarlo a comenzar. .

¿Qué es Python??

Python 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 al archivo primero. Las desventajas son que puede considerarse lento en comparación con los lenguajes 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 sabrá 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 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. “Hacer algo()” no funcionará si el método se llama realmente “Hacer algo()”. Python también usa sangría. Otros lenguajes de programación pueden no importarle cuántas sangrías tiene 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 código: Python no los utiliza. 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á configurado y ejecutando Raspbian Cómo instalar un sistema operativo en una Raspberry Pi Cómo instalar un sistema operativo en una Raspberry Pi A continuación se explica 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 . , 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 en sí, esto ayuda al Pi a saber qué programas se llaman y dónde encontrarlos).

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 alguna razón, es simple instalar 5 formas de instalar software en Raspberry Pi 5 formas de instalar software en Raspberry Pi Para hacer cualquier cosa con un Raspberry Pi, necesita saber cómo instalar un sistema operativo y el software para ejecutarlo. Si eres nuevo en Linux, esto puede ser desalentador. :

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

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

Abra Python 3 desde Menú> Programación> Python 3 (IDLE). Este programa proporciona una manera 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) Vamos a llamarlo “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

Date cuenta cómo “pitón” Es todo en minúsculas. Esto debe 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 nuevamente; 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. Analicemos el código:

desde mcpi.minecraft import Minecraft

Esta línea le dice a Python que desea usar el 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). Tienes que 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. Intenta 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 'true' no está definido - Python distingue entre mayúsculas y minúsculas, cambie a “Cierto”
  • 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 desde Github.

Constructor de puentes automatizado

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 múltiples bloques diferentes a granel. Sin embargo, puede codificar fácilmente este comportamiento usted mismo..

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

desde mcpi.minecraft importar Minecraft mc = Minecraft.create () # crear objetos de Minecraft mientras es verdadero: x, y, z = mc.player.getPos () # almacenar la posición del jugador # almacenar 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 comando 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: puede caminar lo suficientemente rápido como para causar un problema. Puede 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

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. De forma 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 básico de Arduino? [Principiantes de Arduino] ¿Qué hay en tu kit de inicio de 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. :

  • 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:

Esta resistencia se llama “derribar” resistor. 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. Entrada de salida de propósito general (GPIO). Puede usar cualquier pin GPIO, sin embargo, mire primero el pinout, ya que no 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.

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

prensa Control + C para detener el guión 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 está utilizando el RPi.GPIO y los módulos de tiempo. Esto permite que el Pi acceda a los pines de hardware y proporciona funciones de sincronización útiles.

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

importa RPi.GPIO como tiempo de importación GPIO desde mcpi.minecraft importa Minecraft mc = Minecraft.create () # crea Minecraft Object GPIO.setmode (GPIO.BCM) # dile a Pi qué encabezados usar GPIO.setup (14, GPIO.IN ) # dile al Pi que este pin es una entrada mientras es verdadero: si GPIO.input (14) == verdadero: # busca el botón y presiona x, y, z = mc.player.getPos () # lee la posición del jugador 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 dormido (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

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 será “teletransportarse” el jugador a una ubicación preestablecida:

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

importe RPi.GPIO como GPIO desde mcpi.minecraft importe Minecraft import time mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # dígale al 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 mc.player.setPos (0, 0, 0) # teleport player time.sleep (0.5) # espera 0.5 segundos 

Guárdalo como “teleport.py” y correr.

Puede encontrar que el jugador se atasca 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 ubicación actual).

Construir una casa

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 eliminará 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.

desde mcpi.minecraft import Minecraft import RPi.GPIO como GPIO import time mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # dile a Pi qué encabezados usar GPIO.setup (14, GPIO.IN ) # decirle 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) # 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 + 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 en cuanto al tamaño o complejidad de un edificio que podría construir..

Hacer un mini juego

¡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:

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 ) si block_under_player == 12: # jugador parado en la arena, inicie el temporizador random_time = random.uniform (0.1, 2.5) # generar un número aleatorio time.sleep (random_time); # esperar mc.setBlock (x, y - 1, z, 11) # convertirlo 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

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 un “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 parado 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 importación aleatoria desde mcpi.minecraft importar Minecraft mc = Minecraft.create () # crear objeto de Minecraft # área clara mc.setBlocks (-10, 1, -10, 25, 5, 25, 0) # crear arena shell mc. setBlocks (0, 0, 0, 25, 10, 25, 17) # ahueca arena mc.setBlocks (1, 1, 1, 24, 10, 24, 0) # mueve al jugador a arena mc.player.setPos (14 , 25, 20) # jugador de teletransporte # haz que se queden quietos # jugador de teletransporte para comenzar la posición cada 1/10 de segundo. # haga esto durante 5 segundos y luego inicie el juego time.sleep (2) total_wait = 0 mc.postToChat ("Esperando para comenzar") mientras 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 

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 está realmente luchando, ¿es posible que desee reducir el tamaño de la arena o overclockear su Pi? Exprima su Raspberry Pi haciendo overclocking ¿No tiene suficiente jugo? Exprima su Raspberry Pi haciendo overclocking Si hay algún hardware lanzado en 2012 del que probablemente se enamore, es el dulce Raspberry Pi, una mini computadora diseñada y construida en el Reino Unido que se ha enviado a todo el… .

Detector de 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:

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ías fácilmente hacer esto permanente con pegamento caliente o algo similar.

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

importa RPi.GPIO como tiempo de importación GPIO desde mcpi.minecraft importa Minecraft mc = Minecraft.create () # crea Minecraft Object led_pin = 14 # almacena el número de pin GPIO GPIO.setmode (GPIO.BCM) # dile a Pi qué encabezados usar GPIO.setup (14, GPIO.OUT) # dile a Pi que este pin es una salida mientras es Verdadero: # repite indefinidamente x, y, z = mc.player.getPos () para i en el rango (15): # mira cada bloquee hasta el bloque 15 si mc.getBlock (x, y - i, z) == 56: GPIO.output (led_pin, True) # enciende el LED time.sleep (0.25) # wait GPIO.output (led_pin, False) # apague el tiempo de LED.sleep (0.25) # wait 

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.




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.