Μάθετε Python και Electronics με το Minecraft Pi Edition

Μάθετε Python και Electronics με το Minecraft Pi Edition

Πάντα ήθελες να μάθεις να κωδικοποιείς αλλά δεν ήξερες από πού να ξεκινήσεις; Μάθετε πώς να ελέγχετε το Minecraft στο Raspberry Pi χρησιμοποιώντας Python και μερικά απλά ηλεκτρονικά. Ιδού το τελικό αποτέλεσμα:





Θα χρειαστείτε ένα Pi 2 ή νεότερο για αυτό το έργο και ενώ θα μπορούσατε να ολοκληρώσετε τις περισσότερες από αυτές τις εργασίες μέσω της γραμμής εντολών μέσω Secure Shell (SSH), αυτό το σεμινάριο θα επικεντρωθεί στην κωδικοποίηση απευθείας στο Pi.





Είστε νέοι στο Minecraft; Μην ανησυχείτε - εδώ είναι το δικό μας Οδηγός για αρχάριους του Minecraft Το





Εισαγωγή στο Minecraft Pi

Το Minecraft για το Raspberry Pi έχει αναπτυχθεί για εκμάθηση και παραπλάνηση (και είναι δωρεάν). Έρχεται με μια διεπαφή προγραμματισμού εφαρμογών (API) η οποία παρέχει έναν τρόπο για να μιλά εύκολα ο κώδικας στο Minecraft. Είναι εξαιρετικό για να μάθετε πώς να κωδικοποιείτε στην Python, καθώς και να ξεκινήσετε με τα ηλεκτρονικά.

Τι είναι η Python;

Πύθων είναι γλώσσα προγραμματισμού. είναι ερμηνεύεται , πράγμα που σημαίνει ότι όταν εκτελείτε ένα αρχείο ή πρόγραμμα Python, ο υπολογιστής πρέπει πρώτα να κάνει μια μικρή δουλειά στο αρχείο. Τα μειονεκτήματα είναι ότι μπορεί να θεωρηθεί αργό σε σύγκριση με τις μεταγλωττισμένες γλώσσες [Καταργήθηκε το σπασμένο URL].



Τα οφέλη των γλωσσών που ερμηνεύονται είναι η ταχύτητα κωδικοποίησης και η φιλικότητά τους. Δεν χρειάζεται να το πείτε στον υπολογιστή τι δεδομένα που θέλετε να αποθηκεύσετε, απλά ότι θέλετε να αποθηκεύσετε κάτι και ο υπολογιστής θα καταλάβει τι να κάνει. Υπάρχουν εξαιρέσεις, φυσικά, και αυτή είναι μια κάπως απλοποιημένη άποψη, ωστόσο ο προγραμματισμός πρέπει να είναι διασκεδαστικός! Αν αρχίσετε να ψάχνετε στις πολύπλοκες τεχνικές λεπτομέρειες, μπορεί να γίνει λίγο επίπονο.

