# กู้ภัย: ภารกิจรวม วิเคราะห์ข้อผิดพลาด และทดลอง A/B

## ภารกิจรวม (rescue-full-practice-1)
กด “เริ่มโครงงานภารกิจรวม” ใช้บล็อกปัจจุบันและสนามเต็มปัจจุบัน ตั้งฝึกระดับมัธยมพร้อมลูกหน้า5หลัง5 หากอยู่แบบฝึกย่อยจะคืนผังสนามเต็มก่อนฝึก กดเริ่มโปรแกรมตามปกติ

แสดง8ขั้น: ผ่านลูกระนาด, Checkpoint1/2, ส่ง4จุด, กลับSTARTหลังครบภารกิจ นักเรียนกำหนดลำดับเส้นทางเอง ไม่มีระบบขับแทน การผ่านลูกระนาดตรวจข้ามแนวเข้าและตัวหุ่นทุกมุมพ้นแนวออก ไม่ออกด้านข้างขณะผ่าน รองรับข้ามสองทิศตามแนววางลูกระนาด Retryล้างเฉพาะสถานะกำลังข้าม ไม่ทำให้การย้ายกลับSTARTนับผ่าน

คะแนนเดิมไม่เปลี่ยน: Checkpoint15×2, ส่ง15×4, กลับSTART10 รวม100 ตามตาราง RULE_MAPPING.md หน้า34–35 ข้อ4–12 การผ่านลูกระนาดเป็นเกณฑ์ฝึกเพิ่มเติม ไม่มีคะแนนพิเศษ จบคะแนนครบแต่ยังไม่ผ่านลูกระนาดจะแสดง “ยังไม่ครบภารกิจฝึก” แยกจากคะแนน100 ห้ามใช้ป้ายผ่านฝึกแทนกรรมการรับรองการแข่งขัน

ชุดอ้างอิงเป็นชุดบรรจุ–ปล่อยหน้า/หลัง กลไกหยิบจากพื้นเสมือนยังแยกเป็นโหมดทดลอง ไม่ใช้ภารกิจรวมและไม่อ้างเป็นแขนหยิบของหุ่นจริง

## ตัวอย่างครบสนามที่ทดสอบแล้ว
กด “เปิดตัวอย่างครบสนามฝึกเพิ่มเติม” หรือเปิด `examples/rescue-full-practice.json` โหลดสนามที่ออกแบบเพิ่มพร้อมบล็อกมอเตอร์/รอ/หยุด/ปล่อย เป็นโปรแกรมกำหนดเวลาด้วยค่าฟิสิกส์เริ่มต้น ไม่ได้ล็อกหุ่นกับเส้นทาง เปลี่ยนบล็อกหรือค่าฟิสิกส์แล้วผลอาจเปลี่ยน ตัวอย่างนี้ทดสอบผ่าน100คะแนน ไม่มีRetry ประมาณ43.9วินาทีจำลองที่seed42

สนามนี้ไม่ใช่ผังต้นฉบับแข่งขัน ไม่มีการอ้างว่าตัวอย่างเดียวกันใช้ได้บนสนามอ้างอิงหรือฮาร์ดแวร์จริง ก่อนเปิดจะบันทึกสำเนาโครงงานเดิม กดกลับสนามเต็มและโปรแกรมเดิมเพื่อคืนสำเนา ควรส่งออกสำรองก่อนเปลี่ยนตัวอย่าง

## วิเคราะห์ข้อผิดพลาด
แผงใหม่อธิบาย Retry, ปล่อยผิดเขต, ช่องว่าง/อุดตัน, ชนลูก, หยิบทดลองไม่สำเร็จ, จบภารกิจไม่ครบ และ runtime พร้อมเวลา/ข้ออ้างอิง/คำสั่ง/ADC8ช่อง/มอเตอร์และตำแหน่ง

