Hacker Minecraft på Raspberry Pi

Billede 1 af 21

De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
Hvad er Minecraft?
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter
De 21 sejeste Minecraft-projekter

Det Raspberry Pi 2 er en overraskende dygtig enhed i betragtning af dens pris under £30. Den leveres med en version af Minecraft forudinstalleret sammen med en API, der lader dig skrive kode, der skal køres i den virtuelle verden. Det gør du i Python, som er let at lære. Kombinationen af ​​Pi, Python og Minecraft giver en fantastisk mulighed for at begynde at udforske mulighederne for programmering. Og spændingen ved at se et hus bygge sig selv på et virtuelt landskab er heller ikke kun for børn.

Scripting i Minecraft

Minecraft er et åbent sandkassespil, der ikke har en plotlinje at følge. Det bliver nogle gange beskrevet som "virtuel Lego", da spilleren kan bygge enhver form for struktur ved hjælp af de blokke, de har til rådighed. Den version, der følger med Raspberry Pi, har et begrænset funktionssæt, der passer til dens pædagogiske rolle - så du behøver for eksempel ikke at bekymre dig om at blive jagtet af zombier. At interagere med denne verden kræver ingen speciel opsætning, kun en nylig opbygning af Raspbian OS plus et programmeringsmiljø. Jeg ville vælge Geany, som du kan installere ved at åbne LXTerminal og skrive:

sudo apt-get install geany

Lad os starte med at lave et manuskript til at bygge et hus foran spilleren - men i stedet for bare at smække et på plads, vil vi animere det. Vi vil også indbygge forskellige konfigurerbare indstillinger, som giver spilleren mulighed for at eksperimentere med forskellige dimensioner og materialer. Dette vil også gøre programmet modulopbygget, så det kan bruges som grundlag for at skabe mere sofistikerede brønde.

For at få koden til at fungere skal du indlæse den i Geany og derefter starte Minecraft og skabe en ny verden. Tryk på tabulatortasten for at slippe markøren fra Minecraft-vinduet, og klik på tandhjulsikonet i Geany (eller tryk på F5) for at starte scriptet. Du bør se et hus samle sig på magisk vis. Hvis du ikke gør det, så prøv at vende om - det kan være bag dig! Du kan se scriptet i aktion her. Så hvordan fungerer scriptet? Nå, først åbner det et link til Minecraft:

importer mcpi.minecraft som minecraft, tid mc=minecraft. Minecraft.create()

I Python er det vigtigt at være opmærksom på indrykning, da det er sådan kode er opdelt i blokke. I dette tilfælde flugter begge linjer med venstre margen: den første linje importerer Minecraft- og Time-bibliotekerne, og den anden opretter et Minecraft-objekt, som vi kan bruge hele vejen igennem. De næste 25 linjer angiver nogle få variabler for de blokke, vi skal bruge, så vi kan henvise til dem som f.eks. wood_planks i stedet for deres blok-ID (5, i dette tilfælde). Vi angiver så, hvilke af disse blokke der skal bruges til væggene, hvilke til taget og så videre. Vi kan nemt ændre husets konstruktion fuldstændig ved at skifte murstensvægge ud med for eksempel brosten. Til sidst indstiller vi bredden, længden og højden af ​​vores ønskede bolig.

Vi kalder nu Minecraft-funktionen mc.player.getTilePos() for at lokalisere spilleren i landskabet og de værdier, der come back bruges derefter til at oprette to variable, venstre og nederste, til at beskrive, hvor det første hjørne af boligen vil være.

Derefter matcher strukturen af ​​scriptet Minecraft-processen med "manuelt" at bygge et hus. Vi begynder med at rydde et rum, så hvis spilleren vælger at bygge huset inde i f.eks. et bjerg, vil opholdsområdet ikke være massive sten. Her er kodeblokken - funktionen i Python - der gør dette:

def clear_house (nuklear):
hvis nuklear==Sandt:
blast_zone=20
andet:
blast_zone=0
mc.setBlocks (venstre-blast_zone, player_
jord, bund+blæst_zone, venstre+bredde+blæst_
zone, player_ground+height+blast_
zone+10, bundlængde-sprængningszone, luftblok)

Når vi kalder clear_house, sender vi parameteren nuclear ind. Det har værdien True eller False. Du kan prøve at kalde det med True for at rydde et større volumen omkring målområdet, eller kalde det med False for at begrænse frigangen til husets indvendige dimensioner. I Minecraft bruges mc.setBlocks-funktionen til at skabe en kube af blokke ved at give den koordinaterne i tre dimensioner af modsatte hjørner efterfulgt af den bloktype, du ønsker at bruge. I dette tilfælde rydder vi et rum, så vi bruger luft.

