8. 지뢰 찾기 게임 만들기

【활동 하기】


1. 지뢰 찾기 게임을 위한 라디오 통신 알아보기

2. 지뢰 찾기 게임 지뢰와 지뢰탐지기 알고리즘 학습하기

3. 거리에 따른 라디오 패킷 신호강도 표현하기

4. 생각해보기

지뢰 찾기 게임을 알고 있나? 지뢰 찾기는 1989년 마이크로소프트사의 로버트 도너와 커트 존슨이 만든 윈도우게임이다. 1992년 윈도우 3.1을 설치하면 사용할 수 있었다. 컴퓨터에서 즐길 수 있는 지뢰 찾기는 지뢰가 숨어 있을 것 같은 부분을 예상해서 깃발 표시 혹은 X 표기를 하여 지뢰를 제거해 나간다.

이번 단원에서 만들어볼 마이크로비트 지뢰 찾기는 지뢰 마이크로비트와 지뢰탐색기 마이크로비트로 구성하여 친구와 함께 지뢰인 마이크로비트를 교실 어딘가 숨겨두고 지뢰탐색기 마이크로비트에 수신되는 라디오 통신의 신호 세기를 이용하여 지뢰 마이크로비트를 찾는 게임이다.

1 지뢰 찾기 게임을 위한 라디오 통신 알아보기

지뢰 찾기 게임을 만들기 위해서 마이크로비트가 서로의 좌표 데이터를 주고받아야 하기 때문에 라디오 통신을 사용해야 한다. 먼저, 라디오 그룹의 블록을 살펴보겠다.


② 라디오 그룹 블록 살펴보기


1
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오 전송 수 블록

라디오 통신을 사용하여 지정된 정수를 다른 마이크로비트들에게 전송한다.

2
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오 변수 전송 블록

라디오 통신을 사용하여 문자열과 수를 함께 묶어 다른 마이크로비트들에게 전송한다.

3
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오 문자열 전송 블록

라디오 통신을 사용하여 지정한 문자열을 다른 마이크로비트들에게 전송한다.

4
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오로 정수를 수신하면 실행 블록.

마이크로비트가 라디오 통신을 통해 정수를 수신하는 경우 원하는 프로그램 코드를 실행한다.

5
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷.라디오로 특정 변수값을 수신하면 실행 블록

마이크로비트가 라디오 통신을 통해 변숫값을 수신하면 원하는 프로그램 코드를 실행한다.

6
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오로 문자열을 수신하면 실행 블록

마이크로비트가 라디오 통신을 통해 문자열을 수신하면 원하는 프로그램 코드를 실행한다.

7
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 수신된 패킷의 정보를 가져오는 블록

마지막으로 수신된 라디오 패킷4)의 속성 중 하나를 가져온다. 수, 문자열 또는 변수-값 외에도 수신된 패킷 전송에 대한 다른 정보(신호의 강도, 전송시간, 시리얼 번호)도 포함한다. 이러한 추가 정보는 수신된 패킷에서 속성을 선택해 알아낼 수 있다 .

8
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오 그룹 설정 블록

라디오 통신을 사용할 때, 라디오 그룹의 아이디를 정한다. 그룹이란 라디오를 들을 때 주파수를 맞추는 것과 비슷하다. 라디오 그룹 번호를 지정하지 않으면, 자체적으로 그룹 번호를 설정하여 서로 다른 여러 개의 마이크로비트들에게 같은 프로그램을 업로드하면, 같은 그룹으로 묶여 서로서로 통신을 할 수 있게 된다. ID의 수는 0부터 255까지 정할 수 있다.

9
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오 전송 강도를 설정하는 블록

라디오 통신의 전송 강도를 설정한다. 즉, 마이크로비트 라디오 통신 신호의 강약을 조절할 수 있다. 0만큼 약하게 할 수도 있고 7만큼 강하게 할수도 있다. 기본은 6으로 되어 있다. 신호 강도의 단위는 dBm 데시벨 밀리와트라고 한다. 0은 -30dBm, 7은 +4dBm 정도다.

10
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오 시리얼 번호 전송 설정을 참이나 거짓으로 설정하는 블록

라디오 데이터 패킷에, 데이터를 전송하는 보드의 시리얼 번호를 함께 포함시키도록 설정한다. 만약 거짓으로 설정하면 시리얼 번호의 값은 0으로 설정된다.

2 지뢰 만들기

지뢰 역할을 할 마이크로비트에 입력할 코드는 단순하다. 지뢰 역할을 하는 마이크로비트는 계속해서 지뢰탐색기 역할을 하는 마이크로비트에게 라디오 통신으로 끊임없이 무엇이든 전송한다. 이때 지뢰 마이크로비트가 숫자를 전송한다면 지뢰탐색기의 마이크로비트도 숫자를 받았을 때 실행이 되도록 구성하고 문자를 전송한다면 지뢰탐색기 마이크로비트에서도 문자를 받았을 때 실행이 되도록 코드를 구성 해야 한다.


② 라디오 통신 그룹 설정하기


