Annuncio pubblicitario

Hai sempre desiderato imparare a programmare ma non sapevi da dove iniziare? Scopri come controllare Minecraft su Raspberry Pi utilizzando Python e alcuni dispositivi elettronici semplici. Ecco il risultato finale:

Avrai bisogno di un Pi 2 o più recente per questo progetto e mentre potresti completare la maggior parte di queste attività tramite la riga di comando su Secure Shell (SSH), questo tutorial si concentrerà sulla codifica direttamente sul Pi.

Nuovo su Minecraft? Non ti preoccupare, ecco il nostro Guida per principianti di Minecraft La guida per principianti (ritardatari) a MinecraftSe sei in ritardo alla festa, però, non ti preoccupare: questa ampia guida per principianti ti copre. Leggi di più .

Introduzione a Minecraft Pi

Minecraft-Pi-Menu

Minecraft per il Raspberry Pi è stato sviluppato per l'apprendimento e il ritocco (ed è gratuito). Viene fornito con un'API (Application Programming Interface) che consente al codice di comunicare facilmente con Minecraft. È geniale per imparare a programmare in Python e anche

instagram viewer
iniziare con l'elettronica Elettronica per principianti: 10 abilità che devi conoscereMolti di noi non hanno mai nemmeno toccato un saldatore, ma rendere le cose incredibilmente gratificanti. Ecco dieci delle più elementari competenze di elettronica fai-da-te per aiutarti a iniziare. Leggi di più .

Che cos'è Python?

Pitone è un linguaggio di programmazione. È interpretato, il che significa che quando si esegue un file o un programma Python, il computer deve prima eseguire un po 'di lavoro sul file. Gli svantaggi sono che può essere considerato lento rispetto a lingue compilate.

I vantaggi delle lingue interpretate sono la velocità della codifica e la loro cordialità. Non è necessario dirlo al computer che cosa dati che vuoi archiviare, solo che vuoi archiviare qualcosa e il computer capirà cosa fare. Ci sono eccezioni, ovviamente, e questa è una visione un po 'semplificata, tuttavia la programmazione dovrebbe essere divertente! Se inizi a scavare nei dettagli tecnici complessi, può diventare un po 'laborioso.

