Bài 2: Xây dựng và kiểm tra dự án
Tiếp tục xây dựng dự án
-
Bây giờ điều kiện của câu lệnh if elsecần được thiết lập. Để sử dụng Cảm biến khoảng cách để phát hiện lâu đài, có thể sử dụng lệnh found_object. Thêm lệnh found_objectvào điều kiện. Dự án của bạn bây giờ sẽ trông như thế này:
def main(): # Cảm biến khoảng cách có phát hiện được lâu đài không? nếu front_distance.found_object(): # Lâu đài sụp đổ được phát hiện bằng Cảm biến khoảng cách vượt qua khác: # Quay lại để tìm lâu đài bằng cách sử dụng Cảm biến khoảng cách lần vượt qua -
Nếu Cảm biến khoảng cách tìm thấy vật thể, Robot VR sẽ tiến về phía trước để đánh đổ lâu đài. Thêm lệnh drivevào nhánh 'if' của câu lệnh if else và đặt tham số để điều khiển Robot VR tiến về phía trước. (Lệnh này sẽ thay thế lệnh 'pass').
def main(): # Cảm biến khoảng cách có phát hiện được lâu đài không? nếu front_distance.found_object(): # Lâu đài va chạm được phát hiện bởi Cảm biến khoảng cách drivetrain.drive(FORWARD) else: # Quay lại để tìm lâu đài bằng cách sử dụng Cảm biến khoảng cách -
Khi lệnh found_object báo cáo Sai, nhánh 'else' sẽ chạy, do đó VR Robot sẽ cần phải quay lại để tìm lâu đài trên Sân chơi. Thêm lệnh lượt vào nhánh 'else' và thiết lập các tham số để xoay Robot VR sang phải.
def main(): # Cảm biến khoảng cách có phát hiện được lâu đài không? if front_distance.found_object(): # Phát hiện lâu đài va chạm bằng Cảm biến khoảng cách drivetrain.drive(FORWARD) else: # Quay lại để tìm lâu đài bằng Cảm biến khoảng cách drivetrain.turn(RIGHT)
Để bạn biết
Nhánh 'else' của câu lệnhif elsechỉ hoạt động trong một dự án như một phần của câu lệnhif else. Mặc dù bạn có thể có câu lệnhifđứng riêng, nhưng không có câu lệnh 'else' nào trong VEXcode VR Python. Nhánh 'else' được chạy khi điều kiện của nhánh 'if' không được đáp ứng. Nếu không có điều kiện xác định (nhánh 'if'), nhánh 'else' sẽ không bao giờ chạy. 
Thêm vòng lặp và kiểm tra dự án
- Trước khi thử nghiệm dự án, cần thêm một lệnh nữa. Các câu lệnh If else sẽ chỉ kiểm tra điều kiện một lần trước khi chuyển sang lệnh tiếp theo bên ngoài câu lệnh. Trong Đơn vị 7, một vòng lặp vô hạnwhile đã được thêm vào dự án để hướng dẫn Robot VR kiểm tra nhiều lần tình trạng của Cảm biến mắt xuống. Để đảm bảo điều kiện Cảm biến khoảng cách được kiểm tra lặp lại, hãy kéo vào hoặc nhập vòng lặp vô hạn while , sau đó sao chép câu lệnhif elsevào bên trong vòng lặp vô hạnwhile. Dự án của bạn bây giờ sẽ trông như thế này:
-
Hãy nhớ chú ý đến việc thụt lề khi sao chép và dán lệnh vào vòng lặp để dự án hoạt động như mong muốn khi chạy.
def main(): while True: # Cảm biến khoảng cách có phát hiện được lâu đài không? if front_distance.found_object(): # Lâu đài va chạm được phát hiện bởi Cảm biến khoảng cách drivetrain.drive(FORWARD) else: # Quay lại để tìm lâu đài bằng Cảm biến khoảng cách drivetrain.turn(RIGHT) wait(5, MSEC)
-
- Mở Cửa sổ Sân chơi nếu nó chưa mở. Hãy đảm bảo rằngDynamic Castle Crasher Playgroundmở ra và chạy dự án.

- Sau khi VR Robot đã đánh đổ ít nhất hai lâu đài, hãy tải lại Sân chơi và chạy dự án trên một bố cục khác của Sân chơi Dynamic Castle Crasher.

- Trong mỗi lần chạy của dự án, Robot VR sẽ quay cho đến khi Cảm biến khoảng cách phát hiện ra một tòa lâu đài, sau đó lái về phía tòa nhà đó để đánh đổ nó.

