Skip to main content

2과: If/Else 조건문

이 수업에서는 VR 로봇이 Dynamic Castle Crasher Playground에서 최소 두 개의 건물을 쓰러뜨리는 프로젝트를 만들 것입니다. 놀이터 레이아웃은 재설정할 때마다 변경되므로 루프와 센서 피드백을 사용하여 과제를 해결하려면 알고리즘이 필요합니다.

다이나믹 캐슬 크래셔 놀이터 레이아웃의 예:

로봇이 동일한 시작 위치에 있고 성이 다른 위치에 있는 Dynamic Castle Crasher Playground의 샘플 레이아웃을 위에서 아래로 본 세 가지 보기입니다. 레이아웃은 나란히 배치되어 놀이터가 재설정될 때마다 성의 위치가 어떻게 바뀌는지 강조합니다.

학습 성과

  • [If then else] 블록은 보고된 부울 값에 따라 If 또는 Else 분기 내부의 블록을 실행하는 C 블록인지 확인합니다.
  • [If then else] 블록은 일반적으로 [Repeat] 또는 [Forever] 블록과 함께 사용되어 조건을 두 번 이상 확인하는 데 사용됩니다.
  • [If then else] 블록이 루프와 함께 사용되는 이유를 식별하고 설명하세요.
  • 프로젝트에서 [If then else] 분기가 실행되는 원인을 설명하세요.

[If then else] 블록을 사용하는 방법

이 챌린지는 Unit 2의 Castle Crasher 챌린지와는 다릅니다. 2단원 과제에서는 간단한 시퀀싱과 Drivetrain 명령을 사용하여 정적 놀이터의 건물을 무너뜨렸습니다.

2단원의 VEXcode VR 프로젝트 샘플입니다. 이 프로젝트는 시작 시 블록으로 시작하며 6개의 블록이 첨부됩니다. 블록에는 순서대로 다음과 같이 쓰여 있습니다. 구동 속도를 100%로 설정하세요. 회전 속도를 100%로 설정하세요. 1550mm 전진하세요. 180도 우회전하세요. 700mm 전진하세요. 그런 다음 90도 우회전하세요.

Dynamic Castle Crasher Playground의 레이아웃이 변경되기 때문에 드라이브트레인 명령만으로는 VR 로봇이 두 개 이상의 건물을 무너뜨리기에 충분하지 않습니다. 드라이브트레인 명령 세트는 한 플레이그라운드에서는 작동하지만 다른 플레이그라운드에서는 작동하지 않을 수 있습니다. 센서와 선택을 사용하는 알고리즘이 필요합니다. [If then else] 블록은 이 프로젝트에 조건문이 있는 선택 항목을 추가하여 알고리즘을 생성하는 데 사용됩니다.

일부 성만 쓰러지고 다른 성들은 그대로 둔 Dynamic Castle Crasher Playground의 위에서 내려다본 모습입니다. 이는 성의 위치가 무작위로 바뀔 때 드라이브트레인 명령만으로는 충분하지 않다는 것을 보여줍니다.

VR 로봇이 Dynamic Castle Crasher Playground에서 건물을 무너뜨리는 데는 두 가지 주요 단계가 있습니다.

  1. VR 로봇이 성 건물을 감지하면, 그쪽으로 달려가 성 건물을 쓰러뜨리세요.
    1. 다른 모든 놀이터와 달리 Dynamic Castle Crasher Playground 에는 벽이 없습니다. 건물이 Dynamic Castle Crasher Playground에 있는 유일한 물체이므로 거리 센서를 사용하여 건물을 감지할 수 있습니다.

      로봇이 레이아웃의 하단 중앙에 시작 위치에 있고, 로봇 바로 앞에 빨간색 상자로 강조 표시된 성을 가리키는 점선 화살표가 있는 Dynamic Castle Crasher Playground의 위에서 내려다본 모습입니다. 화살표는 센서가 성을 앞에 있는 물체로 감지할 수 있음을 나타냅니다.
  2. VR 로봇이 성 건물을 감지하지 못할 경우, 돌아서서 다시 성 건물이 있는지 확인하세요.
    1. 건물이 Dynamic Castle Crasher Playground에 있는 유일한 물체이므로 거리 센서를 사용하여 성 건물을 감지할 수 있습니다.

      Dynamic Castle Crasher Playground의 위에서 내려다본 모습. 로봇이 시작 위치에 있고, 양쪽에 곡선 화살표가 있어 성 물체가 감지될 때까지 회전해야 함을 나타냅니다.

