กลับไปหน้ารวมไฟล์
challenging-maze-game-42dda2.md

บทนำ

โปรเจกต์นี้คือเกมเขาวงกตสำหรับ Arduino ผมพัฒนาโค้ดนี้ขึ้นมาโดยเฉพาะสำหรับ Arduino Esplora แต่สามารถนำไปใช้กับ Arduino รุ่นอื่นได้โดยการแทนที่ไลบรารี Esplora และ EsporaTFT ด้วยโค้ดที่บริสุทธิ์กว่า เขาวงกตเป็นลำดับของอักขระ 't' (เส้นทาง) และ 'f' (กำแพง) ซึ่งประกอบกันเป็นกริด ขนาดของเขาวงกตคือ 64x64 และจะแสดงผลใน 4 ควอดแรนท์ (quadrants) โดยแต่ละควอดแรนท์มีขนาด 32x32 ไทล์ (tiles) เมื่อผู้เล่นไปถึงขอบของควอดแรนท์ เกมจะแสดงผลควอดแรนท์ถัดไป

รูปแบบไฟล์เขาวงกต:

<int>;<int>;<int>;<int>!<char[1024]!<char[1024]!<char[1024]!<char[1024]

ซึ่งหมายถึง:

entryRow, entryCol, exitRow, exitCol, quadrant0, quadrant1, quadrant2, quadrant3

ควอดแรนท์จะแสดงผลดังนี้:

0000 ... 1111
0000 ... 1111
0000 ... 1111
.... ....
2222 ... 3333
2222 ... 3333
2222 ... 3333

ขอบของเขาวงกตขนาด 64x64 ควรสร้างจากกำแพง ('f') ยกเว้นส่วนทางเข้าและทางออก ควรมีบล็อกทางเดินเพียงสองบล็อกบนขอบของเขาวงกต ซึ่งจะเป็นทางเข้าและทางออกของเขาวงกต สามารถโหลดไฟล์เขาวงกตได้ไม่จำกัดจำนวน (ผมจัดเตรียมไฟล์ ZIP ที่มีเขาวงกตที่สร้างแบบสุ่มมาให้บางส่วน)

ฮาร์ดแวร์

ฮาร์ดแวร์เดียวที่ใช้ในโปรเจกต์นี้คือ:

  • Micro SD card

การติดตั้ง

  • แตกไฟล์แพ็คเขาวงกตลงในรูท (root) ของ micro SD card
  • คอมไพล์ Sketch ด้วย Arduino IDE และอัปโหลดไปยัง Arduino Esplora ของคุณ

การใช้งาน

การเลือกเขาวงกต

  • Joystick - เลือกดู / เลือกเขาวงกต
  • Top button - ดูตัวอย่างเขาวงกต
  • Bottom button - เริ่มเกมเขาวงกต

เกมเขาวงกต

  • Joystick - เคลื่อนที่ผ่านเขาวงกต
  • Top button - ดูตัวอย่างเขาวงกตทั้งหมด
  • Right button - ยกเลิกเขาวงกตและกลับไปยังหน้าจอการเลือก

หน้าจอชัยชนะ

  • Bottom button - ปิดและกลับไปยังหน้าจอเลือกเขาวงกต

ข้อเสนอแนะ?

ผมยินดีรับฟังความคิดเห็นทุกประเภท เพียงส่งข้อความหรือโพสต์ในส่วนของ issues ขอบคุณครับ!

รายละเอียดทางเทคนิคเพิ่มเติม

ตรรกะของปริศนาเชิงโต้ตอบ

โปรเจกต์นี้สร้างเกม "Labyrinth" ที่อิงหลักฟิสิกส์ ซึ่งผู้เล่นจะนำลูกบอลเสมือนจริงเคลื่อนที่ผ่านเขาวงกตโดยใช้ Joystick หรือ Accelerometer

  • การทำแผนที่กริด 2D: เค้าโครงเขาวงกตจะถูกเก็บไว้ในหน่วยความจำของ Arduino ในรูปแบบอาร์เรย์ 2D (Bitmask) โดยที่ 1 หมายถึงกำแพง และ 0 หมายถึงเส้นทาง ตำแหน่งของผู้เล่น $(X, Y)$ จะได้รับการอัปเดตทุกเฟรมตามอินพุต
  • การตรวจจับการชน: เฟิร์มแวร์จะตรวจสอบเซลล์กริดโดยรอบอย่างต่อเนื่อง หากผู้เล่นพยายามเคลื่อนที่เข้าไปในเซลล์กำแพง (1) การเคลื่อนที่นั้นจะถูกบล็อก เพื่อเลียนแบบการชนทางกายภาพ

กลไกของเกม

  • ตัวจับเวลาและระดับ: มีตัวจับเวลาความแม่นยำสูงโดยใช้ millis() เวอร์ชันขั้นสูงจะมีหลายระดับที่เก็บไว้ใน Flash memory พร้อมความยากที่เพิ่มขึ้นและเส้นทางที่แคบลง ซึ่งมอบประสบการณ์การเล่นเกมที่ท้าทายและประณีตบน I2C OLED หรือ TFT screen

ข้อมูล Frontmatter ดั้งเดิม

title: "Challenging Maze Game"
description: "A fun maze game for Arduino (optimized for Esplora) that uses a large map."
author: "gmussi"
category: "Gadgets, Games & Toys"
tags:
  - "maze"
  - "games"
views: 7784
likes: 5
price: 2450
difficulty: "Easy"
components:
  - "1x Arduino LCD Screen"
  - "1x Arduino UNO"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://github.com/gmussi/Arduino-Esplora-Maze-Game"
  - "https://github.com/gmussi/Arduino-Esplora-Maze-Game"
documentationLinks: []
passwordHash: "c25e6e039b104c4c7372222c9a671162832b5c09a1b0520d2df7dc346dab6d64"
encryptedPayload: "U2FsdGVkX18hUwds0oIhoL9VXy8zchPG5gLsd0InhXhidBnLnHc2Gm7U4V7s4pRvJTZXywsfh34+zlBYfX57LIpVKv82C2SOWRWp8jTv7k0="
seoDescription: "Challenging Maze Game for Arduino and Esplora featuring large maps and fun gameplay."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/challenging-maze-game-42dda2_cover.PNG"
lang: "th"