Skip to main content

บทที่ 2: คำแถลงเงื่อนไขถ้า/อื่นๆ

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

ตัวอย่างของรูปแบบสนามเด็กเล่น Crasher Castle แบบไดนามิก:

มุมมองจากบนลงล่างสามมุมมองของรูปแบบตัวอย่างของ Dynamic Castle Crasher Playground กับหุ่นยนต์ในตำแหน่งเริ่มต้นเดียวกันและปราสาทในตำแหน่งที่แตกต่างกัน รูปแบบจะอยู่เคียงข้างกันเพื่อเน้นวิธีการเปลี่ยนตำแหน่งของปราสาทในแต่ละครั้งที่มีการรีเซ็ตสนามเด็กเล่น The layout are side by side, to highlight how the castles change position each time the Playground is

ผลการเรียนรู้

  • ระบุว่าบล็อก [If then else] เป็นบล็อก C ที่เรียกใช้บล็อกภายในสาขา If หรือ Else ตามค่าบูลีนที่รายงาน
  • ระบุว่าบล็อก [If then else] ปกติจะใช้กับบล็อก [Repeat] หรือ [Forever] เพื่อตรวจสอบสภาพมากกว่าหนึ่งครั้ง
  • ระบุและอธิบายว่าเหตุใดจึงใช้บล็อค [If then else] กับลูป
  • อธิบายสิ่งที่จะทำให้สาขา [ถ้าเป็นเช่นนั้น] ดำเนินการในโครงการ

วิธีใช้บล็อค [ถ้าเป็นเช่นนั้น]

ความท้าทายนี้แตกต่างจากความท้าทาย Castle Crasher ในหน่วยที่ 2 การท้าทายหน่วยที่ 2 ใช้การเรียงลำดับอย่างง่ายและคำสั่ง Drivetrain เพื่อเคาะอาคารบนสนามเด็กเล่นแบบคงที่

ตัวอย่างโครงการ VEXcode VR จากหน่วยที่ 2 โครงการเริ่มต้นด้วยบล็อกเมื่อเริ่มต้นและมี 6 บล็อกที่แนบมา บล็อกที่อ่านตามลำดับตั้งความเร็วในการขับเคลื่อนเป็น 100% ตั้งความเร็วในการเลี้ยวเป็น 100% ขับไปข้างหน้าเป็น 1550 มม. เลี้ยวขวาเป็น 180 องศาขับไปข้างหน้าเป็น 700 มม. จากนั้นเลี้ยวขวาเป็น 90 องศา

คำสั่ง Drivetrain เพียงอย่างเดียวจะไม่เพียงพอที่จะให้ VR Robot ล้มอาคารสองแห่งหรือมากกว่านั้นเนื่องจากรูปแบบของ Dynamic Castle Crasher Playground เปลี่ยนไป ชุดคำสั่ง Drivetrain อาจทำงานในสนามเด็กเล่นหนึ่งแต่ไม่ใช่ในสนามเด็กเล่นอื่น จำเป็นต้องใช้อัลกอริทึมที่ใช้เซ็นเซอร์และการเลือก บล็อก [ถ้าเป็นเช่นนั้น] จะถูกใช้เพื่อสร้างอัลกอริทึมโดยการเพิ่มการเลือกพร้อมข้อความแบบมีเงื่อนไขในโครงการนี้

มุมมองด้านบนของสนามเด็กเล่น Crasher Castle แบบไดนามิกที่มีเพียงปราสาทบางแห่งที่ถูกกระแทกและอื่นๆที่ไม่ได้ถูกแตะต้องเพื่อแสดงให้เห็นว่าคำสั่งเกี่ยวกับระบบขับเคลื่อนเพียงอย่างเดียวไม่เพียงพอเมื่อตำแหน่งของปราสาทเปลี่ยนไปแบบสุ่ม

