
เจ้านี่คืออุปกรณ์ช่วยตัดสินใจขั้นเทพสำหรับเกมลับเต (Liar’s Dice) ครับน้อง เอาไว้ช่วยให้เราเรียกเบอร์ได้เป๊ะกว่าเดิม
ถ้ายังไม่รู้จักเกมลับเต แนะนำให้ไปดู Pirates of the Caribbean: Dead Man’s Chest ซะ จะได้เข้าใจกฎคร่าวๆ หรือไม่ก็ลองหาอ่านกฎแบบเต็มๆ ดูได้ (แต่เดี๋ยวพี่สรุปให้เอง) หลักการง่ายๆ มันคือเกมส์โกหกครับ แต่ละคนมีลูกเต๋าอยู่ในแก้ว ต้องผลัดกันประกาศว่า "บนโต๊ะมีหน้า X อยู่ Y ลูก" โดยที่เราไม่เห็นของคนอื่น การจำจำนวนลูกเต๋าทั้งโต๊ะและติดตามว่าใครเหลือกี่ลูกคือกุญแจสู่ชัยชนะเลยทีเดียว
โปรเจคนี้ใช้เมทริกซ์คีย์แพดกับจอ LCD มาช่วยให้เราตัดสินใจได้เฉียบขึ้นระหว่างเล่น มันจะถามข้อมูลจากเราคือ: จำนวนลูกเต๋าทั้งหมดบนโต๊ะ (หรือที่เราคาดเดา), จำนวนที่ถูกเรียก (เช่น มีคนประกาศ "เจ็ดลูกหน้า 6" เราก็ใส่ 7), จำนวนลูกเต๋าในแก้วเราเอง, และจำนวนลูกเต๋าในแก้วเร�ี่ตรงกับหน้าที่ถูกเรียก จากนั้นมันจะคำนวณและแสดงเปอร์เซ็นต์สองค่า: ความน่าจะเป็นที่การประกาศนั้นเป็นจริง (หมายความว่ามีลูกเต๋าหน้านั้นอย่างน้อยตามที่เรียก), กับความน่าจะเป็นที่จำนวนลูกเต๋าหน้านั้น *เป๊ะๆ* ตามที่เรียก
ป้อนข้อมูลทั้งหมดผ่านคีย์แพดเลยครับ ผลลัพธ์โชว์ตรงๆ บน LCD จอ LCD ที่ใช้ในบิลด์นี้ไม่มี I2C นะ ดังนั้นการเดินสายอาจจะง่ายกว่าในบางเคส ขึ้นอยู่กับชุดที่เรามี
ปรับแต่ง Random Seed ให้ปัง
สำหรับเกมลูกเต๋า ความสุ่มที่แท้จริงคือหัวใจครับ การใช้ random(1, 7) แบบธรรมดาบน Arduino จะให้ลำดับตัวเลขเดิมเป๊ะทุกครั้งที่เปิดบอร์ด
- วิธีแก้: ใน
setup()ต้องเขียนrandomSeed(analogRead(A0));ลงไป - การปล่อยขาแอนะล็อก A0 ว่างไว้เฉยๆ มันจะทำงานเหมือนเสาอากาศ รับคลื่นแม่เหล็กไฟฟ้ารอบตัวที่เปลี่ยนแปลงตลอดเวลาในห้อง มาเป็น seed ที่สุ่มจริงๆ เข้าไปในตัวสร้างเลข ทำให้ทุกเกมไม่ซ้ำกันเลย!
จัดการกับอาร์เรย์ลูกเต๋า
- การ "ทอย": เมื่อผู้ใช้กดปุ่มหลัก โค้ดจะเติมค่าลงในอาร์เรย์:
int myDice[5]โดยสุ่มเลขใส่ในช่องที่ 0 ถึง 4 - การแสดงผล: ถ้าใช้ไลบรารีอย่าง
Adafruit_GFXบนจอ OLED เราสามารถวาดสี่เหลี่ยมพร้อมจุดที่จำลองหน้าลูกเต๋าจริงๆ ได้เลย ไม่ใช่แค่พิมพ์เลขออกมา - การปิดบัง: ปุ่มที่สอง (ปุ่ม "แก้ว") สามารถโปรแกรมให้ล้างหน้าจอทั้งหมดได้ เพื่อให้ผู้เล่นซ่อนผลทอยของตัวเองจากคนอื่นได้เวลาจะเริ่มบลัฟฟ์
อุปกรณ์แนะนำ
- Arduino Nano หรือ Pro Mini: เล็กพอดีกำมือ
- จอ OLED ขนาด 1.3" หรือ 0.96" แบบ I2C
- ปุ่มอาร์เคด (2 หรือ 3 ปุ่ม)
- แหล่งจ่ายไฟแบบกะทัดรัด (เช่น 9V หรือ LiPo)
เป็นแบบฝึกหัดที่เจ๋งมากในการสร้างของเล่นดิจิทัลสแตนด์อโลนที่ทำงานได้โดยไม่ต้องพึ่งคอมพิวเตอร์ภายนอกเลยครับ ความเป็นไปได้กับเมทริกซ์คีย์แพดและ LCD นี่ไม่มีสิ้นสุด ตั้งแต่เครื่องคิดเลขไปจนถึงกลไกล็อค เอาไปดัดแปลงกันต่อได้เต็มที่ สู้งานนะน้อง แล้วก็โชคดีในการบลัฟฟ์!