เรียนรู้ Python และอิเล็กทรอนิกส์ด้วย Minecraft Pi Edition

เรียนรู้ Python และอิเล็กทรอนิกส์ด้วย Minecraft Pi Edition

คุณเคยต้องการที่จะเรียนรู้การเขียนโค้ดแต่ไม่รู้ว่าจะเริ่มต้นจากตรงไหน? เรียนรู้วิธีควบคุม Minecraft บน Raspberry Pi โดยใช้ Python และอุปกรณ์อิเล็กทรอนิกส์อย่างง่าย นี่คือผลลัพธ์สุดท้าย:





คุณจะต้องใช้ Pi 2 หรือใหม่กว่าสำหรับโปรเจ็กต์นี้ และในขณะที่คุณสามารถทำงานเหล่านี้ส่วนใหญ่ผ่านบรรทัดคำสั่งผ่าน Secure Shell (SSH) ได้ บทช่วยสอนนี้จะเน้นที่การเขียนโค้ดโดยตรงบน Pi





ยังใหม่กับมายคราฟ? ไม่ต้องกังวล - นี่คือของเรา คู่มือสำหรับผู้เริ่มต้น Minecraft .





บทนำสู่ Minecraft Pi

Minecraft สำหรับ Raspberry Pi ได้รับการพัฒนาเพื่อการเรียนรู้และซ่อมแซม (และใช้งานได้ฟรี) มันมาพร้อมกับ Application Programming Interface (API) ที่ให้โค้ดคุยกับ Minecraft อย่างง่ายดาย มันยอดเยี่ยมมากสำหรับการเรียนรู้วิธีเขียนโค้ดใน Python รวมถึงการเริ่มต้นใช้งานอุปกรณ์อิเล็กทรอนิกส์

ไพทอนคืออะไร?

Python เป็นภาษาโปรแกรม มันคือ ตีความ ซึ่งหมายความว่าเมื่อคุณเรียกใช้ไฟล์หรือโปรแกรม Python คอมพิวเตอร์จะต้องทำงานเล็กน้อยกับไฟล์ก่อน ข้อเสียคือถือว่าช้าเมื่อเทียบกับภาษาที่คอมไพล์ [Broken URL Removed]



ประโยชน์ของภาษาที่แปลคือความเร็วในการเขียนโค้ดและความเป็นมิตร ไม่ต้องบอกคอมพิวเตอร์ อะไร ข้อมูลที่คุณต้องการจัดเก็บ เพียงว่าคุณต้องการจัดเก็บข้อมูลบางอย่างและคอมพิวเตอร์จะคิดออกว่าต้องทำอย่างไร แน่นอนว่ามีข้อยกเว้น และนี่เป็นมุมมองที่ค่อนข้างง่าย แต่การเขียนโปรแกรมควรจะสนุก! หากคุณเริ่มเจาะลึกรายละเอียดทางเทคนิคที่ซับซ้อน มันอาจจะลำบากสักหน่อย