มีสองขั้นตอนหลักสำหรับหุ่นยนต์ VR ในการล้มอาคารบนสนามเด็กเล่น Crasher Castle แบบไดนามิ

  1. หากหุ่นยนต์ VR ตรวจพบสิ่งปลูกสร้างปราสาทให้ขับไปข้างหน้าเพื่อล้มลง
    1. สนามเด็กเล่น Dynamic Castle Crasher ไม่มีกำแพงซึ่งแตกต่างจากสนามเด็กเล่นอื่นๆ เนื่องจากอาคารเป็นวัตถุเดียวในสนามเด็กเล่น Crasher Castle Crasherจึงสามารถใช้เซ็นเซอร์ระยะทางเพื่อตรวจจับอาคารได้

      มุมมองด้านบนของสนามเด็กเล่น Crasher Castle แบบไดนามิกโดยมีหุ่นยนต์อยู่ในตำแหน่งเริ่มต้นที่กึ่งกลางด้านล่างของเค้าโครงโดยมีลูกศรประชี้ไปที่ปราสาทตรงหน้าหุ่นยนต์ที่เน้นในกล่องสีแดง ลูกศรแสดงให้เห็นว่าเซ็นเซอร์สามารถตรวจจับปราสาทเป็นวัตถุที่อยู่ข้างหน้าได้
  2. หากหุ่นยนต์ VR ไม่พบอาคารปราสาทให้หันไปตรวจสอบอาคารปราสาทอีกครั้ง
    1. เนื่องจากอาคารเป็นวัตถุเดียวในสนามเด็กเล่น Crasher Castle Crasherจึงสามารถใช้เซ็นเซอร์ระยะทางเพื่อตรวจจับอาคารปราสาทได้

      มุมมองด้านบนของสนามเด็กเล่น Crasher Castle แบบไดนามิกโดยมีหุ่นยนต์อยู่ในตำแหน่งเริ่มต้นและลูกศรโค้งที่ด้านใดด้านหนึ่งของมันซึ่งบ่งบอกถึงความจำเป็นในการหมุนจนกว่าจะตรวจพบวัตถุปราสาท

