หุ่นเดินเอง กระเด้งเมื่อชนขอบ | กิจกรรม Scratch หุ่นเดินตามเส้น checkpoint #2

ภารกิจสำหรับ checkpoint นี้

ปรับปรุงจาก checkpoint #1 ให้หุ่นยนต์เคลื่อนที่ไปได้เรื่อยๆ ด้วยตนเองหลังจากที่เรากดธงเขียว โดยที่เราไม่ต้องทำอะไร

หุ่นยนต์จะเคลื่อนที่ทีละน้อย (เพียง 1 step หรือ 2 steps) เมื่อหุ่นยนต์ชนขอบเวที ให้กระเด้งกลับ

เรายังคงสามารถควบคุมหุ่นยนต์โดยใช้คีย์บอร์ดได้เช่นเดิม เมื่อกดลูกศรชี้ขึ้น หุ่นจะกระโดดไปข้างหน้า เมื่อกดลูกศรชี้ลง หุ่นจะกระโดดถอยหลังเล็กน้อย ก่อนที่จะเคลื่อนที่ต่อไปด้านหน้าด้วยความเร็วปกติ เมื่อกดลูกศรซ้าย-ขวา หุ่นจะหันหน้าทีละ 10-15 องศา

ตัวอย่างผลลัพธ์

ตัวอย่างโปรแกรมที่ถูกต้อง

https://youtu.be/gYX9YN9Ag9A

ขั้นตอนโดยสังเขป

  1. ใช้โปรแกรมจาก checkpoint #1
  2. เขียน code ให้หุ่นยนต์ โดยใช้ตัวรับมือกับเหตุการณ์​ (Event) การคลิกธงเขียว
  3. โปรแกรมนี้จะมีการวนซ้ำโดยไม่รู้จบ
  4. แต่ละรอบของการวนซ้ำ หุ่นยนต์จะเคลื่อนที่ไปข้างหน้าทีละน้อย (ควรให้หุ่นเดินช้าๆ เพื่อจะได้สังเกตการทำงานได้ง่ายขึ้น)
  5. ทดสอบโปรแกรมดู โดยกดปุ่มธงเขียว จะพบว่าหุ่นยนต์เดินได้เอง และในระหว่างเดินเราสามารถใช้ปุ่มลูกศรควบคุมทิศทางได้ แต่เดินไปสักพักก็จะชนขอบเวทีแล้วหยุด
  6. เพิ่มคำสั่งเกี่ยวกับการเคลื่อนที่ เมื่อชนขอบแล้วให้กระเด้งกลับ คำสั่งนี้ควรจะอยู่ตำแหน่งใด? ด้านในหรือด้านนอกการวนซ้ำ?​ ลองคิดดูก่อน แล้วค่อยทดลองดูครับ

Hints / คำสั่งที่อาจมีประโยชน์

  1. Events -> When Green Flag Clicked
  2. Control -> forever
  3. Motion -> if on edge, bounce

ปัญหาที่มักพบ

  1. ระวังอย่าให้หุ่นยนต์เคลื่อนที่เร็วเกินไป (จะเกิดปัญหาในภายหลัง)
  2. เมื่อทดลองเล่นให้สังเกตการหันซ้าย หันขวา ดูอีกครั้ง ว่ามีลักษณะการเลี้ยวที่สมดุลดีหรือไม่ ถ้ารู้สึกเหมือน “ล้อเบี้ยว” จะต้องแก้ไขจุดศูนย์ถ่วงของตัวละคร
  3. Code ของแมวขณะนี้น่าจะมี Events อยู่ทั้งหมด 5 events ได้แก่ when …. key pressed จำนวน 4 events สำหรับปุ่มสี่ปุ่ม และ when green flag clicked ที่เพิ่งสร้างขึ้นใหม่ ซึ่ง code ทั้ง 5 กลุ่มนี้ไม่จำเป็นต้องวางไว้ต่อเนื่องกัน และเวลาเขียน code เพิ่มในขั้นตอนนี้ให้ดูให้ดีว่าเรากำลังลากบล็อกคำสั่งใหม่ไปไว้ต่อกับ Event กลุ่มใด (ระวังผิดกลุ่ม)
  4. ดูให้ดีว่าสิ่งที่อยู่ใน forever loop นั้น แทรกเข้าไปโดยสนิทดี (ลองลากไปใกล้ๆ จะพบว่ารู้สึกเหมือนมีแม่เหล็กดูดติดหนึบ)
  5. ดูให้ดีว่าคำสั่งใดควรอยู่ใน หรืออยู่นอก forever loop ถ้าโปรแกรมทำงานผิดพลาด ลองคิดดูว่าทำไม ควบคู่กับการทดลองย้ายคำสั่งเข้าในลูปหรือออกจากลูป สังเกตผลลัพธ์ และคิดถึงสาเหตุที่เกิดขึ้น

ปัญหาการเลี้ยวแบบเสียศูนย์

สังเกตการเลี้ยวของหุ่นยนต์เมื่อเรากดปุ่มลูกศรซ้าย-ขวา ถ้าหากเลี้ยวแบบเบี้ยวๆ ในลักษณะนี้แสดงว่ามีปัญหาเรื่องการตั้งศูนย์ จะต้องแก้ไขก่อนไปสู่ checkpoint ต่อไป

https://youtu.be/pF8kNeQxnqA

แนวทางแก้ไขเป็นดังนี้

https://youtu.be/MZ5Gt7b5B8U

เฉลย

วิดีโอลับ [vid90 เฉลย | checkpoint 2 | หุ่นยนต์เดินตามเส้น | Scratch activity]