Python fa distinzione tra maiuscole e minuscole. Questo è importante da sapere, poiché Python non riconoscerà gli oggetti anche se sono scritti correttamente se il caso è sbagliato. "Dosomething ()" non funzionerà se il metodo in realtà è chiamato "DoSomething ()". Python usa anche il rientro. Ad altri linguaggi di programmazione potrebbe non interessare il numero di rientri del codice, mentre Python fa cura. I rientri sono usati per dire a Python dove appartiene il codice. Altre lingue possono usare "Curly Braces" ({}) per raggruppare il codice - Python non li usa. Python usa un hash (#) per i commenti, e i commenti vengono usati per dire ad altri sviluppatori o persone che guardano il codice cosa fa una particolare parte o perché è necessaria. Python ignora qualsiasi cosa dopo un hash.

Infine, ci sono due versioni principali di Python: Python 2.7.xe Python 3.x. Ci sono alcune differenze tra i due (quali sono le differenze?). Questo tutorial utilizzerà Python 3.

Configurazione iniziale

Fornire il tuo Pi è già configurare ed eseguire Raspbian Come installare un sistema operativo su un Raspberry PiEcco come installare un sistema operativo sul tuo Raspberry Pi e come clonare la configurazione perfetta per un rapido ripristino di emergenza. Leggi di più , non sono necessarie molte impostazioni iniziali.

Open Terminal (Menu> Accessori> Terminale) ed esegui questo comando. È sempre buona norma tenere aggiornato l'elenco dei repository e questo scaricherà l'elenco più recente dei programmi (non scaricherà i programmi stessi, questo aiuta il Pi a sapere quali programmi vengono chiamati e dove trovare loro).

sudo apt-get update. 

Ora aggiorna il Pi (potrebbe richiedere del tempo):

sudo apt-get upgrade. 

Python e Minecraft Pi sono già installati, tuttavia se Minecraft Pi non è installato per nessun motivo, è semplice da installare 5 modi per installare il software su Raspberry PiPer fare qualsiasi cosa con un Raspberry Pi, devi sapere come installare un sistema operativo e il software per eseguirlo. Se non conosci Linux, questo può essere scoraggiante. Leggi di più :

sudo apt-get install minecraft-pi

Passa ai documenti e crea una nuova cartella denominata "Minecraft":

cd Documenti / mkdir Minecraft

Puoi visualizzare il contenuto di questa nuova cartella:

ls

Ecco un suggerimento: se inizi a digitare e premi il tasto TAB, la riga di comando tenterà di completare automaticamente l'istruzione per te.

Puoi esaminare il percorso della directory corrente usando pwd, che sta per Print Working Directory:

pwd

Avvia Minecraft andando a Menu> Giochi> Minecraft Pi. Avrai bisogno di questo correre, ma ci torneremo più tardi.

Apri Python 3 da Menu> Programmazione> Python 3 (IDLE). Questo programma consente di eseguire comandi Python e scrivere programmi.

Ora puoi digitare qui i tuoi comandi Python, ma non è molto pratico. Vai a File> Nuovo file e poi File> Salva e salvalo nella cartella che hai creato in precedenza. (Documenti> Minecraft). Chiamiamolo "hello_world.py“. Non è necessario utilizzare l'estensione .py, questa verrà aggiunta automaticamente, ma è una buona pratica.

Se torni al terminale e navighi nella cartella di Minecraft, dovresti vedere il file che hai appena creato:

cd Minecraft / ls

Puoi eseguire questo file in questo modo:

python hello_world

Notate come "python" sia tutto minuscolo. Questo deve essere prima del nome del file, in quanto indica al Pi che il seguente file è Python, quindi dovrebbe essere eseguito come tale.

Torna all'editor Python e digita:

stampa "Ciao, mondo!"

Salvare questo file ed eseguirlo di nuovo - ora dovresti vedere "Hello, World!" appare nella riga di comando - pulito! Il comando print dice semplicemente a Python di produrre il seguente testo tra virgolette. Questo è buono, ma non estremamente utile per Minecraft, collegiamolo:

da mcpi.minecraft import Minecraft mc = Minecraft.create () mc.postToChat ("Ciao, mondo!")

Ora se salvi ed esegui questo file, dovresti vedere "Ciao, mondo!" appare nel gioco Minecraft. Analizziamo il codice:

da mcpi.minecraft import Minecraft

Questa riga dice a Python che vuoi usare il codice di un altro file. Questo file mcpi.minecraft è stato sviluppato per consentire un facile controllo di Minecraft.

mc = Minecraft.create ()

Questa linea crea un oggetto chiamato "mc" (Minecraft). Devi crearlo per consentire la comunicazione con il gioco Minecraft: non è sufficiente includere solo il file.

mc.postToChat ("Ciao, mondo!")

Infine, questa riga dice a Minecraft di scrivere del testo nella chat. Prova a cambiare "Ciao, mondo!" a qualcos'altro e vedere cosa succede, ma ricordati di includere entrambe le virgolette. Se riscontri problemi con il software, questi sono alcuni degli errori Python e Minecraft Pi più comuni:

  • AttributeError - questo è un refuso, come pint o prnt invece di print
  • NameError: il nome "Minecraft" non è definito - ricorda di importare i moduli che ti servono
  • NameError: il nome "vero" non è definito - Python fa distinzione tra maiuscole e minuscole, cambia in "Vero"
  • socket.error: [Errno 111] Connessione rifiutata - Assicurati che Minecraft sia in esecuzione

progetti

Ora che conosci le basi di Python e Minecraft, facciamo alcuni progetti interessanti. Tutto il codice può essere scaricato da Github.

Bridge Builder automatizzato

Minecraft-Pi-Bridge-Builder

Questo programma costruirà efficacemente un ponte sull'acqua. Quando il giocatore si avvicina a uno specchio d'acqua, il programma convertirà diversi blocchi in pietra. Poiché Minecraft utilizza un sistema di coordinate, è molto facile ottenere la posizione del giocatore, insieme al tipo di blocchi attorno al giocatore. Minecraft Pi è leggermente limitato, quindi non è possibile aggiornare più blocchi diversi in blocco. Tuttavia, puoi facilmente codificare questo comportamento da solo.

Crea un nuovo file (File> Nuovo file) e salvalo come "bridge_builder.py“.

da mcpi.minecraft import Minecraft. mc = Minecraft.create () # create Minecraft Object mentre True: x, y, z = mc.player.getPos () # store position player # archivia i blocchi circostanti 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 o a == 9 oppure b == 8 oppure b == 9 oc == 8 oc == 9 o d == 8 o d == 9: # 8 o 9 è acqua. Impostare i blocchi circostanti sul pavimento su un solido (pietra) se viene trovata acqua 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)

Notate come il valore y sta effettivamente guardando y - 1. Questo è il livello del pavimento. Se si usasse il valore di y, lo script cercherebbe blocchi a livello del ginocchio - non funzionerebbe molto bene! Mc.getBlock () restituisce l'id di un blocco per le coordinate indicate. Dato che x, ye z sono le coordinate del giocatore, puoi aggiungere o sottrarre da esse per ottenere posizioni attorno al giocatore. Non è necessario utilizzare i valori x, ye z, è possibile utilizzare qualsiasi numero, tuttavia è possibile che non si sappia in che modo quel determinato blocco sia correlato al giocatore - è meglio utilizzare i valori relativi al giocatore. Esegui questo file dalla riga di comando e guarda cosa succede.

Dovresti vedere che una piccola area di terreno si trasforma in pietra quando il giocatore raggiunge uno specchio d'acqua. Non è eccezionale: sei in grado di camminare abbastanza velocemente da causare un problema. Puoi risolvere questo problema convertendo un volume maggiore di acqua in terra. La parte finale del metodo mc.setBlocks () è l'id blocco. Uno è l'id di blocco per la pietra. Potresti cambiarlo in legno, erba o altro. Se lo volessi, potresti facilmente convertirlo in un design complesso - forse un ponte sospeso!

Pulsante Super Mining

Minecraft-Pi-Super-Mine

Questo esempio renderà breve il lavoro di mining. Consiste in un pulsante fisico che, una volta premuto, estrarrà 10 blocchi a cubetti. Cominciamo con il pulsante. Simile ai pulsanti di Arduino, avrai bisogno di una piccola quantità di elettronica, che dovrebbe essere trovata in a starter kit di base Cosa c'è nel tuo Starter Kit Arduino? [Principianti di Arduino]Di fronte a una scatola piena di componenti elettronici, è facile essere sopraffatti. Ecco una guida esattamente a ciò che troverai nel tuo kit. Leggi di più :

  • 1 x tagliere
  • 1 x interruttore momentaneo
  • 1 resistenza da 220 ohm
  • Femmina> maschio cavi di salto
  • Maschio> Cavi maschio per saltare

Ecco il circuito:

Pi-Button-Connection

Questo resistore è chiamato resistore "pull down". Aiuta a garantire che ciò che il Pi pensa sia il pulsante premuto, in realtà è il pulsante premuto. Non è necessario utilizzare questo, tuttavia è consigliabile, poiché è possibile trovare un sacco di rumore e letture false senza di essa.

Il pulsante è collegato al pin 14 GPIO (General Purpose Input Output). Puoi usare qualsiasi pin GPIO, comunque guarda piedinatura in primo luogo, poiché non sono tutti controllabili dal Pi e variano leggermente tra i modelli.

Ora che il pulsante è collegato, è il momento di testarlo. Crea un nuovo file e salvalo come "button_test.py“. Aggiungi questo codice, salvalo ed eseguilo nel Terminale.

importare RPi. GPIO come GPIO. tempo di importazione GPIO.setmode (GPIO.BCM) # indica al Pi quali intestazioni usare. GPIO.setup (14, GPIO.IN) # indica al Pi che questo pin è un input mentre True: se GPIO.input (14) == True: # cerca il pulsante premi stampa "BUTTON WORKS!" # log risultato time.sleep (0,5) # attendere 0,5 secondi. 

stampa Control + C per fermare la sceneggiatura. Se tutto funziona correttamente dovresti vedere "PULSANTE FUNZIONA!" nel terminale. Notare come, come il modulo Minecraft, questo test stia utilizzando RPi. GPIO e moduli temporali. Ciò consente al Pi di accedere ai pin hardware e fornisce utili funzioni di temporizzazione.

Ora finiamo il resto del codice. Crea un nuovo file chiamato "super_mine.py“. Ecco il codice:

importare RPi. GPIO come GPIO. tempo di importazione. da mcpi.minecraft import Minecraft mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # indica al Pi quali intestazioni usare. GPIO.setup (14, GPIO.IN) # indica al Pi che questo pin è un input mentre True: se GPIO.input (14) == True: # cerca il pulsante premi x, y, z = mc.player.getPos ( ) # leggi il giocatore posizione mc.setBlocks (x, y, z, x + 10, y + 10, z + 10, 0) # mine 10 blocchi mc.setBlocks (x, y, z, x - 10, y + 10, z - 10, 0) # mio 10 blocchi time.sleep (0.5) # wait 0.5 secondi. 

mc.player.getPos () restituisce le coordinate correnti dei giocatori, che vengono quindi memorizzate in x, ye z. Il setBlocks () Il metodo dice a Minecraft di riempire tutti i blocchi tra l'inizio e la fine con il blocco seguente. Zero è l'id di blocco per l'aria. Puoi cambiarlo in un altro id-blocco per riempire in modo solido un'area. Puoi anche cambiare le coordinate in +100 o anche +1000 blocchi, tuttavia il Pi potrebbe iniziare a lottare se diventi troppo pazzo. Nota come y + 10 è lo stesso per entrambe le linee. Potresti cambiarlo in y - 10 se volessi rimuovere i blocchi sottoterra.

teletrasporto

Minecraft-Pi-Teleporting

Un altro semplice utilizzo di questo pulsante potrebbe essere il "teletrasporto". Minecraft Pi Api fornisce un modo per impostare la posizione del giocatore. Il seguente codice "teletrasporta" il lettore in una posizione predefinita:

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

Si noti che il suo metodo accetta tre parametri; x, ye z - in modo da poterli impostare su qualsiasi cosa per teletrasportare istantaneamente il giocatore in quella posizione.

Crea una copia del file super_mine (File> Salva copia con nome) e modificarlo sostituendo if con quanto segue:

se GPIO.input (14) == Vero: # cerca il pulsante premi mc.player.setPos (0, 0, 0) # teletrasporta il giocatore time.sleep (0.5) # aspetta 0,5 secondi. 

Questo file dovrebbe ora apparire così:

importare RPi. GPIO come GPIO. da mcpi.minecraft import Minecraft. import time mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # indica al Pi quali intestazioni usare. GPIO.setup (14, GPIO.IN) # indica al Pi che questo pin è un input mentre True: se GPIO.input (14) == True: # cercare il pulsante premere mc.player.setPos (0, 0, 0) # teletrasporto player time.sleep (0.5) # wait 0.5 secondi. 

Salvalo come "teleport.py" e corri.

Potresti scoprire che il giocatore rimane bloccato in alcuni blocchi quando lo usi, nel qual caso dovrai farlo regola le coordinate su uno spazio aperto noto (la parte superiore sinistra dello schermo mostra la tua corrente Posizione).

Costruire una casa

Minecraft-Pi-Casa

Un'ultima attività per questo pulsante è quella di costruire una casa. Proprio come nell'esempio di mining rapido sopra, questo sostituirà semplicemente i blocchi che circondano il giocatore per creare una casa. Per i diversi materiali (finestre, pareti, ecc.) Verranno utilizzati ID di blocco diversi. Per rendere le cose più facili da codificare, verrà creato un blocco solido, quindi rimosso l'interno (imposta il blocco su aria), questo creerà una shell vuota. Potresti aggiungere extra come un letto o una porta, tuttavia il progetto Minecraft Pi è un po 'incompleto, e mentre questi oggetti funzionano quando vengono posizionati dal giocatore, non sono brillanti quando si usa Python.

da mcpi.minecraft import Minecraft. importare RPi. GPIO come GPIO. import time mc = Minecraft.create () # create Minecraft Object GPIO.setmode (GPIO.BCM) # indica al Pi quali intestazioni usare. GPIO.setup (14, GPIO.IN) # indica al Pi che questo pin è un input mentre 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) # crea shell mc.setBlocks (x + 3, y, z + 3, x + 6, y + 2, z + 7, 0) # rimuovi all'interno di 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. 

Salva questo come "house.py" e corri. Tutto bene, dovresti vedere apparire una piccola casa (potresti doverti voltare per trovarla). È molto semplice, un'apertura e alcune finestre. In teoria, non c'è limite alla grandezza o alla complessità di un edificio che potresti costruire.

Crea un mini gioco

Minecraft-Pi-Lava-Game

Quindi, facciamo un mini-gioco! Sarà abbastanza semplice, quando il giocatore calpesta un blocco di sabbia, si trasformerà in lava dopo un periodo di tempo casuale. Questo è un buon gioco da realizzare, in quanto potresti progettare i tuoi livelli o modificarlo per rendere le cose più difficili. Non avrai bisogno del pulsante per questo esempio.

Crea un nuovo file e salvalo come "mini_game.py“. Ecco il codice:

da mcpi.minecraft import Minecraft. importazione casuale. import time mc = Minecraft.create () # create Minecraft Object mentre True: x, y, z = mc.player.getPos () block_under_player = mc.getBlock (x, y - 1, z) se block_under_player == 12: # giocatore in piedi sulla sabbia, avvia il timer random_time = random.uniform (0.1, 2.5) # genera un numero casuale time.sleep (Random_time); # wait mc.setBlock (x, y - 1, z, 11) # trasformalo in lava. 

Questo codice è un buon inizio per il casuale() funzione: random.uniform (0.1, 2.5) genererà un numero casuale compreso tra 0,1 (1/10 di secondo) e 2,5 (2 1/2 secondi). Aumentare questi numeri renderà il gioco più semplice.

Provalo! Sali su un blocco di sabbia e presto si trasformerà in lava. Questa potrebbe essere la base di un gioco più complesso.

Crea un altro mini gioco

Minecraft-Pi-Mini-Game

La premessa per questo gioco è semplice: non stare in piedi sul pavimento di legno quando il tempo finisce. Il giocatore viene teletrasportato in un'arena. Sono costretti a rimanere fermi fino all'inizio del gioco. Una volta avviato, il pavimento si trasformerà in acqua una volta scaduto il timer. Il giocatore deve trovarsi nella zona sicura (blocchi di diamante) per sopravvivere. Ogni livello riduce il timer di un secondo. Dopo ogni livello riuscito l'area di sicurezza diventa più grande. Dai un'occhiata al codice qui sotto:

tempo di importazione. importazione casuale. da mcpi.minecraft import Minecraft mc = Minecraft.create () # crea oggetto Minecraft # cancella area. mc.setBlocks (-10, 1, -10, 25, 5, 25, 0) # crea l'arena shell. mc.setBlocks (0, 0, 0, 25, 10, 25, 17) # scava l'arena. mc.setBlocks (1, 1, 1, 24, 10, 24, 0) # sposta il giocatore nell'arena. mc.player.setPos (14, 25, 20) # giocatore di teletrasporto # li fa rimanere fermi. # teletrasporta il giocatore per iniziare la posizione ogni 1/10 di secondo. # fallo per 5 secondi, quindi avvia il gioco. time.sleep (2) total_wait = 0. mc.postToChat ("In attesa di iniziare") mentre total_wait <5: mc.player.setPos (14, 1, 20) # teleport player time.sleep (0.1) total_wait + = 0.1 mc.postToChat ("BEGIN!") # 10 livelli. per livello nell'intervallo (10): x, y, z = mc.player.getPos () level_time = 10 - level # riduci il tempo di 1 secondo per ogni livello mc.postToChat ("Level -" + str (livello + 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 # controlla che il giocatore sia ancora a terra se y <0.75: mc.postToChat ("Gioco Over ") pausa; else: # remove floor mc.setBlocks (-10, 0, -10, 25, 0, 25, 8) # rimetti in sicurezza l'area mc.setBlocks (safe_area_start, 0, safe_area_end, safe_area_start + livello, 0, safe_area_end + livello, 57) time.sleep (2.5) continua a rompere.

Salva questo come "mini_game_2.py"E provalo.

Il Pi 2 ha alcuni problemi di prestazioni durante l'esecuzione di Minecraft. Il grafico di utilizzo della CPU (Central Processing Unit) (angolo in alto a destra) non mostra mai alcun carico pesante, quindi questo deve dipendere da una progettazione e ottimizzazioni inadeguate da parte degli sviluppatori. Questi problemi non sono correlati all'esecuzione del codice (poiché continuano quando Python non è in esecuzione), tuttavia sono aggravati da questo mini gioco. Se il tuo Pi sta davvero lottando, potresti voler ridurre le dimensioni dell'arena o overclocca il tuo Pi Non abbastanza succo? Spremi il tuo Raspberry Pi effettuando l'overclockingSe c'è qualche hardware rilasciato nel 2012 di cui probabilmente ti innamorerai, è il Raspberry Pi dolce come zucchero, un mini computer progettato e costruito nel Regno Unito che è stato spedito in tutto il ... Leggi di più .

Rilevatore di diamanti

Minecraft-Pi-Diamonds

Facciamo un altro circuito. Questo utilizzerà un diodo a emissione di luce (LED) per illuminarsi quando ci sono diamanti sotto (entro 15 blocchi). Ecco cosa ti serve:

  • 1 x tagliere
  • 1 x LED
  • 1 resistenza da 220 ohm
  • Femmina> maschio cavi di salto
  • Maschio> Cavi maschio per saltare

Ecco il circuito:

Pi-LED-Connection

Collegare l'anodo (gamba lunga) al pin GPIO 14. Questo pin si comporta come + 5v. Collegare il catodo (gamba corta) a terra.

Ho usato un giocattolo di minerale a buon mercato e l'ho modificato rimuovendo il coperchio posteriore e l'elettronica, quindi ho posizionato un LED sotto di esso. Potresti facilmente rendere questo permanente con colla a caldo o qualcosa di simile.

Minecraft-Ore-giocattolo

Salva questo codice come "diamonds.py“:

importare RPi. GPIO come GPIO. tempo di importazione. da mcpi.minecraft import Minecraft mc = Minecraft.create () # create l'oggetto Minecraft led_pin = 14 # memorizza il numero PIN GPIO GPIO.setmode (GPIO.BCM) # indica al Pi quali intestazioni usare. GPIO.setup (14, GPIO.OUT) # indica al Pi che questo pin è un'uscita mentre True: # ripeti indefinitamente x, y, z = mc.player.getPos () per i nell'intervallo (15): # guarda ogni bloccare fino a blocco 15 se 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) # aspettare. 

Quando c'è un blocco di minerale di diamante sotto il giocatore (entro 15 blocchi) la luce lampeggerà.

Hai creato qualcosa di interessante con Minecraft Pi? Fammi sapere nei commenti cosa hai fatto o fino a che punto sei arrivato nei giochi.

Joe è laureato in Informatica presso l'Università di Lincoln, nel Regno Unito. È uno sviluppatore di software professionale e quando non pilota droni o scrive musica, spesso si trova a scattare foto o a produrre video.