สารบัญ:

Flappy Bird บน ATtiny85 และ OLED Display SSD1306: 6 ขั้นตอน (พร้อมรูปภาพ)
Flappy Bird บน ATtiny85 และ OLED Display SSD1306: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Flappy Bird บน ATtiny85 และ OLED Display SSD1306: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Flappy Bird บน ATtiny85 และ OLED Display SSD1306: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Buffered OLED Display 2024, กันยายน
Anonim
Image
Image
ฮาร์ดแวร์
ฮาร์ดแวร์

เฮ้ทุกคน, วันนี้ฉันจะแสดงให้คุณเห็นโคลนนิ่งนกพื้นฐานที่ฉันสร้างขึ้น และวิธีที่คุณจะทำเกมที่คล้ายกัน โดยพื้นฐานแล้วฉันจะใช้รหัสของฉันกับคุณและอธิบายว่ามันทำงานอย่างไรในทุกขั้นตอน เกมนี้สร้างขึ้นเพื่อทำงานบน ATtiny85 โอเวอร์คล็อกที่ 1MHz พร้อมจอแสดงผล I2C OLED ต่อไปข้างหน้า!

ขั้นตอนที่ 1: ฮาร์ดแวร์

หากคุณไม่ได้สนใจที่จะสร้างวงจรสำหรับเกมจริงๆ แต่เข้าใจทฤษฎีเบื้องหลัง คุณสามารถข้ามขั้นตอนนี้ได้

เกมของฉันต้องใช้สองปุ่ม ได้แก่ ATtiny85 หน้าจอ I2C OLED 128x64px และแหล่งพลังงานบางส่วน นามบัตร/เกมคอนโซลที่สอนได้ของฉัน: หน้าจอ ATtiny85 และ OLED จะแสดงวิธีสร้างบอร์ดที่มีทุกสิ่งที่คุณต้องการ หากคุณไม่สนใจที่จะทำบอร์ดของฉัน ให้เอาเขียงหั่นขนมของคุณออกมา แล้วฉันจะบอกข้อมูลจำเพาะให้คุณทราบ คุณสามารถใช้ ATtiny85 รุ่นใดก็ได้ ฉันแนะนำจอแสดงผล OLED แบบนี้

  1. ต่อด้านหนึ่งของปุ่มกดสองปุ่มเข้ากับหมุด 2 และ 3 บน ATtiny85 ของคุณ บนสายไฟเหล่านี้ ให้เพิ่มตัวต้านทาน 10k ohm ที่เชื่อมต่อกับกราวด์ด้วย (ตัวต้านทานแบบดึงลง)
  2. ต่ออีกด้านของปุ่มกดเหล่านี้เข้ากับแรงดันไฟฟ้า เมื่อไม่ได้กดปุ่ม สถานะพินจะต่ำ เมื่อกดแล้ว สถานะพินจะสูง
  3. เชื่อมต่อพิน 7 กับพิน SCL บนจอแสดงผล และพิน 5 กับพิน SDA บนจอแสดงผลของคุณ ต่อสายไฟ (VCC และ GND) บนจอแสดงผลตามลำดับ
  4. สุดท้าย เชื่อมต่อพิน 4 บน ATtiny กับกราวด์ และพิน 8 กับแรงดันไฟฟ้า

ขั้นตอนที่ 2: ซอฟต์แวร์

ซอฟต์แวร์!
ซอฟต์แวร์!

แนบมาที่นี่คือโฟลเดอร์ที่มีไฟล์ทั้งหมดที่คุณต้องการเพื่อเรียกใช้เกม ไฟล์สองไฟล์ FlappyBird.ino และ WallFunctions.h ได้รับการวิจารณ์อย่างดีเพื่อความเพลิดเพลินในการอ่านของคุณ คุณสามารถอัปโหลดภาพร่าง FlappyBird.ino ไปยัง ATtiny85 ของคุณ (ที่ 1MHz) แล้วเล่นได้เลย! หากการเรียนรู้ทฤษฎีเบื้องหลังเกมนี้สนใจคุณ หรือคุณต้องการสร้างเกมของคุณเอง อ่านต่อ!

ยังมีปัญหาเล็กน้อยกับเกมของฉัน I2C ไม่ใช่วิธีที่ดีที่สุดในการส่งข้อมูลด้วยวิธีการใดๆ ตามโพสต์นี้ จอแสดงผลสามารถรับข้อมูลที่ประมาณ 100KHz เท่านั้น ดังนั้นแม้ว่าเราจะเพิ่มความเร็วสัญญาณนาฬิกา ATtiny เป็น 8MHz ช่องสัญญาณ I2C ก็ยังคงเป็นคอขวด จอแสดงผลสามารถส่งออกได้สูงสุดประมาณ 10fps ยิ่งต้องวาดภาพแยกกันมากเท่าใด กระบวนการทั้งหมดก็จะยิ่งช้าลงเท่านั้น ดังนั้นเกมของฉันจึงค่อนข้างง่ายเพราะคุณไม่สามารถทำให้กำแพงเคลื่อนที่อย่างรวดเร็วผ่านหน้าจอได้! ด้านล่างนี้คือความท้าทายบางอย่างสำหรับคุณ หากคุณคิดว่าคุณพร้อมทำงาน:

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

ขั้นตอนที่ 3: Flappy Bird ATtiny85: ทฤษฎี

Flappy Bird ATtiny85: ทฤษฎี
Flappy Bird ATtiny85: ทฤษฎี

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

ในโปรแกรม แต่ละวอลล์จะแสดงเป็นโครงสร้าง เรียกว่า วอลล์ โครงสร้างผนังแต่ละอันมีคุณสมบัติสองประการ - ตำแหน่งรูและคอลัมน์ 'ตำแหน่งหลุม' คือตัวเลข 0-6 เนื่องจากมีเพียง 7 ตำแหน่งที่เป็นไปได้ในกำแพง 8 ช่วงตึกสำหรับหลุมสูง 2 ช่วงตึก 'คอลัมน์' เป็นตัวเลข 0-15 เนื่องจากมีบล็อก 16 คอลัมน์บนหน้าจอ

แนะนำ: