지금까지 엔트리의 기본적인 조작 방법을 알아보았습니다. 지금부터는 엔트리를 활용한 간단한 작품을 만들어 보면서 블록형 코딩을 연습해 보고, 나아가서 원하는 창작물을 만들 수 있는 기반을 다져보도록 하겠습니다.
오늘은 엔트리 작품 만들기 첫 시간으로 로봇청소기 만들기를 해보도록 하겠습니다.
로봇청소기는 일정한 공간을 빈틈없이 돌아다니면서 청소를 해야 합니다. 그리고 장애물을 만났을 때는 다른 방향으로 돌아서 계속 다녀야 합니다. 위 두 가지에 주의하여 코딩해 보도록 하겠습니다.
엔트리에 로그인 후 작품 만들기에 들어가서 코딩할 준비를 합니다.
위와 같은 화면이 뜨면 코딩할 준비가 완료된 것입니다.
제일 먼저 붉은색으로 표시된 곳에서 작품의 이름을 지정해 줍니다. 로봇청소기 만들기이기 때문에 로봇청소기로 하겠습니다.
그다음은 오브젝트를 추가합니다. 엔트 리봇은 필요 없기 때문에 삭제하고, 청소할 공간 배경과 로봇청소기 오브젝트를 추가합니다.
저는 배경은 마룻바닥을 가지고 왔고, 로봇청소기는 검색하면 총 3가지가 나오는데 그중 녹색을 선택하여 가지고 왔습니다.
각각의 오브젝트에 코딩을 하여야 하는데, 마룻바닥은 배경의 역할만 하기 때문에 코딩은 하지 않아도 됩니다. 따라서 로봇청소기 오브젝트만 클릭하여 코딩을 하겠습니다.
먼저 시작 버튼을 클릭했을 때 블록과 계속 반복하기 블록을 가지고 옵니다. 계속 반복하기는 마룻바닥을 빈틈없이 계속 돌아다녀야 하기 때문에 필요합니다.
그다음은 로봇청소기가 움직이도록 코딩을 하여야 하는데, 그전에 로봇청소기가 움직인 경로를 표시해주는 코딩을 먼저 해줍니다. 로봇청소기가 움직인 경로를 표시하지 않으면 마룻바닥의 모든 부분을 다 청소했는지 알 수가 없기 때문입니다.
따라서 붓 꾸러미에서
아래와 같은 블록을 가지고 옵니다. 붓의 굵기는 로봇청소기의 크기에 맞추어서 지정하면 됩니다. 저는 50으로 정하였습니다. 그리고 그리기 시작하기 블록은 로봇청소기가 움직인 경로를 지정한 붓의 굵기로 표시해주는 역할을 합니다.
다음은 로봇청소기가 움직이도록 코딩을 합니다.
다양한 방법이 있겠지만, 저는 이동방향으로 ~만큼 이동하기 블록을 사용하겠습니다. ~의 크기는 10으로 정하였는데, 숫자가 너무 크면 제대로 작동하지 않습니다. 그 이유는 다음 블록을 설명할 때 같이 설명하겠습니다.
로봇청소기는 계속 앞으로만 가는 것이 아니라, 장애물을 만났을 때는 각도를 달리 하여 앞으로 나아가야 합니다. 따라서 흐름 꾸러미의 조건 블록 중 만약 ~라면 블록을 가지고 오고, 여기서 장애물은 벽이기 때문에 판단 꾸러미에서 벽에 닿았는가? 블록을 가지와 결합합니다.
이동 블록과 연결하면 위와 같은 모습이 됩니다. 여기서 움직임 블록의 숫자를 너무 크게 하지 않은 이유는, 너무 크게 했을 경우 조건 블록에서 벽을 인식하기 전에 이미 벽을 넘어서 지나가 버리는 경우가 발생합니다. 이럴 경우 로봇청소기는 화면 밖으로 나가고, 벽을 찾을 수 없어서 계속 이동방향으로 이동하게 됩니다. 따라서 로봇청소기가 벽을 인식할 수 있게 짧게 짧게 움직이도록 하려고 움직임의 크기를 적게 설정하였습니다.
다음은 조건 블록 안에 들어갈 내용을 코딩하겠습니다.
벽에 닿았다면 방향을 바꾸어서 진행을 하여야 합니다. 하지만 항상 같은 각도로만 방향을 바꾸면 배경에 다른 장애물이 있을 경우 모든 곳을 청소하기가 힘듭니다. 따라서 방향은 계산 꾸러미에서 0부터 10 사이의 무작위 수 블록을 가지고 와서 움직임 꾸러미에 있는 방향을 90도만큼 회전하기 블록에 끼워 넣고 무작위 수의 범위를 0부터 180으로 설정합니다. 이 범위는 저와 다르게 하더라고 큰 문제는 없습니다.
위와 같은 블록이 완성되면 만일 벽에 닿았는가 조건문 사이에 넣습니다. 이렇게 하면 벽에 로봇청소기가 닿았을 경우 위 범위 수 중 하나의 각도로 회전하여 다음 방향으로 진행합니다. 따라서 시간을 두고 지켜보면 결국 모든 범위를 다 움직이는 것을 확인할 수 있습니다. 하지만 실제로 실행해 보면 가끔 로봇청소기가 한 곳에 멈춰 진동하는 것처럼 보일 때가 있습니다. 이는 벽에 닿아서 다음 각도의 방향으로 이동할 때 로봇청소기가 바로 회전을 다시 벽에 부딪히기 때문에 발생하는 현상입니다.
이를 해결하기 위해 벽에 닿았을 때 뒤로 조금 이동하도록 설정을 하면 위와 같은 현상을 막을 수 있습니다. 따라서 이동 방향을 바꾸는 블록 바로 위에 이동 방향으로 움직이기 블록을 넣고 그 값을 -10으로 설정합니다. -값이기 때문에 왔던 방향과 반대로 이동하게 됩니다.
이렇게 코딩을 하면 벽에 부딪혔을 때 조금 뒤로 간 다음 회전을 하기 때문에 위와 같이 반복해서 벽에 부딪히는 것을 막을 수 있습니다.
이제 모든 코딩이 끝이 났습니다. 모두 연결하면
위와 같은 모습으로 코딩이 완료가 됩니다.
지금까지 엔트리로 로봇청소기를 만들어 보았습니다. 충분히 이해가 되었다면 배경 중에 다른 오브젝트를 삽입하여 삽입한 오브젝트는 피해서 로봇청소기가 청소를 하도록 코딩해 보는 것도 좋을 것 같습니다.
감사합니다.