บทเรียนที่ 2: สร้างและทดสอบโครงการ
ดำเนินการสร้างโครงการอย่างต่อเนื่อง
-
ตอนนี้ต้องกำหนดเงื่อนไขของคำสั่ง if else หากต้องการใช้เซ็นเซอร์ระยะห่างเพื่อตรวจจับปราสาท สามารถใช้คำสั่ง found_object ได้ เพิ่มคำสั่ง found_object ลงในเงื่อนไข ตอนนี้โปรเจกต์ของคุณควรมีลักษณะดังนี้:
def main (): # เซ็นเซอร์ระยะทางตรวจจับปราสาทได้หรือไม่? if front_distance.found_object (): # Crash castle detected by a Distance Sensor pass else: # Turn to find a castle using the Distance Sensor pass -
หากเซ็นเซอร์ระยะทางพบวัตถุหุ่นยนต์ VR ควรขับไปข้างหน้าเพื่อเคาะปราสาท เพิ่มคำสั่ง drive ลงในสาขา 'if' ของคำสั่ง if else และตั้งค่าพารามิเตอร์ เพื่อขับเคลื่อนหุ่นยนต์ VR ไปข้างหน้า (คำสั่งนี้ควรแทนที่ 'pass')
def main (): # เซ็นเซอร์ระยะทางตรวจจับปราสาทได้หรือไม่? if front_distance.found_object (): # Crash castle detected by a Distance Sensor drivetrain.drive (FORWARD): # Turn to find a castle using the Distance Sensor pass -
เมื่อคำสั่ง found_object รายงานว่าเป็น False สาขา 'else' จะทำงาน ดังนั้น ยนต์ VR จะต้องหันไปหาปราสาทในสนามเด็กเล่น เพิ่มคำสั่ง turn ภายในสาขา 'else' และตั้งค่าพารามิเตอร์เพื่อหมุนหุ่นยนต์ VR ไปทางขวา
def main (): # เซ็นเซอร์ระยะทางตรวจจับปราสาทได้หรือไม่? if front_distance.found_object (): # Crash castle detected by a Distance Sensor drivetrain.drive (FORWARD): # Turn to find a castle using the Distance Sensor drivetrain.turn (RIGHT)
สำหรับข้อมูลของคุณ
สาขา 'else' ของคำสั่ง if else ทำงานในโปรเจ็กต์โดยเป็นส่วนหนึ่งของคำสั่ง if else เท่านั้น แม้ว่าคุณจะมีคำสั่ง if แบบแยกกันได้ แต่ใน VEXcode VR Python ไม่มีคำสั่ง 'else' สาขา 'อื่นๆ' จะทำงานเมื่อไม่ตรงกับเงื่อนไขของสาขา 'ถ้า' หาก ไม่มีเงื่อนไขที่กำหนดไว้ (สาขา 'ถ้า ') สาขา' อื่น 'จะไม่มีวันทำงาน 
เพิ่มลูปและทดสอบโปรเจกต์
- ก่อนที่จะทำการทดสอบโปรเจกต์จะต้องเพิ่มคำสั่งอีกหนึ่งคำสั่ง หาก ข้อความอื่นจะตรวจสอบเงื่อนไขเพียงครั้งเดียวก่อนที่จะย้ายไปยังคำสั่งถัดไปนอกข้อความ ในหน่วยที่ 7 มีการเพิ่มวงจรอินฟินิตี้ ในขณะที่ ให้กับโครงการเพื่อสั่งให้หุ่นยนต์ VR ตรวจสอบสภาพของเซ็นเซอร์ Down Eye ซ้ำๆ เพื่อให้แน่ใจว่าสภาพเซ็นเซอร์ระยะห่างถูกตรวจสอบซ้ำๆ ให้ลากหรือพิมพ์คำสั่ง infinite while loop จากนั้นคัดลอกคำสั่ง if else ไว้ภายในคำสั่ง infinite while ตอนนี้โปรเจกต์ของคุณควรมีลักษณะดังนี้:
-
อย่าลืมระวังการเยื้องเวลาคัดลอกและวางคำสั่งลงในลูปเพื่อให้โปรเจกต์ทำงานตามที่ตั้งใจไว้เมื่อดำเนินการ
def main (): ในขณะที่ True: # เซ็นเซอร์ระยะทางตรวจจับปราสาทได้หรือไม่? if front_distance.found_object (): # Crash castle detected by a Distance Sensor drivetrain.drive (FORWARD): # Turn to find a castle using the Distance Sensor drivetrain.turn (RIGHT) wait (5, MSEC)
-
- เปิดหน้าต่างสนามเด็กเล่นหากยังไม่ได้เปิด ตรวจสอบให้แน่ใจว่า Dynamic Castle Crasher Playground เปิดและดำเนินโครงการ

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

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