- Trong quá trình thực hiện dự án, Robot VR có thể đẩy một mảnh lâu đài ra tận mép và rơi khỏi Sân chơi. Nguyên nhân là do lệnh found_objectvẫn báo cáo rằng có một vật thể ở phía trước Robot VR. Khi lệnh này báo cáo là Đúng, VR Robot sẽ tiến về phía trước, khiến VR Robot rơi khỏi Sân chơi.
Luồng dự án với câu lệnh If Else
Câu lệnh if else được sử dụng để VR Robot có thể đưa ra quyết định. Nếu điều kiện Boolean là Đúng, thì các lệnh bên trong nhánh 'if' sẽ chạy. Nếu điều kiện Boolean là False, thì các lệnh bên trong nhánh 'else' sẽ chạy.
Ví dụ, trong lần lặp lại này của Dynamic Castle Crasher Playground, khi dự án được bắt đầu, Cảm biến khoảng cách phát hiện một vật thể – điều kiện của lệnhfound_objectbáo cáo là Đúng. Bây giờ nhánh 'if'của dự án sẽ chạy và VR Robot sẽ tiến về phía trước. Robot VR sẽ bỏ qua nhánh 'else' của dự án.
- Lưu ý rằng dữ liệu Cảm biến khoảng cách cũng được báo cáo trong Bảng điều khiển. Khi phát hiện vật thể, giá trị khoảng cách sẽ được hiển thị.
Tuy nhiên, trong lần lặp lại này của Dynamic Castle Crasher Playground, khi dự án được bắt đầu, Cảm biến khoảng cách KHÔNG phát hiện ra vật thể – điều kiện của lệnhfound_object báo cáo là Sai. Bây giờ VR Robot sẽ bỏ qua nhánh 'if' của dự án và nhánh 'else' của dự án sẽ chạy, do đó VR Robot sẽ rẽ phải.
- Lưu ý rằng giá trị Cảm biến khoảng cách trong Bảng điều khiển được báo cáo là > 3000 mm. Cảm biến khoảng cách có thể phát hiện các vật thể trong phạm vi 3000 mm, do đó khi không phát hiện thấy vật thể, giá trị sẽ được báo cáo là lớn hơn (>) 3000 mm.
Vì câu lệnh if else nằm bên trong vòng lặp vô hạn while , nên dự án lặp lại đến đầu vòng lặp vô hạnwhile để kiểm tra điều kiện của câu lệnh if else nhiều lần. Vòng lặp này sẽ tiếp tục mãi mãi, hướng dẫn Robot VR liên tục kiểm tra điều kiện if elsehàng trăm lần mỗi giây.
- Lưu ý rằng các lệnh drive và turn bên trong câu lệnh if elselà các lệnh không chờ. Các lệnh không chờ sẽ không dừng tiến trình của một dự án trong khi chúng đang chạy. Hành vi không chờ đợi được thực hiện trong câu lệnh if else (chẳng hạn như 'tiến về phía trước nếu phát hiện thấy đối tượng') sẽ tiếp tục trong khi điều kiện được kiểm tra và chỉ thay đổi khi điều kiện thay đổi.
Để bạn biết
Câu lệnhif elseđược sử dụng để đảm bảo rằng chỉ có một nhánh trong dự án được chạy khi điều kiện được kiểm tra. Chỉ có một trường hợp hoặc điều kiện có thể đúng tại một thời điểm. Điều này làm cho dự án hiệu quả hơn.

So sánh dự án hiện tại với dự án được tạo ở Đơn vị 7. Dự án Đơn vị 7 sử dụng bốn câu lệnh nếu

Khi chạy qua một dự án với nhiều câu lệnh if , có khả năng nhiều điều kiện sẽ báo cáo là Đúng (hoặc Sai) khi dự án chạy qua các lệnh trong vòng lặp vô hạn while. Những xung đột như thế này có thể khiến dự án ngừng hoạt động hoặc chạy chậm hơn.
Nói cách khác, nhiều câu lệnh nếutrong một dự án giống như đi trên một con đường có nhiều lối ra. Tùy thuộc vào nơi bạn muốn đến, bạn sẽ rẽ ở những địa điểm khác nhau. Ví dụ,nếubạn đi đến trường, bạn sẽ rẽ trái; nếu bạn đi đến cửa hàng, bạn sẽ rẽ phải. Nhưng nếu bạn không đi học hoặc đi mua sắm thì sao? Cả hai điều kiện đều báo cáo là Sai và bạn sẽ vẫn đi đúng đường. Hoặc nếu bạn vừa đi học vừa đi đến cửa hàng thì sao? Cả hai điều kiện đều báo cáo là Đúng, nhưng bạn không thể rẽ ở hai địa điểm cùng một lúc. 
Để tiếp tục phép so sánh, câu lệnh if elsegiống như việc đi đến ngã ba đường – nó buộc bạn phải đưa ra quyết định. Nếubạn đi đến trường, rẽ trái; nếu không thìrẽ phải. Bất kể bạn đi đâu, bạn đều phải rẽ trái hoặc rẽ phải. Sử dụng câu lệnh if elsesẽ tránh được các lỗi như trên, vì nó sẽ buộc bạn phải đưa ra quyết định, vì chỉ có một điều kiện có thể là Đúng tại một thời điểm nhất định.