1
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 시작하면 실행 블록 안에 라디오 그룹을 1로 설정 블록이 들어가있다.

라디오 통신을 위해서는 가장 먼저 라디오 통신으로 데이터를 주고받을 통신 그룹을 정해야 한다. [시작하면 실행] 블록은 프로그램이 시작하면 한 번만 실행하는 것도 있지만 프로그램 시작 시 세팅을 진행한다. 즉, 한번 라디오 그룹을 설정하면 설정한 라디오 그룹이 계속 지속된다. [시작하면 실행] 블록 안에 [라디오 그룹 설정] 블록을 가져와 원하는 그룹으로 지정한다. [라디오 그룹 설정] 블록을 사용하면 1~255 그룹까지 설정할 수 있다.


② 라디오 통신으로 데이터 전달하기


2
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 시작하면 실행 블럭 안에 라디오 전송 수 블록이 들어가 있다.

[무한반복 실행] 블록 안에 [라디오 전송 : 수] 블록을 넣어 지뢰 역할을 하는 마이크로비트가 끊임없이 지뢰탐색기 역할을 하는 마이크로비트에게 숫자를 전송하도록 한다.

3 지뢰탐색기 만들기

친구가 숨긴 지뢰 마이크로비트를 찾으려면 지뢰가 보내는 라디오 통신을 수신할 수 있는 지뢰탐색기가 필요하다. 지뢰를 탐색하는 역할을 하는 마이크로비트는 지뢰가 보내는 숫자 데이터를 받으면서 신호의 세기를 확인하여 지뢰에 가까워지면 가까워질수록 마이크로비트 LED를 채워 지뢰가 가까워짐을 알 수 있도록 한다.


② 지뢰탐색기 만들기


1
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 시작하면 실행 블록 안에 라디오 그룹을 1로 설정 블록이 들어가 있다.

지뢰가 전송하는 데이터를 받기 위해 가장 먼저 지뢰와 같은 라디오 그룹으로 세팅한다. [시작하면 실행] 블록 안에 [라디오 그룹 설정] 블록으로 지뢰와 같은 라디오 그룹이 될 수 있도록 한다.

2
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오에서 정수를 수신하면 실행 블록 안에, 만약 참이면 실행, 아니면서 만약 참이면 실행, 아니면서 만약 참이면 실행, 아니면서 만약 참이면 실행, 아니면 실행 블록이 들어가있다.

지뢰에서 보내는 데이터가 숫자이기 때문에 라디오 수신하면 실행 블록에서 받는 변수를 receivedNumber로 선택한다.

그리고 수신하는 신호의 세기가 50보다 작을 때, 60보다 작을 때, 70보다 작을 때, 80보다 작을 때 4가지 조건과 위 네 가지 조건이 아닐 때 실행될 수 있도록 조건 블록을 추가한다.

3
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오에서 정수를 수신하면 실행 블록 안에 만약 수신된 패킷의 신호강도의 절대값이 50보다 크다면 실행, 아니면서 만약 수신된 패킷의 신호강도의 절대값이 60보다 크다면 실행, 아니면서 만약 수신된 패킷의 신호강도의 절대값이 70보다 크다면 실행, 아니면서 만약 수신된 패킷의 신호강도의 절대값이 80보다 크다면 실행, 아니면 실행 블록이 들어가 있다.

[수신된 패킷의 신호 강도] 는 절댓값을 갖도록 계산 그룹에서 [절대값] 블록을 사용하여 수신된 패킷의 신호 강도가 50보다 클 때, 60보다 클 때, 70보다 클 때, 80보다 클 때 4가지 조건으로 구성한다.

4
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 라디오에서 정수를 수신하면 실행 블록 안에 만약 수신된 패킷의 신호강도의 절대값이 50보다 크다면 LED를 아래부터 한 칸 출력 블록 실행, 아니면서 만약 수신된 패킷의 신호강도의 절대값이 60보다 크다면 LED를 아래부터 두 칸 출력 블록 실행, 아니면서 만약 수신된 패킷의 신호강도의 절대값이 70보다 크다면 LED를 아래부터 세 칸 출력 블록 실행, 아니면서 만약 수신된 패킷의 신호강도의 절대값이 80보다 크다면 LED를 아래부터 네 칸 출력 블록 실행, 아니면 LED를 전부 출력 블록이 들어가 있다.

지뢰탐색기에서 수신되는 패킷의 신호 강도에 따라 LED가 채워질 수 있도록 그림과 같이 [LED 출력] 블록을 사용한다.


완성된 지뢰와 지뢰탐색기로 친구와 함께 지뢰 찾기 놀이를 해보자. 친구가 지뢰를 숨기도록 하고 지뢰탐색기로 찾아보자. 지뢰에 가까이 갈수록 LED의 그래프가 채워지는 것을 확인할 수 있다.

4 생각해보기

지뢰 찾기와 같이 라디오 통신으로 친구와 할 수 있는 놀이는 무엇이 있을까?

<용어사전>

4) 패킷 : 네트워크를 통해 전송하기 쉽도록 자른 데이터의 전송단위. - 두산백과