- ในระหว่างการดำเนินโครงการหุ่นยนต์ VR อาจดันชิ้นส่วนปราสาทไปจนถึงขอบและตกจากสนามเด็กเล่น เนื่องจากคำสั่ง found_object ยังคงรายงานว่ามีวัตถุอยู่ตรงหน้า VR Robot เมื่อคำสั่งนี้ รายงานว่าเป็นจริงหุ่นยนต์ VR จะขับเคลื่อนไปข้างหน้านำหุ่นยนต์ VR ให้ตกลงมาจากสนามเด็กเล่น
การไหลของโครงการที่มีคำสั่ง If Else
หากมีการ ใช้ คำสั่งอื่นเพื่อให้หุ่นยนต์ VR สามารถตัดสินใจได้ หากเงื่อนไขบูลีนเป็นจริงคำสั่งภายในสาขา 'ถ้า' จะทำงาน หากเงื่อนไขบูลีน เป็นเท็จคำสั่งภายใน สาขา 'อื่น' จะทำงาน
ตัวอย่างเช่น ในการวนซ้ำนี้ของ Dynamic Castle Crasher Playground เมื่อเริ่มโครงการ เซ็นเซอร์วัดระยะทางจะตรวจจับวัตถุ โดยเงื่อนไขของคำสั่ง found_object จะรายงานว่าเป็นจริง ตอนนี้ สาขา 'if' ของโครงการจะทำงาน และหุ่นยนต์ VR จะขับเคลื่อนไปข้างหน้า หุ่นยนต์ VR จะข้าม สาขา 'else' ของโครงการ
- สังเกตว่ามีการรายงานข้อมูลเซ็นเซอร์ระยะทางในแดชบอร์ดด้วย เมื่อตรวจพบวัตถุค่าระยะทางจะปรากฏขึ้น
อย่างไรก็ตาม ในรอบนี้ของ Dynamic Castle Crasher Playground เมื่อเริ่มโครงการ เซ็นเซอร์วัดระยะทางจะไม่ตรวจจับวัตถุ – เงื่อนไขของคำสั่ง found_object จะรายงานว่าเป็น False ตอนนี้ VR Robot จะข้ามสาขา 'if' ของโปรเจ็กต์ และสาขา 'else' ของโปรเจ็กต์จะทำงาน ดังนั้น VR Robot จะเลี้ยวขวา
- สังเกตว่าค่าเซ็นเซอร์ระยะทางในแดชบอร์ดมีการรายงานเป็น > 3000 มม. เซ็นเซอร์ระยะทางสามารถตรวจจับวัตถุภายในช่วง 3000 มิลลิเมตร (มม.) ดังนั้นเมื่อตรวจไม่พบวัตถุค่าจะถูกรายงานว่ามากกว่า>() 3000 มม.
เนื่องจากคำสั่ง if else อยู่ในลูปอินฟินิตี้ while โปรเจ็กต์จึงวนกลับไปที่จุดสูงสุดของลู อินฟินิตี้ while เพื่อตรวจสอบเงื่อนไขของคำสั่ง if else ซ้ำๆ กัน ลูปนี้จะดำเนินต่อไปตลอดไปโดยสั่งให้หุ่นยนต์ VR ตรวจสอบอย่างต่อเนื่อง หากมี เงื่อนไขอื่นๆหลายร้อยครั้งต่อวินาที
- โปรดทราบว่าคำสั่ง ได รฟ์และ หมุนภายใน คำสั่ง if else เป็น คำสั่งที่ไม่ต้องรอ คำสั่งที่ไม่รอจะไม่หยุดการไหลของโครงการในขณะที่กำลังทำงาน พฤติกรรมที่ไม่รอที่ถูกดำเนินการในคำสั่ง if else (เช่น 'ขับไปข้างหน้าถ้าตรวจพบวัตถุ') จะดำเนินต่อไปในขณะที่มีการตรวจสอบเงื่อนไข และจะเปลี่ยนแปลงเฉพาะเมื่อเงื่อนไขเปลี่ยนแปลงเท่านั้น
สำหรับข้อมูลของคุณ
หากมีการใช้ คำสั่งอื่นเพื่อให้แน่ใจว่ามีการดำเนินการเพียงสาขาเดียวในโครงการเมื่อมีการตรวจสอบเงื่อนไข มีเพียงหนึ่งอินสแตนซ์หรือเงื่อนไขเท่านั้นที่เป็นจริงได้ตลอดเวลา สิ่งนี้ทำให้โครงการมีประสิทธิภาพมากขึ้น