เมื่อขั้นตอนที่ 1 และ 2 เสร็จสมบูรณ์หุ่นยนต์ VR สามารถย้อนกลับไปยังขั้นตอนที่ 1 และใช้เซ็นเซอร์ระยะทางเพื่อค้นหาอาคารถัดไปที่จะล้ม

  • เริ่มโครงการใหม่ใน VEXcode VR และตั้งชื่อ โครงการUnit9Lesson2

    กล่องชื่อโปรเจกต์ที่อยู่ตรงกลางของ VEXcode VR Toolbar ที่เน้นด้วยกล่องสีแดงทางด้านซ้ายของปุ่มเลือกสนามเด็กเล่น ชื่อโครงการอ่านหน่วยที่ 9 บทเรียนที่ 2
  • เพิ่ม [ความคิดเห็น] สองช่วงตึกลงในพื้นที่ทำงานและกรอกขั้นตอนที่ระบุไว้ด้านบน

    โครงการ VEXcode VR ใหม่ที่มีบล็อกความคิดเห็นสองบล็อกติดอยู่กับบล็อกเริ่มต้นเมื่อใด ความคิดเห็นที่อ่านตามลำดับ: เคาะอาคารที่พบโดยใช้เซ็นเซอร์ระยะทางและหันไปหาอาคารที่ใช้เซ็นเซอร์ระยะทาง
  • บล็อก [ถ้าเป็นเช่นนั้น] สามารถใช้เพื่อทริกเกอร์การดำเนินการแต่ละอย่างที่ระบุไว้ข้างต้น การดำเนินการแต่ละครั้งขึ้นอยู่กับว่าเงื่อนไขบูลีนในบล็อก [ถ้าเป็นเช่นนั้น] รายงานจริงหรือเท็จ เพิ่มบล็อค [If then else] ใต้บล็อค [Comment]

    โครงการ VEXcode VR เดียวกันกับบล็อค If then else ที่แนบมาด้านล่างความคิดเห็นที่สอง พารามิเตอร์ของสาขาถ้าเปิดทิ้งไว้

    สำหรับข้อมูลของคุณ

    บล็อก [ถ้าเป็นอย่างนั้น] เป็นบล็อก C ที่ยอมรับบล็อกบูลีนรีพอร์เตอร์เป็นอินพุต บล็อก [ถ้าเป็นเช่นนั้น] เป็นข้อความแบบมีเงื่อนไขที่ควบคุมการไหลของโครงการ บล็อก [ถ้าเป็นเช่นนั้น] จะดำเนินการตามลำดับคำสั่งเฉพาะหากเป็นไปตามเงื่อนไขและชุดคำสั่งอื่นหากไม่เป็นไปตามเงื่อนไขซึ่งจะเป็นการ ‘แตกแขนง’ การไหลของโครงการ จะมีการดำเนินการเพียงสาขาเดียวใน [ถ้าเป็นเช่นนั้น]

    An If then else block from the VEXcode VR Toolbox.
    • หากมีการรายงานเงื่อนไขเป็นจริงบล็อกภายในสาขา If Then จะทำงาน
    • หากเงื่อนไขถูกรายงานว่าเป็นเท็จบล็อกภายในสาขาอื่นๆจะทำงาน
    โครงการ VEXcode VR ใช้เพื่อแสดงฟังก์ชันของแต่ละสาขาของบล็อค If then else ในโครงการนี้บล็อก If then else จะติดอยู่กับ When started และอ่าน If Front Distance found an object, then Comment - Knock over the building found using the Distance Sensor and drive forward; นอกจากนี้ให้หันไปหาอาคารที่ใช้เซ็นเซอร์ระยะทางและเลี้ยวขวา สาขา 'ถ้าเป็นเช่นนั้น' จะมีป้ายกำกับไดรฟ์ไปข้างหน้าถ้าเซ็นเซอร์ระยะทางตรวจพบวัตถุ สาขา 'อื่นๆ' มีป้ายกำกับว่าเลี้ยวขวาหากเซ็นเซอร์ระยะทางไม่ตรวจจับวัตถุ

    เมื่อบล็อกทั้งหมดภายในสาขาใดสาขาหนึ่งทำงานแล้วโครงการจะย้ายไปยังบล็อกถัดไปนอกบล็อก [ถ้าเป็นเช่นนั้น]

  • ในโครงการนี้สามารถใช้เซ็นเซอร์ระยะทางเพื่อตรวจจับสิ่งปลูกสร้างบนสนามเด็กเล่นได้ เพิ่ม <Distance found object> บล็อคไปที่บล็อค [If then else]

    โครงการ VEXcode VR เดียวกันจากก่อนหน้านี้โดยมีการเพิ่มบล็อกวัตถุที่พบในระยะทางเป็นพารามิเตอร์ของสาขา If then If then block now reads If Front Distance found an object then.

    สำหรับข้อมูลของคุณ

    <Distance found object> บล็อกนี้เป็นบล็อกนักข่าวบูลีนที่รายงานว่าเซ็นเซอร์ระยะทางพบวัตถุด้านหน้าของหุ่นยนต์ VR หรือไม่ บล็อกนี้จะรายงานความจริงเมื่อมีวัตถุหรือพื้นผิวภายใน 3000 มิลลิเมตร (มม.) ของหุ่นยนต์ VR

    ระยะทางที่พบวัตถุบล็อก VEXcode VR จากกล่องเครื่องมือที่อ่านระยะทางด้านหน้าพบวัตถุหรือไม่?
  • ตอนนี้แต่ละสาขาของบล็อก [If then else] จะต้องได้รับการกำหนดโดยใช้ความคิดเห็นที่สร้างขึ้นในตอนต้นของโครงการ เมื่อ <Distance found object> บล็อกรายงานเป็นจริงหุ่นยนต์ VR ควรขับรถไปที่อาคารนั้นเพื่อล้มมัน ย้ายบล็อก [ความคิดเห็น] นั้นไปยังสาขา ‘ถ้าเป็นเช่นนั้น’ ของโครงการ

    โครงการ VEXcode VR เดียวกันกับความคิดเห็นแรกที่ย้ายภายใน C ของสาขา If then ตอนนี้โปรเจกต์อ่านว่าเมื่อเริ่มต้นหากระยะทางด้านหน้าพบวัตถุให้เคาะอาคารที่พบโดยใช้เซ็นเซอร์ระยะทาง
  • ย้ายบล็อก [ความคิดเห็น] อื่นๆไปยังสาขา ‘อื่นๆ' ของโครงการสำหรับสิ่งที่ควรเกิดขึ้นหากหุ่นยนต์ VR ตรวจไม่พบอาคาร

    โครงการ VEXcode VR เดียวกันกับความคิดเห็นที่สองภายใน C ของสาขาอื่น ตอนนี้โครงการอ่านว่าเมื่อเริ่มต้นหากระยะทางด้านหน้าพบวัตถุให้เคาะอาคารที่พบโดยใช้เซ็นเซอร์ระยะทาง; มิฉะนั้นให้หันไปหาอาคารโดยใช้เซ็นเซอร์ระยะทาง
  • เพิ่มบล็อก [Drive] ลงในสาขา ‘If Then’ ของบล็อก [If then else]

    โครงการ VEXcode VR เดียวกันกับชุดบล็อกไดรฟ์เพื่อส่งต่อใต้ความคิดเห็นแรกในสาขา If then สาขา If then จะอ่านว่า If Front Distance found an object, then Comment Knock over the building found using the Distance sensor; Drive forward.
  • เมื่อ <Distance found object> บล็อกรายงานเท็จหุ่นยนต์ VR จะต้องหันหลังกลับและค้นหาอาคารบนสนามเด็กเล่น เพิ่มบล็อก [Turn] ใต้บล็อก [Comment] ในสาขา ‘Else’ ของบล็อก [If then else]

    โปรเจกต์ VEXcode VR เดียวกันกับบล็อก Turn ที่ตั้งไว้ที่ด้านขวาใต้ความคิดเห็นที่สองในสาขาอื่นๆ ตอนนี้สาขาอื่นๆอ่าน, อื่นๆ, ความคิดเห็นของเลี้ยวเพื่อค้นหาอาคารโดยใช้เซ็นเซอร์ระยะทาง; จากนั้นเลี้ยวขวา
  • ก่อนที่โปรเจกต์จะได้รับการทดสอบจะต้องเพิ่มอีกหนึ่งบล็อค [ถ้าเป็นเช่นนั้น] บล็อกจะตรวจสอบสภาพเพียง ครั้งเดียว ก่อนที่จะย้ายไปยังบล็อกถัดไปในกองซ้อน ในหน่วยที่ 7 บล็อก [ตลอดกาล] ถูกเพิ่มเข้าไปในโครงการเพื่อสั่งให้หุ่นยนต์ VR ตรวจสอบสภาพของเซ็นเซอร์ดวงตาลงซ้ำๆ เพื่อให้แน่ใจว่าสภาพเซ็นเซอร์ระยะห่างได้รับการตรวจสอบซ้ำๆ ให้ลากบล็อก [ตลอดไป] ไปยังพื้นที่ทำงานรอบๆ บล็อก [If then else]

    ภาพรวมของวิธีการเพิ่มบล็อก Forever ในโครงการเพื่อให้บล็อก If then else ทั้งหมดอยู่ภายใน C ของบล็อก Forever ตอนนี้โปรเจกต์อ่านว่าเมื่อเริ่มต้น, ตลอดไป, หากระยะทางด้านหน้าพบวัตถุให้ขับไปข้างหน้า; มิฉะนั้นให้เลี้ยวขวา
  • เปิด Dynamic Castle Crasher Playground และดำเนินโครงการ

    มุมมองด้านบนของสนามเด็กเล่น Castle Crasher ที่มีปราสาทสามหลังยังคงสภาพเดิมและอาคารปราสาทสองหลังพังทลายลงมา หุ่นยนต์อยู่ที่มุมขวาบนข้างปราสาทที่ถูกโค่นล้ม
  • เมื่อหุ่นยนต์ VR เคาะอาคารอย่างน้อยสองหลังแล้วให้โหลดสนามเด็กเล่นใหม่และเรียกใช้โครงการในรูปแบบอื่นของสนามเด็กเล่น Crasher Castle แบบ ไดนามิ

    มุมมองด้านบนของสนามเด็กเล่น Castle Crasher ที่มีปราสาทสามหลังยังคงสภาพเดิมและอาคารปราสาทสองหลังพังทลายลงมา หุ่นยนต์อยู่ที่มุมขวาบนข้างปราสาทที่ถูกโค่นล้ม
  • ในการวิ่งแต่ละครั้งของโครงการหุ่นยนต์ VR จะหมุนจนกว่าจะมีการตรวจพบอาคารโดยเซ็นเซอร์ระยะทางจากนั้นขับรถไปยังอาคารนั้นเพื่อล้มมัน

    มุมมองด้านข้างของหุ่นยนต์ VR ที่ดันชิ้นส่วนปราสาทออกจากด้านข้างของสนามเด็กเล่นแต่หุ่นยนต์กำลังเริ่มขับรถไปที่ขอบสนามเด็กเล่นราวกับว่ามันจะตกลงมาจากขอบด้วย
  • ในระหว่างการดำเนินโครงการหุ่นยนต์ VR อาจผลักชิ้นส่วนอาคารไปจนถึงขอบและตกจากสนามเด็กเล่น นี่เป็นเพราะ <Distance found object> บล็อกยังคงรายงานว่ามีวัตถุอยู่ด้านหน้าของหุ่นยนต์ VR เมื่อบล็อกนี้รายงานเป็นจริงหุ่นยนต์ VR จะขับเคลื่อนไปข้างหน้า นำหุ่นยนต์ VR ให้ตกลงจากโต๊ะ

เลือกปุ่ม ถัดไป เพื่อดำเนินการกับบทเรียนส่วนที่เหลือนี้ต่อไป