เดินเหนื่อยมั้ย เส้นชัยช่วยนับรอบ | กิจกรรม Scratch หุ่นเดินตามเส้น checkpoint #5

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

แก้ไขโปรแกรมจาก checkpoint #4 ให้สามารถนับจำนวนรอบในการเดินได้

เราจะวาง “เส้นชัย”​ ขวางเส้นทางการเดินไว้ จากนั้นจะเขียนโค้ดให้เส้นชัยคอยนับจำนวนครั้งที่หุ่นยนต์เคลื่อนที่ผ่าน ทั้งนี้เส้นชัยอาจเป็นเพียงเส้นสีแดงธรรมดาๆ (ตัวละครชื่อ Line) หรือตัวละครอื่นที่มีลักษะยาวคล้ายเส้นก็ได้ (เช่น Magic Wand, ไม้กวาด, หรือขนมปัง)

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

ตัวอย่างการทำงานของโปรแกรม

https://youtu.be/BP9Lao-lwUU

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

  1. สร้างตัวแปรชื่อ count (หรือจะใช้ชื่อภาษาไทยว่า “จำนวนรอบ” ก็ได้)
  2. เพิ่มตัวละครที่เป็นเส้นชัย หมุนและวางไว้ในตำแหน่งที่เหมาะสม
  3. เขียนโค้ดให้เส้นชัยทำงานวนซ้ำไปเรื่อยๆ แต่ละรอบของการวนซ้ำให้ถามตนเองว่ากำลังสัมผัสกับหุ่นยนต์อยู่หรือไม่
  4. ถ้าสัมผัสหุ่นยนต์ เส้นชัยควรทำอะไรกับตัวแปรนั้น?
  5. สังเกตดูว่าการเคลื่อนผ่านแต่ละครั้ง จะเพิ่มค่าตัวแปรขึ้นทีละกี่หน่วย? เราจะใช้คำสั่งใดช่วยป้องกันการนับซ้ำได้บ้าง?
  6. เมื่อเริ่มต้นโปรแกรม ตัวแปรดังกล่าวมีค่าเท่าใด? ลองเริ่มโปรแกรมอีกครั้งแล้วสังเกตค่าตัวแปรว่าเป็นอย่างที่ควรเป็นหรือไม่?

hints / คำสั่งที่ต้องใช้

จะต้องเพิ่มตัวละครโดยกดปุ่มนี้ที่ใกล้มุมล่างขวา

ปุ่มเพิ่มตัวละคร (Sprite)

การทำงานเกี่ยวกับตัวแปร ให้เลือกกลุ่มบล็อก Variables (สีส้มเข้ม)

การสร้างตัวแปร ให้กดปุ่ม “Make a Variable” แล้วตั้งชื่อ

การกำหนดค่าตัวแปร ให้ใช้บล็อกคำสั่ง set ____ to ___ แล้วเลือกชื่อตัวแปรที่เราต้องการ

การเพิ่มหรือลดค่าตัวแปร ให้ใช้บล็อกคำสั่ง change ____ by ___ ถ้าตัวเลขหลัง by เป็นบวกก็จะเป็นการเพิ่มค่า ถ้าเป็นลบก็จะเป็นการลดค่า (อย่าลืมเลือกชื่อตัวแปรที่เราต้องการ)

คำสั่งเกี่ยวกับตัวแปร

เพื่อป้องกันการนับซ้ำ คำสั่งในกลุ่ม Controls ที่อาจนำมาใช้ได้มีอยู่สองคำสั่งคือ wait __ seconds และ wait until ____ ซึ่งคำสั่ง wait until จะต้องการเงื่อนไขที่ต้องการให้หยุดรอ เช่น รอจนกว่าตัวละครทั้งสองจะไม่สัมผัสกัน

การกำหนดเงื่อนไขว่าตัวละครสองตัวสัมผัสกัน สามารถใช้คำสั่ง Sensing -> touching _______ (เดิมจะเขียนว่า touching mouse-pointer) แต่เราสามารถเปลี่ยน mouse-pointer เป็นชื่อตัวละครอื่นได้ ซึ่งในกรณีนี้เราต้องการให้ตัวละครเส้นชัย รอจนกว่าจะ ไม่ สัมผัสกับหุ่นยนต์ คำว่า ไม่ ในที่นี้แทนด้วยบล็อก Operators -> not ______ ซึ่งสามารถนำมาประกอบกับเงื่อนไขของ touching ได้

ถ้าต้องการความสนุก ท่านสามารถเพิ่มเสียงดนตรีได้โดยกดปุ่ม add extension ด้านล่าง (ดูรูป) แล้วเลือก Music จะพบว่ามีกลุ่มบล็อกใหม่โผล่ขึ้นมาชื่อ Music และสามารถเพิ่มเสียงกลอง หรือเสียงตัวโน้ต ที่เรากำหนดความถี่และความยาวได้ตามต้องการ

ปุ่ม add extension
เลือกกลุ่ม Music

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

  1. ปัญหาการนับเกิน (แก้ไขโดยใช้ wait until not touching …)
  2. ปัญหาเลือกตัวแปรผิด ทำให้ค่าไม่เปลี่ยนไปตามที่ต้องการ
  3. ตัวแปรอาจไม่เริ่มต้นจาก 0 ทำให้การรันโปรแกรมครั้งที่สองเป็นต้นไป ได้ค่าการนับที่สูงเกินจริง

ชวนคิด

  1. เราจะนำตัวแปรมาใช้ในการควบคุมสิ่งอื่นใดได้อีกบ้าง?
  2. ถ้าต้องการเขียนโปรแแกรมให้ปุ่ม space bar เพิ่มความเร็วของตัวละคร ในขณะที่ปุ่ม backspace ลดความเร็ว จะต้องทำอย่างไร?​

เฉลย

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