Når vi har ryddet pladsen, er det tid til at gå videre til byggeriet. Hver af disse byggefaser foregår i sin egen funktion. I slutningen af ​​scriptet vil du se en funktion kaldet main(), som styrer programflowet ved at kalde hver fase af konstruktionen efter tur. Ved at navngive vores funktioner fornuftigt og kalde dem fra main(), er det nemt at forstå, hvad programmet gør:

def main():
klart_hus (falsk)
start_pos=[venstre, bund, spiller_
jord]
build_floor (start_pos)
kursus=bygge_vægge (start_pos)
add_door (door_position)
time.sleep (forsinkelse*10)
build_roof (start_pos, kursus)

Den næste funktion kaldet i main() bygger gulvet – denne bruger mc. setBlocks igen for at udskære et fundament (for kunstnerisk effekt) og derefter tilføje en terning af gulvfliser med en dybde på en blok for at skabe et solidt gulv i vores hus.

At bygge væggene

Byg_vægge-funktionen er hjertet i programmet. Den mest effektive måde at skabe skallen på et hus ville være at smække en solid terning af mursten ned og derefter bruge clear_house til at skære interiøret ud. Vi ønsker dog, at huset ser ud til at bygge sig selv, så vi skal placere blokke enkeltvis, efter hinanden. Her er en forenklet version af vægbyggekoden:

def build_course (start_pos, retning,
Rute):
blokke=1
current_horiz=start_pos[0]
current_vert=start_pos[1]

hvis retning==”op” eller
retning==”ned”:
antal_blokke=længde
andet:
antal_blokke=bredde

mens blokerer mc.setBlock (current_horiz, player_
jord+bane, strøm_vert, vægblok)
hvis retning==”op”:
nuværende_vert-=1
elif retning==”ned”:
nuværende_vert+=1
elif retning==”højre”:
nuværende_horiz+=1
andet:

current_horiz-=1
blokke=blokke+1 # gå videre til næste blok
time.sleep (forsinkelse)

Vi begynder med at gemme startpositionen - dette vil være positionen for den sidste blok, der blev lagt fra det foregående forløb af blokke. Vi specificerer derefter, hvor mange blokke der skal lægges, afhængigt af om vi skal på langs af bygningen eller dens bredde.

Byggefasen er indeholdt i mens-blokken – denne fortsætter med at løbe indtil vi har lagt alle blokke. mc.setBlock placerer en enkelt blok ved de viste koordinater og øger derefter en af ​​disse koordinater afhængigt af den retning, vi lægger. Effekten er, at blokke lægges langs en væg, før de drejes om et hjørne og fortsætter i et rektangel, indtil banen er afsluttet.

Den endelige version af koden er lidt mere involveret, idet den tilføjer vinduer til hver væg. Vinduerne er dynamisk dimensioneret, så de er halvdelen af ​​væggens længde og centreret. Den registrerer også dørens position; det tilføjes, når væggene er bygget. Baner styres fra build_walls-funktionen, som gentager build_course-funktionen for hver bane af blokke, indtil den når den endelige højde.

Du kan endda prøve at bygge dit hus i havet eller i luften - gør dette ved at dobbelttrykke på mellemrumstasten for at flyve, og tryk derefter igen for at hæve dig selv, før du kører scriptet. Skift variablerne wall_block og roof_block for at se, hvad der sker, hvis du skaber væggene eller taget af guld eller rent faktisk lava. Du kan tilføje dine egne blokke ved at konsultere den fulde liste her, og tilføjelse af den tilknyttede variabel til scriptet. Mere udfordrende ændringer kan omfatte tilføjelse af flere etager til strukturen, hvis højdevariablen er indstillet til en tilstrækkelig stor værdi. Find ud af, hvordan du f.eks. tilføjer tårne, og du har et Minecraft-slot.

Disse tweaks lyder måske trivielle, men jeg har programmeret professionelt i mere end 20 år, og jeg bliver stadig glad, når et kodestykke fungerer efter hensigten. Hvis du aldrig har programmeret før, håber jeg, du vil give det en chance - og hvis du har en Minecraft-fan i husstanden, foreslår jeg, at du slipper dem løs på koden og ser, hvor den fører dem hen. Du finder links til Minecraft Pi-ressourcer på kevpartner.co.uk/programmering.