1단계와 2단계가 완료되면 VR 로봇은 1단계로 돌아가 거리 센서를 사용하여 다음에 쓰러뜨릴 건물을 찾습니다.

  • VEXcode VR에서 새 프로젝트를 시작하고 프로젝트 이름을 Unit9Lesson2로 지정합니다.

    VEXcode VR 도구 모음 중앙에 있는 프로젝트 이름 상자는 빨간색 상자로 강조 표시되어 있으며, 플레이그라운드 선택 버튼 왼쪽에 있습니다. 프로젝트 이름은 단원 9, 수업 2입니다.
  • 작업 공간에 [주석] 블록 두 개를 추가하고 위에 설명된 단계를 작성합니다.

    두 개의 Comment 블록이 When started 블록에 첨부된 새로운 VEXcode VR 프로젝트입니다. 주석은 순서대로 읽습니다: 거리 센서를 사용하여 찾은 건물을 쓰러뜨리세요. 거리 센서를 사용하여 건물을 찾기 위해 돌아서세요.
  • [If then else] 블록은 위에 설명된 각 동작을 트리거하는 데 사용할 수 있습니다. 각 동작은 [If then else] 블록의 부울 조건이 TRUE 또는 FALSE를 보고하는지에 따라 달라집니다. [Comment] 블록 아래에 [If then else] 블록을 추가합니다.

    두 번째 주석 아래에 If then else 블록이 첨부된 동일한 VEXcode VR 프로젝트입니다. If 분기의 매개변수는 열려 있습니다.

    귀하의 정보를 위해

    [If then else] 블록은 부울 리포터 블록을 입력으로 받는 C 블록입니다. [If then else] 블록은 프로젝트의 흐름을 제어하는 조건문입니다. [If then else] 블록은 조건이 충족되면 특정 명령어 시퀀스를 실행하고, 조건이 충족되지 않으면 다른 명령어 세트를 실행하여 프로젝트 흐름을 '분기'합니다. [If then else]의 한 분기만 실행됩니다.

    VEXcode VR 도구 상자의 If then else 블록.
    • 조건이 TRUE로 보고되면 If Then 분기 내부의 블록이 실행됩니다.
    • 조건이 FALSE로 보고되면 Else 분기 내부의 블록이 실행됩니다.
    VEXcode VR 프로젝트는 If then else 블록의 각 분기 기능을 설명하는 데 사용됩니다. 이 프로젝트에서 If then else 블록은 When 시작에 연결되어 있으며, If Front Distance가 객체를 찾으면 Comment - 거리 센서를 사용하여 발견한 건물을 쓰러뜨리고 전진합니다. Else, Turn to find a building using Distance Sensor, and Turn right를 읽습니다. '만약 그렇다면' 분기에는 거리 센서가 물체를 감지하면 전진이라는 라벨이 붙어 있습니다. 'Else' 분기는 거리 센서가 객체를 감지하지 못하면 우회전으로 표시됩니다.

    한 브랜치 내부의 모든 블록이 실행되면 프로젝트는 [If then else] 블록 외부의 다음 블록으로 이동합니다.

  • 이 프로젝트에서는 거리 센서를 사용하여 놀이터에서 건물을 감지할 수 있습니다. [If then else] 블록에 <Distance found object> 블록을 추가합니다.

    이전의 동일한 VEXcode VR 프로젝트에 Distance Found 객체 블록을 If then 분기의 매개변수로 추가했습니다. If then 블록은 이제 If Front Distance가 객체를 찾았다면이라고 읽습니다.

    귀하의 정보를 위해

    <Distance found object> 블록은 거리 센서가 VR 로봇 앞에 있는 물체를 찾았는지 보고하는 부울 리포터 블록입니다. 이 블록은 VR 로봇의 3000밀리미터(mm) 이내에 물체나 표면이 있는 경우 TRUE를 보고합니다.

    도구 상자에서 VEXcode VR 블록을 찾아낸 거리가 앞면 거리를 나타내는 객체입니까?
  • 이제 [If then else] 블록의 각 분기는 프로젝트 시작 시 작성된 주석을 사용하여 정의되어야 합니다. <Distance found object> 블록이 TRUE를 보고하면 VR 로봇은 해당 건물을 향해 달려가 건물을 쓰러뜨려야 합니다. [주석] 블록을 프로젝트의 'If Then' 분기로 이동합니다.

    첫 번째 Comment가 If then 브랜치의 C 내부로 이동된 동일한 VEXcode VR 프로젝트입니다. 이 프로젝트는 이제 시작 시, Front Distance에서 물체를 찾으면 거리 센서를 사용하여 찾은 건물을 쓰러뜨립니다.
  • VR 로봇이 건물을 감지하지 못하는 경우 어떻게 해야 하는지 알아보려면 다른 [Comment] 블록을 프로젝트의 'Else' 분기로 이동합니다.

    else 브랜치의 C 내부에 두 번째 주석이 있는 동일한 VEXcode VR 프로젝트입니다. 이제 프로젝트는 시작 시, Front Distance에서 물체를 찾으면 거리 센서를 사용하여 찾은 건물을 쓰러뜨리고, 그렇지 않으면 거리 센서를 사용하여 돌아서서 건물을 찾는 것으로 구성됩니다.
  • [If then else] 블록의 'If Then' 분기에 [Drive] 블록을 추가합니다.

    첫 번째 주석 바로 아래에 If then 분기로 설정된 Drive 블록이 있는 동일한 VEXcode VR 프로젝트입니다. If then 분기는 이제 "Front Distance가 물체를 찾았다면, Comment 거리 센서를 사용하여 찾은 건물을 쓰러뜨리고, 앞으로 주행하세요"로 읽힙니다.
  • <Distance found object> 블록이 FALSE를 보고하면 VR 로봇은 돌아서서 놀이터에서 건물을 찾아야 합니다. [If then else] 블록의 'Else' 분기에 있는 [Comment] 블록 아래에 [Turn] 블록을 추가합니다.

    Else 브랜치의 두 번째 주석 바로 아래에 Turn 블록이 설정된 동일한 VEXcode VR 프로젝트입니다. Else 분기는 이제 다음과 같이 읽습니다. Else, 거리 센서를 사용하여 건물을 찾는 방향에 대한 설명; 그런 다음 오른쪽으로 돌기.
  • 프로젝트를 테스트하기 전에 하나의 블록을 추가해야 합니다. [If then else] 블록은 스택의 다음 블록으로 이동하기 전에 조건 번만 확인합니다. 7단원에서는 VR 로봇이 다운 아이 센서의 상태를 반복적으로 확인하도록 지시하는 [Forever] 블록을 프로젝트에 추가하였습니다. 거리 센서 조건이 반복적으로 확인되고 있는지 확인하려면 [If then else] 블록 주위의 작업 공간으로 [Forever] 블록을 끌어다 놓습니다.

    Forever 블록을 프로젝트에 추가하는 방법에 대한 개요로, If then else 블록 전체가 Forever 블록의 C 안에 들어가도록 합니다. 이 프로젝트는 이제 시작 시, 영구적으로, Front distance에서 객체를 찾으면 전진하고, 그렇지 않으면 오른쪽으로 회전합니다.
  • Dynamic Castle Crasher Playground 을 열고 프로젝트를 실행합니다.

    3개의 성이 온전하고 2개의 성 건물이 무너진 캐슬 크래셔 놀이터의 위에서 내려다본 모습. 로봇은 무너진 성 옆 오른쪽 위 모서리에 있습니다.
  • VR 로봇이 최소 두 개의 건물을 무너뜨리면 놀이터를 다시 로드하고 Dynamic Castle Crasher Playground의 다른 레이아웃에서 프로젝트를 실행합니다.

    3개의 성이 온전하고 2개의 성 건물이 무너진 캐슬 크래셔 놀이터의 위에서 내려다본 모습. 로봇은 무너진 성 옆 오른쪽 위 모서리에 있습니다.
  • 프로젝트를 실행할 때마다 VR 로봇은 거리 센서가 건물을 감지할 때까지 회전한 다음, 해당 건물을 향해 주행하여 건물을 쓰러뜨립니다.

    VR 로봇이 놀이터 옆에서 성의 말을 밀어내는 모습을 측면에서 본 모습인데, 로봇이 놀이터 경계로 달려가기 시작하면서 마치 그 역시 가장자리에서 떨어질 것처럼 보입니다.
  • 프로젝트가 진행되는 동안 VR 로봇이 건물 조각을 가장자리까지 밀어내고 놀이터에서 떨어질 수 있습니다. <Distance found object> 블록은 여전히 VR 로봇 앞에 물체가 있다고 보고하고 있기 때문입니다. 이 블록이 TRUE를 보고하면 VR 로봇이 전진합니다. VR 로봇을 테이블에서 떨어지게 만듭니다.

이 강의의 나머지 부분을 계속하려면 다음 버튼을 선택하세요.