Python คำนึงถึงขนาดตัวพิมพ์ นี่เป็นสิ่งสำคัญที่ต้องรู้ เนื่องจาก Python จะไม่รู้จักอ็อบเจกต์ แม้จะสะกดถูกก็ตาม หากเป็นกรณีที่ไม่ถูกต้อง 'Dosomething()' จะไม่ทำงานหากวิธีการนี้เรียกว่า 'DoSomething()' Python ยังใช้การเยื้อง . ภาษาโปรแกรมอื่น ๆ อาจไม่สนใจว่าโค้ดของคุณมีการเยื้องมากแค่ไหน ในขณะที่Python ทำ ดูแล. เยื้องใช้เพื่อบอก Python ว่ารหัสอยู่ที่ไหน ภาษาอื่นอาจใช้ 'Curly Braces' ({}) เพื่อจัดกลุ่มโค้ด -- Python ไม่ได้ใช้สิ่งเหล่านี้ Python ใช้แฮช (#) สำหรับความคิดเห็น และความคิดเห็นใช้เพื่อบอกนักพัฒนาคนอื่นๆ หรือผู้ที่ดูโค้ดว่าส่วนใดส่วนหนึ่งทำอะไรบ้าง หรือเหตุใดจึงจำเป็นต้องใช้ Python ละเว้นสิ่งใดหลังจากแฮช





สุดท้าย มี 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 ซึ่งย่อมาจาก Print Working Directory:

pwd

เริ่ม Minecraft โดยไปที่ เมนู > เกม > Minecraft Pi . คุณจะต้องใช้การทำงานนี้ แต่จะกลับมาดำเนินการในภายหลัง

เปิด Python 3 จาก เมนู > การเขียนโปรแกรม > Python 3 (IDLE) . โปรแกรมนี้จะช่วยให้คุณรันคำสั่ง Python และเขียนโปรแกรมได้

ตอนนี้คุณสามารถพิมพ์คำสั่ง Python ของคุณได้ที่นี่ แต่นั่นก็ไม่ค่อยได้ผล ไปที่ ไฟล์ > ไฟล์ใหม่ แล้วก็ ไฟล์ > บันทึก และบันทึกไว้ในโฟลเดอร์ที่คุณสร้างไว้ก่อนหน้านี้ ( Documents > 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!')

ตอนนี้ หากคุณบันทึกและเรียกใช้ไฟล์นี้ คุณจะเห็น 'สวัสดี ชาวโลก!' ปรากฏในเกมมายคราฟ มาแจกแจงโค้ดกัน:

from mcpi.minecraft import Minecraft

บรรทัดนี้บอก Python ว่าคุณต้องการใช้โค้ดจากไฟล์อื่น ไฟล์ mcpi.minecraft นี้พัฒนาขึ้นเพื่อให้ควบคุม Minecraft ได้ง่าย

mc = Minecraft.create()

บรรทัดนี้สร้างวัตถุที่เรียกว่า 'mc' (Minecraft) คุณต้องสร้างสิ่งนี้เพื่อให้สามารถสื่อสารกับเกม Minecraft ได้ - การรวมไฟล์นั้นไม่เพียงพอ

mc.postToChat('Hello, World!')

สุดท้าย บรรทัดนี้บอกให้ Minecraft เขียนข้อความลงในแชท ลองเปลี่ยน 'สวัสดี ชาวโลก!' อย่างอื่นและดูว่าเกิดอะไรขึ้น แต่อย่าลืมใส่เครื่องหมายคำพูดทั้งสองด้วย หากคุณกำลังมีปัญหาเกี่ยวกับซอฟต์แวร์ ข้อผิดพลาดเหล่านี้คือข้อผิดพลาดทั่วไปของ Python และ Minecraft Pi:

  • AttributeError -- นี่คือการพิมพ์ผิด เช่น pint หรือ prnt แทนการพิมพ์
  • NameError: ไม่ได้กำหนดชื่อ 'Minecraft' - อย่าลืมนำเข้าโมดูลที่คุณต้องการ
  • NameError: ไม่ได้กำหนดชื่อ 'จริง' -- Python คำนึงถึงขนาดตัวพิมพ์ เปลี่ยนเป็น 'จริง'
  • socket.error: [Errno 111] การเชื่อมต่อถูกปฏิเสธ -- ตรวจสอบให้แน่ใจว่า Minecraft กำลังทำงานอยู่

โครงการ

ตอนนี้คุณรู้พื้นฐานของ Python และ Minecraft แล้ว มาสร้างโปรเจ็กต์เจ๋งๆ กัน โค้ดทั้งหมดสามารถดาวน์โหลดได้จาก Github

ตัวสร้างสะพานอัตโนมัติ

โปรแกรมนี้จะสร้างสะพานข้ามน้ำได้อย่างมีประสิทธิภาพ เมื่อผู้เล่นเข้าใกล้แหล่งน้ำ โปรแกรมจะแปลงหลายบล็อกเป็นหิน เนื่องจาก 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() คือ block id หนึ่งคือรหัสบล็อกสำหรับหิน คุณสามารถเปลี่ยนเป็นไม้ หญ้า หรืออะไรก็ได้ หากคุณต้องการ คุณสามารถเปลี่ยนสิ่งนี้เป็นการออกแบบที่ซับซ้อน อาจเป็นสะพานแขวนก็ได้!

ปุ่ม Super Mining

ตัวอย่างนี้จะทำให้การขุดสั้น ๆ ประกอบด้วยปุ่มทางกายภาพซึ่งเมื่อกดจะขุด 10 บล็อกลูกบาศก์ เริ่มจากปุ่มกันก่อน เช่นเดียวกับปุ่มต่างๆ บน Arduino คุณจะต้องมีอุปกรณ์อิเล็กทรอนิกส์จำนวนเล็กน้อย ซึ่งทั้งหมดนี้ควรอยู่ในชุดเริ่มต้นพื้นฐาน :

  • 1 x เขียงหั่นขนม
  • 1 x สวิตช์ชั่วขณะ
  • ตัวต้านทาน 1 x 220 โอห์ม
  • หญิง > สายกระโดดชาย
  • ชาย > สายกระโดดชาย

นี่คือวงจร:

Pi-ปุ่ม-การเชื่อมต่อ

ตัวต้านทานนี้เรียกว่าตัวต้านทานแบบ 'ดึงลง' ช่วยให้มั่นใจว่าสิ่งที่ Pi คิดคือปุ่มที่กำลังกดอยู่ คือปุ่มที่กำลังกดอยู่จริงๆ คุณไม่จำเป็นต้องใช้สิ่งนี้ อย่างไรก็ตาม ขอแนะนำ เนื่องจากคุณอาจพบว่ามีเสียงรบกวนและการอ่านผิดพลาดหากไม่มีมัน

ปุ่มนี้เชื่อมต่อกับพิน General Purpose Input Output (GPIO) 14 คุณสามารถใช้พิน GPIO ใดก็ได้ แต่ดูที่ pinout ประการแรกเนื่องจากไม่สามารถควบคุมได้จาก Pi ทั้งหมดและแตกต่างกันเล็กน้อยระหว่างรุ่นต่างๆ

เมื่อเชื่อมต่อปุ่มแล้ว ก็ถึงเวลาทดสอบ สร้างไฟล์ใหม่และบันทึกเป็น ' button_test.py '. เพิ่มรหัสนี้ บันทึกแล้วเรียกใช้ใน Terminal

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

กด ควบคุม + C เพื่อหยุดสคริปต์ หากทุกอย่างถูกต้อง คุณจะเห็น 'BUTTON WORKS!' ในเทอร์มินัล สังเกตว่า เช่นเดียวกับโมดูล 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 NS setBlocks() วิธีบอกให้ Minecraft เติมบล็อคทั้งหมดระหว่างจุดเริ่มต้นและจุดสิ้นสุดด้วยบล็อกต่อไปนี้ Zero คือ block-id สำหรับอากาศ คุณสามารถเปลี่ยนเป็น 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

รหัสนี้เป็นการเริ่มต้นที่ดีใน สุ่ม() การทำงาน: random.uniform(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 ของคุณมีปัญหาจริงๆ คุณอาจต้องการลดขนาดของเวทีหรือโอเวอร์คล็อก Pi ของคุณ

windows 10 การจัดการหน่วยความจำหน้าจอสีน้ำเงิน

เครื่องตรวจจับเพชร

มาทำวงจรอื่นกันเถอะ ซึ่งจะใช้ Light Emitting Diode (LED) เพื่อส่องสว่างเมื่อมีเพชรอยู่ข้างใต้ (ภายใน 15 บล็อก) นี่คือสิ่งที่คุณต้องการ:

  • 1 x เขียงหั่นขนม
  • 1 x LED
  • ตัวต้านทาน 1 x 220 โอห์ม
  • หญิง > สายกระโดดชาย
  • ชาย > สายกระโดดชาย

นี่คือวงจร:

เชื่อมต่อขั้วบวก (ขายาว) กับ GPIO Pin 14 พินนี้ทำหน้าที่เหมือน +5v. เชื่อมต่อแคโทด (ขาสั้น) กับพื้น

ฉันใช้ของเล่นแร่ราคาถูกและดัดแปลงโดยถอดฝาครอบด้านหลังและอุปกรณ์อิเล็กทรอนิกส์ออก จากนั้นจึงวางไฟ LED ไว้ข้างใต้ คุณสามารถทำให้ถาวรด้วยกาวร้อนหรือสิ่งที่คล้ายกัน

บันทึกรหัสนี้เป็น ' diamonds.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 แร่เพชรสีน้ำเงิน - แน่ใจว่าจะเก็บ Pigmen ไว้ ซื้อเลยที่ AMAZON

คุณทำอะไรเจ๋ง ๆ กับ Minecraft Pi หรือไม่? แจ้งให้เราทราบในความคิดเห็นว่าคุณทำอะไรหรือเล่นเกมได้ไกลแค่ไหน

เราหวังว่าคุณจะชอบรายการที่เราแนะนำและพูดคุย! MUO มีพันธมิตรในเครือและผู้สนับสนุน ดังนั้นเราจึงได้รับส่วนแบ่งรายได้จากการซื้อบางส่วนของคุณ การดำเนินการนี้จะไม่ส่งผลต่อราคาที่คุณจ่ายและช่วยให้เราเสนอคำแนะนำผลิตภัณฑ์ที่ดีที่สุด

แบ่งปัน แบ่งปัน ทวีต อีเมล การอัพเกรดเป็น Windows 11 คุ้มค่าหรือไม่?

Windows ได้รับการออกแบบใหม่ แต่นั่นเพียงพอที่จะโน้มน้าวให้คุณเปลี่ยนจาก Windows 10 เป็น Windows 11 หรือไม่

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • DIY
  • การเขียนโปรแกรม
  • Minecraft
  • ราสเบอร์รี่ปี่
  • อิเล็กทรอนิกส์
  • Python
เกี่ยวกับผู้เขียน โจ โคเบิร์น(ตีพิมพ์บทความ 136 บทความ)

โจสำเร็จการศึกษาด้านวิทยาการคอมพิวเตอร์จากมหาวิทยาลัยลินคอล์น สหราชอาณาจักร เขาเป็นนักพัฒนาซอฟต์แวร์มืออาชีพ และเมื่อเขาไม่ได้ขับโดรนหรือเขียนเพลง เขามักจะถูกมองว่าถ่ายภาพหรือผลิตวิดีโอ

เพิ่มเติมจาก Joe Coburn

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก
หมวดหมู่ Diy