Retryบันทึกตำแหน่งและเซนเซอร์ก่อนย้ายกลับSTART เหตุการณ์อื่นใช้เฟรมบันทึกเวลาเดียวกันหรือใกล้หลังเหตุการณ์ โดยแสดงชนิดหลักฐานอย่างชัดเจน ไม่อ้างว่าเฟรมใกล้เคียงเป็นค่าก่อนเหตุแน่นอน บันทึกเก่าที่ไม่มีข้อมูลก่อนRetryใช้เฟรมย้อนหลังและป้ายกำกับแทน

พักหรือหยุดแล้วกดดูเหตุการณ์รอบล่าสุด กดเหตุการณ์เพื่อเปิดย้อนหลังตรงเวลา ภาพที่เห็นหลังRetryอาจเป็นตำแหน่งSTARTแล้ว ให้ดูตำแหน่งก่อนRetryในแผงประกอบ การย้อนหลังไม่รันโปรแกรมและไม่มีเสียง การไม่พบเหตุผิดพลาดไม่ได้ยืนยันว่าครบภารกิจ

## เปรียบเทียบสองโปรแกรมแบบจับคู่ (rescue-paired-1)
1. เตรียมโปรแกรมเดิม แล้วกด “เก็บโปรแกรมปัจจุบันเป็น B” หรือเปิดไฟล์โครงงานB
2. ปรับบล็อกปัจจุบันเป็นA โดยคงสนาม อุปกรณ์ การตั้งค่า และปุ่มเริ่มเดียวกัน
3. ระบุseedไม่ซ้ำ1–12ค่า เช่น42,73,101
4. กดทดลอง A/B อัตโนมัติ แต่ละseedจะทดลองAและBแยกกันด้วยฟิสิกส์และ runtime เดียวกับสนามปกติ
5. เปรียบเทียบอัตราสำเร็จ คะแนนเฉลี่ย Retryเฉลี่ย และเวลาเฉลี่ยเฉพาะครั้งที่สำเร็จ ไม่จัดอันดับด้วยเวลาของครั้งที่ภารกิจไม่สำเร็จ

เก็บสำเนาโปรแกรมทั้งสอง สนาม การตั้งค่า รุ่นโมดูล/กติกา seed และผลแต่ละรอบ ไม่แก้โครงงานที่กำลังแก้หรือผลเก่า ยกเลิกได้ระหว่างชุด; ชุดที่ยังไม่ครบจะไม่แทนชุดผลเดิม บันทึกชุดล่าสุดในเบราว์เซอร์ ส่งออก/เปิดชุดผลJSON และพิมพ์สรุปพร้อมคำถามสะท้อนผลได้

“จำลองซ้ำดูย้อนหลัง” รันใหม่จากสำเนาโปรแกรมและseedในชุดผล แล้วตรวจผลทุกค่าตรงกับเดิมก่อนเปิดบันทึก ไม่อ้างว่าเป็นไฟล์วิดีโอดั้งเดิม ระหว่างชุดทดลองล็อกหน้าควบคุมและไม่มีเสียงมอเตอร์ ค่าnoise0และมอเตอร์สมดุลอาจทำให้ทุกseedได้ผลเหมือนกัน seedไม่ได้เพิ่มความคลาดเคลื่อนเอง

## ข้อจำกัดและการทดสอบ
การเคลื่อนที่/แสงสะท้อน/ลูกระนาด/ความจุเป็นแบบจำลองเดิมพร้อมค่าประมาณ ไม่ใช่การรับรองผลหุ่นจริง ใช้ตัวแก้ไขบล็อกทางเลือก Blockly; MakeCodeยังไม่เชื่อมสนาม

ดู FULL_LAB_TEST_RESULTS.md ทดสอบตรรกะด้วย Node รวมการโหลดBlocklyจริงแล้วจำลองครบ8ขั้นบนสนามฝึกเพิ่มเติม ยังไม่ได้ทดสอบคลิกเบราว์เซอร์ WebGL เสียง หรือฮาร์ดแวร์ในรุ่นนี้

## โปรแกรม ADC และความทนทาน

เพิ่มตัวอย่างครบภารกิจบนสนามฝึกเพิ่มเติมที่หยุดด้วยเซนเซอร์ แผงสถานะโปรแกรม และชุดหลายเงื่อนไข A/B ดู [คู่มือ](SENSOR_LAB_TH.md)