Η Python έχει διάκριση πεζών -κεφαλαίων. Αυτό είναι σημαντικό να γνωρίζουμε, καθώς η Python δεν αναγνωρίζει αντικείμενα ακόμα κι αν είναι γραμμένα σωστά αν η υπόθεση είναι λάθος. Το 'Dosomething ()' δεν θα λειτουργήσει εάν η μέθοδος ονομάζεται 'DoSomething ()'. Η Python χρησιμοποιεί επίσης εσοχή Το Άλλες γλώσσες προγραμματισμού μπορεί να μην ενδιαφέρονται πόσες εσοχές έχει ο κώδικας σας, ενώ η Python κάνει Φροντίδα. Οι εσοχές χρησιμοποιούνται για να λένε στην Python πού ανήκει ο κώδικας. Άλλες γλώσσες ενδέχεται να χρησιμοποιούν το «Curly Braces» ({}) για να ομαδοποιήσουν τον κώδικα - η Python δεν τα χρησιμοποιεί αυτά. Η Python χρησιμοποιεί ένα hash (#) για τα σχόλια και τα σχόλια χρησιμοποιούνται για να ενημερώσουν άλλους προγραμματιστές ή άτομα που κοιτούν τον κώδικα τι κάνει ένα συγκεκριμένο μέρος ή γιατί είναι απαραίτητο. Η Python αγνοεί οτιδήποτε μετά από ένα hash.





Τέλος, υπάρχουν δύο κύριες εκδόσεις της Python - Python 2.7.x και Python 3.x. Υπάρχουν κάποιες διαφορές μεταξύ των δύο ( ποιες ειναι οι διαφορες? ). Αυτό το σεμινάριο θα χρησιμοποιήσει Python 3.

Αρχική εγκατάσταση

Η παροχή του Pi σας είναι ήδη εγκατάσταση και εκτέλεση του Raspbian , δεν χρειάζονται πολλές αρχικές ρυθμίσεις.





Άνοιγμα τερματικού ( Μενού> Αξεσουάρ> Τερματικό ) και εκτελέστε αυτήν την εντολή. Είναι πάντα καλή πρακτική η διατήρηση της λίστας αποθετηρίων ενημερωμένη και αυτό θα κατεβάσει την τελευταία λίστα προγραμμάτων (δεν θα κατεβάσει τα ίδια τα προγράμματα, αυτό βοηθά το Pi να γνωρίζει πώς ονομάζονται προγράμματα και πού να τα βρει).

sudo apt-get update

Τώρα ενημερώστε το Pi (αυτό μπορεί να διαρκέσει λίγο):

sudo apt-get upgrade

Το Python και το Minecraft Pi έχουν ήδη εγκατασταθεί, ωστόσο αν το Minecraft Pi δεν έχει εγκατασταθεί για οποιονδήποτε λόγο, είναι απλό να εγκατασταθεί:

sudo apt-get install minecraft-pi

Μεταβείτε στα έγγραφα και δημιουργήστε έναν νέο φάκελο που ονομάζεται 'Minecraft':

cd Documents/
mkdir Minecraft

Μπορείτε να δείτε τα περιεχόμενα αυτού του νέου φακέλου:

ls

Εδώ είναι μια συμβουλή - αν αρχίσετε να πληκτρολογείτε και πατάτε το πλήκτρο TAB, η γραμμή εντολών θα επιχειρήσει να συμπληρώσει αυτόματα τη δήλωση για εσάς.

Μπορείτε να εξετάσετε τη διαδρομή προς τον τρέχοντα κατάλογο χρησιμοποιώντας το pwd, το οποίο σημαίνει Εκτύπωση καταλόγου εργασίας:

pwd

Ξεκινήστε το Minecraft πηγαίνοντας στο Μενού> Παιχνίδια> Minecraft Pi Το Θα χρειαστείτε αυτό το τρέξιμο, αλλά θα επανέλθετε αργότερα.

Ανοίξτε την Python 3 από Μενού> Προγραμματισμός> Python 3 (IDLE) Το Αυτό το πρόγραμμα παρέχει έναν τρόπο για να εκτελέσετε εντολές Python και να γράψετε προγράμματα.

Τώρα μπορείτε να πληκτρολογήσετε τις εντολές σας Python εδώ, αλλά αυτό δεν είναι πολύ πρακτικό. Παω σε Αρχείο> Νέο αρχείο και μετά Αρχείο> Αποθήκευση και αποθηκεύστε το στο φάκελο που δημιουργήσατε νωρίτερα. ( Έγγραφα> Minecraft ). Ας το πούμε ' hello_world.py '. Δεν χρειάζεται να χρησιμοποιήσετε την επέκταση .py, θα προστεθεί αυτόματα, αλλά είναι καλή πρακτική.

Εάν επιστρέψετε στο τερματικό και πλοηγηθείτε στο φάκελο Minecraft, θα πρέπει να δείτε το αρχείο που μόλις δημιουργήσατε:

cd Minecraft/
ls

Μπορείτε να εκτελέσετε αυτό το αρχείο ως εξής:

python hello_world

Παρατηρήστε πώς το 'python' είναι όλα πεζά. Αυτό πρέπει να είναι πριν από το όνομα του αρχείου, καθώς λέει στο Pi ότι το ακόλουθο αρχείο είναι Python, οπότε θα πρέπει να εκτελεστεί ως τέτοιο.

Επιστρέψτε στον επεξεργαστή Python και πληκτρολογήστε:

print 'Hello, World!'

Αποθηκεύστε αυτό το αρχείο και εκτελέστε το ξανά - θα πρέπει τώρα να δείτε το 'Hello, World!' εμφανίζεται στη γραμμή εντολών - τακτοποιημένο! Η εντολή εκτύπωσης απλώς λέει στην Python να εξάγει το ακόλουθο κείμενο σε διπλά εισαγωγικά. Αυτό είναι καλό, αλλά δεν είναι τρομερά χρήσιμο για το Minecraft, ας το συνδέσουμε:

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

Τώρα, αν αποθηκεύσετε και εκτελέσετε αυτό το αρχείο, θα πρέπει να δείτε το 'Hello, World!' εμφανίζονται στο παιχνίδι Minecraft. Ας αναλύσουμε τον κώδικα:

from mcpi.minecraft import Minecraft

Αυτή η γραμμή λέει στην Python ότι θέλετε να χρησιμοποιήσετε κώδικα από άλλο αρχείο. Αυτό το αρχείο mcpi.minecraft αναπτύχθηκε για να επιτρέπει τον εύκολο έλεγχο του Minecraft.

mc = Minecraft.create()

Αυτή η γραμμή δημιουργεί ένα αντικείμενο που ονομάζεται «mc» (Minecraft). Πρέπει να το δημιουργήσετε για να επιτρέψετε την επικοινωνία με το παιχνίδι Minecraft - δεν αρκεί μόνο να συμπεριλάβετε το αρχείο.

mc.postToChat('Hello, World!')

Τέλος, αυτή η γραμμή λέει στο Minecraft να γράψει κείμενο στη συνομιλία. Δοκιμάστε να αλλάξετε το 'Hello, World!' σε κάτι άλλο και δείτε τι συμβαίνει, αλλά θυμηθείτε να συμπεριλάβετε και τα δύο εισαγωγικά. Εάν αντιμετωπίζετε προβλήματα λογισμικού, αυτά είναι μερικά κοινά σφάλματα Python και Minecraft Pi:

  • AttributeError - πρόκειται για τυπογραφικό λάθος, όπως pint ή prnt αντί για εκτύπωση
  • NameError: το όνομα 'Minecraft' δεν έχει οριστεί - θυμηθείτε να εισαγάγετε τις ενότητες που χρειάζεστε
  • NameError: το όνομα 'true' δεν έχει οριστεί - η Python έχει διάκριση πεζών -κεφαλαίων, αλλάξτε σε 'True'
  • socket.error: [Errno 111] Η σύνδεση απορρίφθηκε - Βεβαιωθείτε ότι το Minecraft εκτελείται

Εργα

Τώρα που γνωρίζετε τα βασικά της Python και του Minecraft, ας κάνουμε μερικά υπέροχα έργα. Όλος ο κωδικός μπορεί να μεταφορτωθεί από το Github.

Αυτοματοποιημένο Bridge Builder

Αυτό το πρόγραμμα θα δημιουργήσει ουσιαστικά μια γέφυρα πάνω από το νερό. Όταν ο παίκτης πλησιάσει σε μια υδάτινη επιφάνεια, το πρόγραμμα θα μετατρέψει πολλά μπλοκ σε πέτρα. Καθώς το Minecraft χρησιμοποιεί ένα σύστημα συντεταγμένων, είναι πολύ εύκολο να λάβετε τη θέση του παίκτη, μαζί με τον τύπο των μπλοκ γύρω από τον παίκτη. Το Minecraft Pi είναι ελαφρώς περιορισμένο, επομένως δεν είναι δυνατή η μαζική ενημέρωση πολλών διαφορετικών μπλοκ. Μπορείτε εύκολα να κωδικοποιήσετε μόνοι σας αυτήν τη συμπεριφορά.

Δημιουργήστε ένα νέο αρχείο ( Αρχείο> Νέο αρχείο ) και αποθηκεύστε το ως ' 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)

Παρατηρήστε πώς η τιμή y βλέπει πραγματικά το y - 1. Αυτό είναι το επίπεδο του δαπέδου. Εάν χρησιμοποιούνταν η τιμή του y, το σενάριο θα έψαχνε μπλοκ σε επίπεδο γόνατος - δεν θα λειτουργούσε πολύ καλά! Mc.getBlock () επιστρέφει το id ενός μπλοκ για τις δεδομένες συντεταγμένες. Καθώς τα x, y και z είναι οι συντεταγμένες της συσκευής αναπαραγωγής, μπορείτε να προσθέσετε ή να αφαιρέσετε από αυτές για να λάβετε θέσεις γύρω από τη συσκευή αναπαραγωγής. Δεν χρειάζεται να χρησιμοποιήσετε τις τιμές x, y και z, μπορείτε να χρησιμοποιήσετε οποιονδήποτε αριθμό, ωστόσο ενδέχεται να μην γνωρίζετε πώς το συγκεκριμένο μπλοκ σχετίζεται με το πρόγραμμα αναπαραγωγής - είναι καλύτερο να χρησιμοποιείτε τιμές σε σχέση με τον παίκτη. Εκτελέστε αυτό το αρχείο από τη γραμμή εντολών και δείτε τι συμβαίνει.

Θα πρέπει να δείτε ότι μια μικρή περιοχή εδάφους μετατρέπεται σε πέτρα μόλις ο παίκτης φτάσει σε ένα υδάτινο σώμα. Δεν είναι υπέροχο - μπορείτε να περπατήσετε αρκετά γρήγορα για να προκαλέσετε πρόβλημα. Θα μπορούσατε να το λύσετε μετατρέποντας μεγαλύτερο όγκο νερού σε στεριά. Το τελευταίο μέρος της μεθόδου mc.setBlocks () είναι το αναγνωριστικό μπλοκ. Το ένα είναι το αναγνωριστικό μπλοκ για πέτρα. Θα μπορούσατε να το αλλάξετε σε ξύλο, γρασίδι ή οτιδήποτε άλλο. Αν το θέλατε, θα μπορούσατε πολύ εύκολα να το μετατρέψετε σε ένα πολύπλοκο σχέδιο - ίσως μια κρεμαστή γέφυρα!

Κουμπί Super Mining

Αυτό το παράδειγμα θα κάνει σύντομες εργασίες εξόρυξης. Αποτελείται από ένα φυσικό κουμπί, το οποίο όταν πατηθεί, θα εξορύξει 10 τεμάχια σε κύβους. Ας ξεκινήσουμε με το κουμπί. Παρόμοια με τα κουμπιά στο Arduino, θα χρειαστείτε μια μικρή ποσότητα ηλεκτρονικών, τα οποία θα πρέπει να βρίσκονται σε ένα βασικό κιτ εκκίνησης:

  • 1 x Breadboard
  • 1 x στιγμιαίο διακόπτη
  • Αντίσταση 1 x 220 ohm
  • Γυναικεία> αρσενικά καλώδια άλματος
  • Ανδρικά> Ανδρικά καλώδια άλματος

Ιδού το κύκλωμα:

Pi-Button-Connection

Αυτή η αντίσταση ονομάζεται αντίσταση «τράβηξης προς τα κάτω». Βοηθά να διασφαλιστεί ότι αυτό που ο Pi πιστεύει ότι είναι το κουμπί που πιέζεται, είναι πραγματικά το κουμπί που πιέζεται. Δεν χρειάζεται να το χρησιμοποιήσετε, ωστόσο συνιστάται, καθώς μπορεί να βρείτε πολύ θόρυβο και ψευδείς ενδείξεις χωρίς αυτό.

Το κουμπί είναι συνδεδεμένο με τον ακροδέκτη 14. Output General Purpose Output (GPIO). Μπορείτε να χρησιμοποιήσετε οποιαδήποτε καρφίτσα GPIO, ωστόσο κοιτάξτε το pinout Πρώτον, καθώς δεν είναι όλα ελεγχόμενα από το Pi και διαφέρουν ελαφρώς μεταξύ των μοντέλων.

Τώρα που το κουμπί είναι συνδεδεμένο, ήρθε η ώρα να το δοκιμάσετε. Δημιουργήστε ένα νέο αρχείο και αποθηκεύστε το ως ' button_test.py '. Προσθέστε αυτόν τον κωδικό, αποθηκεύστε τον και στη συνέχεια εκτελέστε τον στο τερματικό.

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

Τύπος Control + C να σταματήσει το σενάριο. Εάν όλα λειτουργούν σωστά, θα πρέπει να δείτε 'ΚΟΥΜΠΙ ΛΕΙΤΟΥΡΓΕΙ!' στο Τερματικό. Παρατηρήστε πώς, όπως και η μονάδα Minecraft, αυτή η δοκιμή χρησιμοποιεί τις ενότητες RPi.GPIO και χρόνου. Αυτά επιτρέπουν στο Pi να έχει πρόσβαση στις ακίδες υλικού και παρέχει χρήσιμες λειτουργίες χρονισμού.

Τώρα ας τελειώσουμε τον υπόλοιπο κώδικα. Δημιουργήστε ένα νέο αρχείο που ονομάζεται ' super_mine.py '. Εδώ είναι ο κωδικός:

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 () επιστρέφει τις τρέχουσες συντεταγμένες των παικτών, οι οποίες στη συνέχεια αποθηκεύονται σε x, y και z. ο setBlocks () Η μέθοδος λέει στο Minecraft να γεμίσει όλα τα μπλοκ μεταξύ της αρχής και του τέλους με το ακόλουθο μπλοκ. Το μηδέν είναι το block-id για τον αέρα. Θα μπορούσατε να το αλλάξετε σε άλλο αναγνωριστικό αποκλεισμού για να γεμίσετε σταθερά μια περιοχή. Θα μπορούσατε επίσης να αλλάξετε τις συντεταγμένες σε +100 ή ακόμη και +1000 μπλοκ, ωστόσο το Pi μπορεί να αρχίσει να δυσκολεύεται αν τρελαθείτε πολύ. Παρατηρήστε πώς το y + 10 είναι το ίδιο και για τις δύο γραμμές. Θα μπορούσατε να το αλλάξετε σε y - 10 αν θέλετε να αφαιρέσετε μπλοκ υπόγεια.

Τηλεμεταφορά

Μια άλλη απλή χρήση για αυτό το κουμπί θα μπορούσε να είναι η «τηλεμεταφορά». Το Minecraft Pi Api παρέχει έναν τρόπο ρύθμισης της θέσης του παίκτη. Ο ακόλουθος κώδικας θα «τηλεμεταφέρει» τη συσκευή αναπαραγωγής σε μια προκαθορισμένη τοποθεσία:

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

Σημειώστε ότι η μέθοδός του δέχεται τρεις παραμέτρους. x, y και z - έτσι μπορείτε να τα ορίσετε σε οτιδήποτε για να μεταφέρετε αμέσως τη συσκευή αναπαραγωγής σε αυτήν τη θέση.

Δημιουργήστε ένα αντίγραφο του αρχείου super_mine ( Αρχείο> Αποθήκευση αντιγραφής ως ) και να το τροποποιήσετε αντικαθιστώντας το if με το ακόλουθο:

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

Αυτό το αρχείο θα πρέπει τώρα να μοιάζει με αυτό:

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

Αποθηκεύστε το ως ' teleport.py και τρέξτε.

Μπορεί να διαπιστώσετε ότι το πρόγραμμα αναπαραγωγής κολλάει σε ορισμένα μπλοκ όταν το χρησιμοποιείτε, οπότε θα χρειαστεί να προσαρμόσετε τις συντεταγμένες σε έναν γνωστό ανοιχτό χώρο (το επάνω αριστερό μέρος της οθόνης δείχνει την τρέχουσα τοποθεσία σας).

Χτίζω ένα σπίτι

Μια τελευταία εργασία για αυτό το κουμπί είναι η κατασκευή ενός σπιτιού. Όπως και στο παράδειγμα γρήγορης εξόρυξης παραπάνω, αυτό θα αντικαταστήσει απλά τα μπλοκ που περιβάλλουν το πρόγραμμα αναπαραγωγής για να φτιάξει ένα σπίτι. Θα χρησιμοποιηθούν διαφορετικά block-id για διαφορετικά υλικά (παράθυρο, τοίχοι κλπ). Για να διευκολυνθεί η κωδικοποίηση των πραγμάτων, θα δημιουργηθεί ένα συμπαγές μπλοκ και στη συνέχεια θα αφαιρεθεί το εσωτερικό (ρυθμίστε το μπλοκ στον αέρα), αυτό θα δημιουργήσει ένα κοίλο κέλυφος. Μπορείτε να προσθέσετε πρόσθετα όπως κρεβάτι ή πόρτα, ωστόσο το έργο Minecraft Pi είναι λίγο ελλιπές και ενώ αυτά τα αντικείμενα λειτουργούν όταν τοποθετούνται από τη συσκευή αναπαραγωγής, δεν είναι λαμπρά όταν χρησιμοποιείτε 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

Αποθηκεύστε το ως ' house.py και τρέξτε. Όλα καλά, θα πρέπει να δείτε ένα μικρό σπίτι να εμφανίζεται (ίσως χρειαστεί να γυρίσετε για να το βρείτε). Είναι πολύ απλό, ένα άνοιγμα και μερικά παράθυρα. Θεωρητικά, δεν υπάρχει όριο στο πόσο μεγάλο ή πολύπλοκο κτίριο θα μπορούσατε να κατασκευάσετε.

Φτιάξτε ένα μίνι παιχνίδι

Στη συνέχεια, ας φτιάξουμε ένα μίνι παιχνίδι! Αυτό θα είναι πολύ απλό, όταν ο παίκτης πατήσει σε ένα κομμάτι άμμο, θα μετατραπεί σε λάβα μετά από τυχαίο χρονικό διάστημα. Αυτό είναι ένα καλό παιχνίδι για να φτιάξετε, καθώς θα μπορούσατε να σχεδιάσετε τα δικά σας επίπεδα ή να το τροποποιήσετε για να κάνετε τα πράγματα πιο δύσκολα. Δεν θα χρειαστείτε το κουμπί για αυτό το παράδειγμα.

Δημιουργήστε ένα νέο αρχείο και αποθηκεύστε το ως ' mini_game.py '. Εδώ είναι ο κωδικός:

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

Αυτός ο κωδικός είναι ένας καλός εκκινητής τυχαίος() λειτουργία: τυχαία. ομοιόμορφη (0,1, 2,5) θα δημιουργήσει έναν τυχαίο αριθμό μεταξύ 0,1 (1/10ο δευτερόλεπτο) και 2,5 (2 1/2 δευτερολέπτων). Η αύξηση αυτών των αριθμών θα κάνει το παιχνίδι πιο εύκολο.

Δοκίμασέ το! Σταθείτε σε ένα κομμάτι άμμου και σύντομα θα μετατραπεί σε λάβα. Αυτό θα μπορούσε να είναι η βάση ενός πιο περίπλοκου παιχνιδιού.

Φτιάξτε ένα άλλο μίνι παιχνίδι

Η προϋπόθεση για αυτό το παιχνίδι είναι απλή - μην στέκεστε στο ξύλινο πάτωμα όταν τελειώσει ο χρόνος. Ο παίκτης τηλεμεταφέρεται σε μια «αρένα». Αναγκάζονται να μείνουν ακίνητοι μέχρι να ξεκινήσει το παιχνίδι. Μόλις ξεκινήσει, το πάτωμα θα γίνει νερό μόλις τελειώσει το χρονόμετρο. Ο παίκτης πρέπει να στέκεται στην ασφαλή ζώνη (μπλοκ διαμαντιών) για να επιβιώσει. Κάθε επίπεδο μειώνει το χρονόμετρο κατά ένα δευτερόλεπτο. Μετά από κάθε επιτυχημένο επίπεδο, η ασφαλής περιοχή γίνεται μεγαλύτερη. Ελέγξτε τον παρακάτω κωδικό:

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

Αποθηκεύστε το ως ' mini_game_2.py »και δώστε του μια ευκαιρία.

Το Pi 2 έχει κάποια προβλήματα απόδοσης κατά την εκτέλεση του Minecraft. Το γράφημα χρήσης της κεντρικής μονάδας επεξεργασίας (CPU) ( επάνω δεξιά γωνία ) δεν εμφανίζει ποτέ μεγάλο φορτίο, οπότε αυτό πρέπει να οφείλεται στον κακό σχεδιασμό και τις βελτιστοποιήσεις από τους προγραμματιστές. Αυτά τα ζητήματα δεν σχετίζονται με την εκτέλεση κώδικα (καθώς συνεχίζονται όταν η Python δεν εκτελείται), ωστόσο επιδεινώνονται από αυτό το μίνι παιχνίδι. Εάν το Pi σας δυσκολεύεται πραγματικά, μπορεί να θέλετε να μειώσετε το μέγεθος της αρένας ή να κάνετε overclock το Pi σας.

καλύτερες εφαρμογές γνωριμιών για νέους ενήλικες

Ανιχνευτής διαμαντιών

Ας κάνουμε άλλο κύκλωμα. Αυτό θα χρησιμοποιήσει μια δίοδο εκπομπής φωτός (LED) για να ανάψει όταν υπάρχουν διαμάντια από κάτω (εντός 15 τεμαχίων). Εδώ είναι αυτό που χρειάζεστε:

  • 1 x Breadboard
  • 1 x LED
  • Αντίσταση 1 x 220 ohm
  • Γυναικεία> αρσενικά καλώδια άλματος
  • Ανδρικά> Ανδρικά καλώδια άλματος

Ιδού το κύκλωμα:

Συνδέστε το Anode (μακρύ πόδι) στο GPIO Pin 14. Αυτός ο πείρος λειτουργεί σαν +5v. Συνδέστε το Cathode (κοντό πόδι) στη γείωση.

Έχω χρησιμοποιήσει ένα φτηνό παιχνίδι μεταλλεύματος και το τροποποίησα αφαιρώντας το πίσω κάλυμμα και τα ηλεκτρονικά, και έπειτα τοποθέτησα ένα LED κάτω από αυτό. Θα μπορούσατε εύκολα να το κάνετε μόνιμο με ζεστή κόλλα ή κάτι παρόμοιο.

Αποθηκεύστε αυτόν τον κωδικό ως ' διαμάντια.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

Όταν υπάρχει ένα μπλοκ διαμαντένιου μεταλλεύματος κάτω από τη συσκευή αναπαραγωγής (εντός 15 μπλοκ) το φως θα αναβοσβήνει.

ThinkGeek Minecraft Light -Up Blue Stone Diamond Ore - Sure to Keep Pigmen Away ΑΓΟΡΑ ΤΩΡΑ ΣΤΟ AMAZON

Έχετε φτιάξει κάτι υπέροχο με το Minecraft Pi; Ενημερώστε με στα σχόλια τι φτιάξατε ή πόσο μακριά τα καταφέρατε στα παιχνίδια.

Ελπίζουμε να σας αρέσουν τα αντικείμενα που προτείνουμε και συζητάμε! Το MUO έχει συνεργασίες θυγατρικών και χορηγούς, οπότε λαμβάνουμε ένα μερίδιο των εσόδων από ορισμένες από τις αγορές σας. Αυτό δεν θα επηρεάσει την τιμή που πληρώνετε και μας βοηθά να προσφέρουμε τις καλύτερες προτάσεις προϊόντων.

Μερίδιο Μερίδιο Τιτίβισμα ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Αξίζει την αναβάθμιση σε Windows 11;

Τα Windows έχουν επανασχεδιαστεί. Είναι όμως αυτό αρκετό για να σας πείσει να μεταβείτε από τα Windows 10 στα Windows 11;

Διαβάστε Επόμενο
Σχετικά θέματα
  • DIY
  • Προγραμματισμός
  • Minecraft
  • Raspberry Pi
  • ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
  • Πύθων
Σχετικά με τον Συγγραφέα Τζο Κόμπερν(136 δημοσιευμένα άρθρα)

Ο Joe είναι απόφοιτος της Επιστήμης των Υπολογιστών από το Πανεπιστήμιο του Lincoln, Ηνωμένο Βασίλειο. Είναι επαγγελματίας προγραμματιστής λογισμικού και όταν δεν πετάει με drones ή δεν γράφει μουσική, μπορεί συχνά να βρεθεί να βγάζει φωτογραφίες ή να παράγει βίντεο.

Περισσότερα από τον Joe Coburn

Εγγραφείτε στο newsletter μας

Εγγραφείτε στο ενημερωτικό μας δελτίο για τεχνικές συμβουλές, κριτικές, δωρεάν ebooks και αποκλειστικές προσφορές!

Κάντε κλικ εδώ για εγγραφή
Κατηγορία Diy