สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12
ในบทความก่อนหน้านี้ เราได้สำรวจการสร้างเกมบน GameGo ซึ่งเป็นคอนโซลเกมย้อนยุคแบบพกพาที่พัฒนาโดยการศึกษาของ TinkerGen เกมที่เราสร้างนั้นชวนให้นึกถึงเกม Nintendo เก่า ในบทความของวันนี้ เราจะย้อนกลับไปสู่ยุคทองของเกมอาร์เคด เราจะสร้างเกม Space Invaders ขึ้นมาใหม่ใน Micropython บนไมโครคอนโทรลเลอร์ Micro:bit - และในทางกลับกัน เราจะใช้ส่วนขยาย BitPlayer Micro:bit ซึ่งช่วยให้เราเล่นเกมได้สะดวกยิ่งขึ้น
เนื่องจากบทช่วยสอนนี้เกี่ยวกับการเขียนโค้ดเกมใน Micropython แทนที่จะใช้การเรียงลำดับแบบทีละขั้นแบบเดิมๆ ที่เราเคยใช้ก่อนหน้านี้สำหรับบทช่วยสอนการเขียนโปรแกรมแบบกราฟิก เราจะพูดถึงการบล็อกโค้ดทีละบล็อก โดยจะกล่าวถึงฟังก์ชัน คลาส และส่วนหลักที่สำคัญ ห่วง คุณสามารถดาวน์โหลดโค้ดแบบเต็มได้ในที่เก็บ GitHub ของโปรเจ็กต์นี้ หัวเข็มขัดขึ้นและเริ่มกันเลย!
เสบียง
TinkerGen BitPlayer
BBC Micro:bit
ขั้นตอนที่ 1: วงหลัก
ในบทช่วยสอนนี้ ฉันจะใช้คำว่า "วิธีการ" ค่อนข้างบ่อย เมธอดใน python ค่อนข้างคล้ายกับฟังก์ชัน ยกเว้นว่ามันเกี่ยวข้องกับอ็อบเจกต์/คลาส ดังนั้น เพื่อให้เข้าใจง่ายขึ้น คุณสามารถอ่านเป็น "ฟังก์ชันภายในคลาส" ได้ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับวิธีการได้ที่นี่
เราเข้าสู่วงหลักด้วย
ในขณะที่ไม่ใช่ game_over:
สภาพ. ภายในเราได้รับจำนวนผู้บุกรุก โอกาสที่พวกเขาจะปรากฏตัว และจำนวนที่จำเป็นเพื่อไปยังระดับถัดไปจากพจนานุกรมระดับ ต่อไปเราจะตรวจสอบการเคลื่อนไหวซ้ายขวาด้วยวิธีการอินสแตนซ์ Listen_Dir ของอินสแตนซ์คลาส JoyStick หากเงื่อนไขใดประเมินเป็น True เราจะเพิ่ม/ลดค่า x ของตัวละครที่เล่นได้ เราจำกัดมันเป็น [-2, 2] ด้วยเงื่อนไขสองข้อ จากนั้นเราจะเริ่มต้นอินสแตนซ์ของคลาส DisplayBuffer และตรวจสอบการกดปุ่ม "shield" หรือ "fire bullet" เราใช้เมธอด DisplayBuffer.set() เพื่อตั้งค่าอ็อบเจ็กต์สำหรับการเรนเดอร์ในภายหลัง สำหรับการเรนเดอร์ชีลด์ เราใช้ DisplayBuffer.set() โดยตรง แต่สำหรับกระสุนและผู้บุกรุก เราเพิ่มพวกมันลงในรายการตามลำดับและ set() ทีละรายการในลูปด้วยโค้ดต่อไปนี้สำหรับการเรนเดอร์ในภายหลังด้วย DispBuffer.render():
สำหรับ b ในสัญลักษณ์แสดงหัวข้อย่อย: b.render(dispBuf) สำหรับ v ใน vaders: v.render(dispBuf)
ผู้บุกรุก กระสุน และโล่ทั้งหมดจะแสดงขึ้นทุกครั้งที่มีการวนซ้ำหลักด้วย
dispBuf.render()
ก่อนสิ้นสุดลูปหลัก เราจะตรวจสอบว่ากระสุนของผู้บุกรุกมาถึงจุดสิ้นสุดของหน้าจอหรือไม่ และหากเป็นเช่นนั้น เราจะลบออกจากรายการที่เกี่ยวข้อง
ขั้นตอนที่ 2: จอยสติ๊ก
BitPlayer ถือและใช้งานง่ายด้วยจอยสติ๊ก 2 แกนเช่นตัวควบคุม Gameboy หรือ PSP นอกจากนี้ยังมีปุ่มตั้งโปรแกรมอีก 6 ปุ่มที่มีป้ายกำกับว่า L, R, A, B, C และ D สำหรับประสบการณ์ที่ดื่มด่ำและโต้ตอบได้ BitPlayer มีออด มอเตอร์สั่น และพอร์ต Grove I2C เพื่อเชื่อมต่ออุปกรณ์ต่อพ่วงเพิ่มเติม เช่น จอภาพ OLED
เราใช้คันโยกโยกซ้าย-ขวาของจอยสติ๊กสำหรับเกมนี้ เช่น ตัวอย่างเต็มรูปแบบเกี่ยวกับการใช้ปุ่ม BitPlayer ทั้งหมด คุณสามารถดูที่ joystick_example.py ในที่เก็บ GitHub ของโปรเจ็กต์นี้ ในการสร้างอินสแตนซ์ของคลาส JoyStick เราจะตรวจสอบการอ่านเริ่มต้นของแกน X และเก็บค่านั้นไว้ในตัวเอง Read_X จากนั้นในฟังก์ชัน Listen_Dir เราจะตรวจสอบว่าค่าเบี่ยงเบนจากค่าเริ่มต้นนั้นสูงกว่าตัวแปรความไวหรือไม่ (ลองปรับแต่งเอง หากคุณรู้สึกว่า JoyStick มีความละเอียดอ่อนเกินไป) และคืนค่า True ของ False ตามทิศทางที่ตรวจพบ
มาดูตัวอย่างที่เป็นรูปธรรมเกี่ยวกับวิธีการทำงาน:
สมมติว่าการอ่านแกน X เริ่มต้นของเราคือ 0 หากเราเลื่อนจอยสติ๊กไปทางขวา:
New_X = JoyStick_X.read_analog() #New_X=200
ขวา = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200
จากนั้นเมื่อเราตรวจสอบทิศทาง:
ความแม่นยำ = 150ถ้าถูกต้อง > ความแม่นยำ: #200 > 150 True Get_Rocker = DIR['R'] elif Left > ความแม่นยำ: #-200 > 150 False Get_Rocker = DIR['L'] อื่น: Get_Rocker = DIR['NONE'] ถ้า Dir == Get_Rocker: return True else: return False
ขั้นตอนที่ 3: แสดงบัฟเฟอร์
คลาส DisplayBuf มีหน้าที่ควบคุมหน้าจอ LED มันทำได้โดยใช้สองวิธีคือ set() และ render() set() วิธีการเปลี่ยนค่าที่สอดคล้องกับพิกเซลหน้าจอ LED คุณอาจจำได้ว่าพิกเซลบนหน้าจอ Micro:bit LED สามารถแสดงเป็นสตริงหรือรายการ - "00000:00000:000000:00000:00000" เป็นหน้าจอว่าง "00000:00000:00000:00000:00100" เป็นหน้าจอที่มีพิกเซลแสงสลัวอยู่ตรงกลางแถวด้านล่าง
00000:
00000
:00000
:00000:
00100"
สัญกรณ์นี้อาจดำเนินการได้ง่ายขึ้น:)
ดังนั้น สิ่งที่เราทำระหว่าง main loop คือ call set() method ของ DisplayBuf เพื่อตั้งค่าอ็อบเจกต์ทั้งหมดของเราที่ต้องแสดงบนหน้าจอ จากนั้นเราใช้เมธอด render() เพื่อแสดงทั้งหมดบนหน้าจอพร้อมกัน
ขั้นตอนที่ 4: ผู้บุกรุก กระสุน และผู้เล่น
Bullets and Invaders เป็นของคลาส Mover อินสแตนซ์คลาสของผู้เสนอญัตติมีตำแหน่ง x, y และความเร็ว รวมถึงความสว่าง คลาสผู้เสนอญัตติมีสองเมธอด set() และ move() เมธอด set() เรียกเมธอด DisplayBuf set() พร้อมพิกัดที่อัปเดตเพื่อบันทึกสำหรับการเรนเดอร์ในภายหลังบนเมทริกซ์ LED move() วิธีการอัพเดทอินสแตนซ์ประสานงานตามความเร็วของอินสแตนซ์ - ซึ่งจะมีประโยชน์ในภายหลัง เมื่อเราต้องการเปลี่ยนความเร็วของผู้บุกรุกตามระดับความคืบหน้า
Class Bullet และ class Invader เป็นคลาสย่อยของคลาส Mover ที่นี่เราใช้สิ่งที่เรียกว่ามรดก ฟังก์ชันของ super() ทำให้เราสามารถเรียกเมธอดของ superclass ใน subclass โดยไม่ต้องทำซ้ำโค้ด
ขั้นตอนที่ 5: ทำให้เป็นของคุณเอง
ยินดีด้วย! คุณเพิ่งสร้างเกม Space Invaders สุดคลาสสิกบน Micro:bit ด้วยฮาร์ดแวร์เกมสุดเจ๋ง แน่นอน คุณสามารถปรับปรุงโค้ดเกมได้จากที่นี่ - ตัวอย่างเช่น ณ ตอนนี้ เกมมีเพียงระดับเดียวเท่านั้น - คุณสามารถเพิ่มระดับที่ท้าทายมากขึ้นได้ อย่างที่คุณอาจจำได้ เกมต้นฉบับมีหินลอยอยู่ด้านหน้าผู้เล่น ซึ่งคุณสามารถเพิ่มได้เช่นกัน
หากคุณสร้างเกมเวอร์ชันที่ปรับปรุงแล้ว แบ่งปันในความคิดเห็นด้านล่าง! สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ BitPlayer และฮาร์ดแวร์อื่นๆ สำหรับผู้ผลิตและผู้ให้การศึกษา STEM โปรดเยี่ยมชมเว็บไซต์ของเรา https://tinkergen.com/ และสมัครรับจดหมายข่าวของเรา
TinkerGen เพิ่งสร้างแคมเปญ Kickstarter สำหรับ MARK (Make A Robot Kit) ซึ่งเป็นชุดหุ่นยนต์สำหรับสอนการเขียนโค้ด หุ่นยนต์ AI!
รหัส Micropython ดั้งเดิมจาก hexkcd/micro-vaders ถูกเปลี่ยนเป็นทำงานกับ TinkerGen BitPlayer
แนะนำ:
Lego Portable Gaming Console พร้อม Space Invaders: 4 ขั้นตอน
Lego Portable Gaming Console พร้อม Space Invaders: คุณเคยคิดที่จะเป็นผู้พัฒนาเกมและสร้างคอนโซลเกมของคุณเองซึ่งคุณสามารถเล่นได้ทุกที่ทุกเวลาหรือไม่? สิ่งที่คุณต้องมีคือเวลาเพียงเล็กน้อย hardwareLego bricksa Mini-Calliope (สามารถสั่งซื้อได้ที่เว็บไซต์ https://calliope.cc/en) และทักษะบางอย่าง
LCD Invaders: Space Invaders Like Game บนจอแสดงผล LCD ขนาด 16x2: 7 ขั้นตอน
LCD Invaders: Space Invaders Like Game บนจอแสดงผล LCD ขนาด 16x2: ไม่จำเป็นต้องแนะนำเกม "Space Invaders" ในตำนาน คุณลักษณะที่น่าสนใจที่สุดของโครงการนี้คือการใช้การแสดงข้อความสำหรับการแสดงผลแบบกราฟิก ทำได้โดยใช้อักขระที่กำหนดเอง 8 ตัว คุณสามารถดาวน์โหลด Arduino
วิธีสร้าง Space Invaders บน Micro Bit.: 4 ขั้นตอน
วิธีสร้าง Space Invaders บน Micro Bit: ดังนั้นขั้นตอนแรกคือการสร้างเรือของเรา คุณไปที่ "พื้นฐาน" และเพิ่ม "เมื่อเริ่มต้น" บล็อก. จากนั้นไปที่ "ตัวแปร" และคุณสร้างตัวแปรชื่อ "SHIP" และเลือกบล็อกจากส่วน "ตัวแปร" แท็บเ
การเขียนโปรแกรม Micro:Bit Robot & Joystick:Bit Controller ด้วย MicroPython: 11 ขั้นตอน
การเขียนโปรแกรม Micro:Bit Robot & Joystick:Bit Controller ด้วย MicroPython: สำหรับ Robocamp 2019 ค่ายหุ่นยนต์ภาคฤดูร้อนของเรา คนหนุ่มสาวอายุ 10-13 ปีกำลังบัดกรี ตั้งโปรแกรม และสร้าง 'หุ่นยนต์น้ำหนักเกิน' ของ BBC micro:bit ตลอดจนการเขียนโปรแกรม micro:bit เพื่อใช้เป็นรีโมตคอนโทรล หากคุณอยู่ที่ Robocamp ให้เล่นสกี
Space Invaders Clock (ในราคาประหยัด!): 6 ขั้นตอน (พร้อมรูปภาพ)
Space Invaders Clock (ในราคาประหยัด!): เมื่อเร็ว ๆ นี้ฉันเห็นงานสร้างที่ยอดเยี่ยมโดย GeckoDiode และฉันต้องการสร้างมันเองทันที คำแนะนำคือนาฬิกาตั้งโต๊ะ Space Invaders และฉันแนะนำให้คุณดูหลังจากอ่านแล้ว โปรเจ็กต์นี้สร้างขึ้นเกือบทั้งหมดจากชิ้นส่วนที่มาจาก