เปรียบเทียบโครงการปัจจุบันกับโครงการที่สร้างขึ้นในหน่วยที่ 7 โครงการหน่วยที่ 7 ใช้สี่ ถ้า ข้อความ

เมื่อเรียกใช้โปรเจกต์ที่ มี ข้อความหลายรายการอาจเป็นไปได้ว่าหลายเงื่อนไขจะรายงาน True (หรือ False) เมื่อโปรเจกต์ทำงานผ่านคำสั่งในอนันต์ใน ขณะที่ วนซ้ำ ความขัดแย้งเช่นนี้อาจทำให้โครงการหยุดทำงานหรือทำงานช้าลง
กล่าวอีกนัยหนึ่งคือ หลาย ข้อความในโครงการเปรียบเสมือนการเดินทางไปตามถนนที่มีทางลาดออกหลายทาง ขึ้นอยู่กับว่าคุณกำลังพยายามไปที่ไหนคุณจะเลี้ยวไปตามสถานที่ต่างๆ ตัวอย่างเช่น ถ้า คุณกำลังจะไปโรงเรียนคุณจะเลี้ยวซ้าย ถ้า คุณกำลังจะไปที่ร้านคุณจะเลี้ยวขวา แต่ถ้าคุณไม่ได้ไปโรงเรียนหรือร้านค้าล่ะ? เงื่อนไขทั้งสองจะรายงานเท็จและคุณจะอยู่บนเส้นทางที่ตรงไปตรงมา หรือถ้าคุณจะไปทั้งโรงเรียนและร้านค้าล่ะ? เงื่อนไขทั้งสองจะรายงาน True แต่คุณไม่สามารถเลี้ยวสองที่ในเวลาเดียวกันได้ 
ในการเปรียบเทียบต่อไป ข้อความอื่นๆก็เหมือนกับการเดินทางไปยังทางแยกบนถนน – มันบังคับให้คุณตัดสินใจ ถ้า คุณกำลังจะไปโรงเรียน ให้เลี้ยวซ้าย ถ้า, ให้เลี้ยวขวา ไม่ว่าคุณจะไปที่ไหน คุณต้องเลี้ยวซ้ายหรือขวา การใช้คำสั่ง if else จะช่วยหลีกเลี่ยงจุดบกพร่องเช่นเดียวกับข้างต้น เนื่องจากจะบังคับให้คุณตัดสินใจ เนื่องจากมีเงื่อนไขเดียวเท่านั้นที่สามารถเป็นจริงได้ ในช่วงเวลาที่กำหนด