โปรเจกต์ **The Reflex Game #cloudgames2022** นี้เป็นเกมสำหรับ 2 ผู้เล่น ผ่าน [Arduino](https://s.shopee.co.th/7fUgFAWSki) IoT Cloud นะน้อง โดยผู้เล่นคนนึงจะอยู่ฝั่งตัวบอร์ด (Carrier) อีกคนอยู่ฝั่ง Cloud อยากรู้กติกาและวิธีเล่น ไปดูที่หัวข้อ "เล่น" ได้เลยจ้า
เริ่มต้นกันเลย:
พอเปิดตัว Carrier ขึ้นมา มันควรจะโชว์หน้าตาประมาณนี้:

นั่นแปลว่ามันกำลังพยายามเชื่อมต่อกับเครือข่าย WiFi ของเราอยู่ อย่าลืมเช็คให้ดีว่าพิมพ์ชื่อ WiFi และรหัสผ่านถูกต้องนะ ไม่งั้นมันจะต่อไม่ได้เลย
เมื่อเชื่อมต่อกับ [Arduino](https://s.shopee.co.th/7fUgFAWSki) IoT Cloud สำเร็จ หน้าจอควรเปลี่ยนเป็นแบบนี้:

ปุ่ม 0 ใช้เปิด/ปิดเสียง ส่วนปุ่ม 4 ไว้ดูกติกา สำหรับผู้เล่นฝั่ง Cloud ให้พิมพ์คำว่า "rules" ในช่องแชทแทน ส่วนถ้าจะเริ่มเกม ให้กดปุ่ม 2 เลยจ้า
เริ่มเล่นได้แล้ว:
หลังจากกดปุ่ม 2 แล้ว เราต้องรอให้ผู้เล่นฝั่ง Cloud พิมพ์คำว่า "ready" เพื่อเริ่มเกมจริงๆ
เล่นเลย:
ในรอบแรก ผู้เล่นฝั่ง Carrier ต้องกดปุ่ม 0, 1, 3 และ 4 ให้ครบ 10 ครั้ง ส่วนผู้เล่นฝั่ง Cloud ก็ต้องกดปุ่มที่ตรงกันตามที่เห็นบนหน้าจอ
หน้าจอฝั่ง Cloud จะประมาณนี้:


หลังจากเล่นครบ 10 รอบ ระบบจะเข้าสู่ช่วง "interval" หน้าจอจะเปลี่ยนเป็นแบบนี้:


เมื่อช่วง interval จบ หน้าจอจะเปลี่ยนอีกที:


หลังจาก interval จบ เกมจะสลับฝั่ง! ตอนนี้ผู้เล่นฝั่ง Cloud ต้องเป็นฝั่งกดปุ่มให้ครบ 10 ครั้งแทน ส่วนระบบจะจับเวลาว่าผู้เล่นฝั่ง Carrier ใช้เวลากดปุ่มตอบโต้กลับมาเร็วแค่ไหน
จบเกม:
เมื่อเกมจบ ผลลัพธ์มีได้ 3 แบบ: ชนะ, แพ้, หรือในบางกรณีที่หายากมาก (หรือถ้าจงใจทำให้เสมอกัน) ก็จะได้ผลเสมอ หน้าจอจะประมาณนี้:






ตั้งค่าสำหรับผู้เล่นฝั่ง Cloud:
ในการตั้งค่า Dashboard สำหรับผู้เล่นฝั่ง Cloud น้องต้องสร้าง Cloud Thing ใหม่ขึ้นมา ตั้งชื่ออะไรก็ได้ เช่น "The Reflex Game" และสร้าง Variables ตามนี้:
- DownB; read/write
- UpB; read/write
- LeftB; read/write
- RightB; read/write
- Down; read only
- Up; read only
- Left; read only
- Right; read only
- texts; read/write
จากนั้นก็เอาโค้ดที่ด้านล่างสุดของหน้านี้ไปใส่ แล้วสร้าง Dashboard ใหม่ ตั้งชื่อสักชื่อ เช่น "PINEAPPLES" แล้วจัดวางปุ่ม, สถานะ LED, และช่องแชทให้เรียบร้อย มี 2 รูปแบบให้เลือก: แบบสำหรับ Desktop/Laptop กับแบบสำหรับ Phone/Tablet หน้าตาประมาณนี้:


แค่นี้ก็ตั้งค่าเสร็จแล้ว เล่นได้เลย!
อธิบายโค้ดแบบย่อ:
พูดสั้นๆ ก็คือ ทุกครั้งที่ผู้เล่นซึ่งเป็นฝั่งต้องกดปุ่ม (รอบ 1 คือ Carrier, รอบ 2 คือ Cloud) กดปุ่มครบ 1 ครั้ง ระบบจะเพิ่มค่าให้ตัวแปร Integer ชื่อ `countRound` ขึ้น 1 พอครบ 10 ระบบจะเปลี่ยนค่า Boolean `round1` เป็น false และ `gameInterval` เป็น true
การเปลี่ยนค่านี้จะทำให้โค้ดส่วนที่รันรอบ 1 ถูกปิดการทำงาน และเปิดส่วน interval ขึ้นมาแทน พอ interval นับถึง 0 ค่า `gameInterval` จะถูกตั้งเป็น false ซึ่งจะทำให้รอบ 2 เริ่มต้นขึ้น
การจับเวลาระหว่างที่ผู้เล่นคนนึงกดปุ่ม กับอีกคนปล่อยปุ่ม เราใช้ฟังก์ชัน `millis()` มาช่วย
เรามีตัวแปร `unsigned long` ชื่อ `stopWatchStart` ที่เก็บค่าเวลาตอนที่ปุ่มถูกกด จากนั้นเมื่ออีกฝั่งปล่อยปุ่ม ก็จะมี `unsigned long` อีกตัวชื่อ `stopWatch` มาบันทึกเวลาตอนปล่อย แล้วเอามาคำนวณหาค่าเวลาใช้ไปของแต่ละผู้เล่นแบบนี้:player1Time=stopWatchStart-=stopWatch หรือสำหรับผู้เล่น 2 ก็จะเป็น player2Time=stopWatchStart-=stopWatch นั่นเอง
และนั่นคือโครงสร้างหลักของโปรแกรมที่พี่อธิบายแบบย่อๆ เอาเป็นว่าไม่สั้นเท่าไหร่ แต่นี่คือแบบที่สั้นที่สุดแล้วละกัน อยากรู้ลึกกว่านี้ ไปดูโค้ดเต็มๆ เอาเองนะน้อง
สรุป:
และนั่นคือ **The Reflex Game**! หวังว่าน้องๆ จะชอบกันนะ
ถ้าเจอบั๊กหรือมีคำแนะนำอะไร ก็บอกพี่มาได้เลย
อ้อ! แล้วก็คอมเมนต์มาด้วยถ้าน้องเจอและทำ "ความลับ" สำเร็จนะ 🤔🤔