Skip to content

활동

그룹 텔레포트 전송

중급 | MakeCode, Python | 가속도 센서, 라디오 | 라디오 파, 불 논리, 통신

1단계: 만들어 보세요.

프로젝트 소개

무선 라디오 기능을 사용하는 뜨거운 감자 ‘hot potato’ 게임 – 오리 텔레포트 전송!

3개의 micro:bit , 흔들린 micro:bit 1개에는 오리 모양이 출력됨

설명

  • 이전의 오리 텔레포트 전송 게임에서와 같이, 이번 프로그램에서는 무선 라디오 기능을 사용해서 오리 모양 ‘duck’ 을 다른 micro:bit 들에 전송합니다. 두 명이 할 때 처럼, 다른 사람들에게 메시지를 전송하면 – 나머지 다른 모든 사람들이 오리 모양을 가지게 되고, 마찬가지로 누구든지 다른 사람들에게 오리를 전송 할 수 있다는 것을 금방 알 수 있습니다.
  • 2명 이상이 함께 오리 텔레포트 전송 게임을 하게 되면, 오리를 받을 플레이어를 선택할 방법이 필요합니다. 그렇기 때문에 게임에 참가하는 플레이어 프로그램들은 1번 부터 시작하는 유일한 ID 번호를 가지도록 합니다.
  • 플레이어 ID 번호를 변수 ID에 저장하고, 프로그램을 업로드 하기 전에 미리 각각 2, 3, 4, ... 처럼 바꾼 후 업로드해야 합니다.
  • players 변수의 값을 게임을 함께하는 인원 수로 설정해서, 각각의 플레이어들이 오리를 전송 받을 수 있도록 합니다. 프로그램이 시작되면, 각 플레이어의 ID 번호가 LED 화면에 출력되기 때문에 각각의 플레이어가 몇 번인지 알 수 있습니다.
  • 오직 한 사람만 오리 모양을 가질 수 있도록, 오리를 가지고 있는 경우에만(if) 마이크로비트를 흔들어서 메시지를 전송 할 수 있도록 합니다. 오리를 가지고 있는 지의 여부는 불(참/거짓) 변수 hasDuck에 저장되어있는 값으로 확인합니다. 불(boolean) 변수는 2가지 값 중 하나만 저장할 수 있습니다.: 참(True) 또는 거짓(False) 값만 저장할 수 있습니다. 게임이 시작되면 1번 플레이어만 오리를 가지고 있기 때문에, 다른 플레이어들은 오리를 전송할 수 없습니다.
  • 1번 플레이어가 micro:bit 를 흔들면, 1 이상 플레이어 수 이하의 정수 값들 중에 1개의 정수값을 랜덤으로 골라냅니다. 랜덤으로 골라낸 번호가 자기 번호와 다르면, 골라낸 번호를 무선 라디오로 전송하고, 자신의 LED 화면을 지운 후 hasDuck 변수값을 거짓(False)으로 바꿉니다.
  • 랜덤으로 골라낸 번호가 자기 번호와 같으면 , 다시 다른 사람들에게 오리를 전송할 수 있도록 하면 됩니다. 하지만, 만약, 자기 자신에게 오리를 전송하려고 하면? – 다른 공간으로 오리가 사라져 버릴 수도 있기 때문에 주의 해야 합니다!
  • 플레이어의 micro:bit 가 무선 라디오로 전송된 번호를 받으면, 그 번호가 자기 ID 번호와 같은지 검사합니다. 자기 번호와 같으면, 오리를 가지게 됩니다! LED 화면에 오리 모양을 출력하고, hasDuck 변수값을 참(True)으로 설정합니다. 그렇게 하면, 똑같은 방법으로 다른 사람들에게 오리를 전송할 수 있게 되었다는 것을 의미합니다.
  • 오리를 단단히 잘 지켜보세요.: micro:bit 를 떨어트리거나 친구와 부딪히면 오리가 사라져 버릴 것입니다. 게임을 재미있게 즐겨보세요.

준비물

  • 3개 이상의 micro:bit
  • MakeCode 또는 Python 편집기
  • AAA 배터리 팩 (옵션)
  • 함께 해 볼 친구 여러 명

2단계: 프로그래밍 해보세요.

1from microbit import *
2import radio
3import random
4
5radio.config(group=42)
6players = 3
7ID = 3
8display.show(ID)
9if ID == 1:
10    hasDuck = True
11else:
12    hasDuck = False
13radio.on()
14
15while True:
16    message = radio.receive()
17    if accelerometer.was_gesture('shake'):
18        if hasDuck:
19            sendTo = random.randint(1, players)
20            if sendTo != ID:
21                display.clear()
22                radio.send(str(sendTo))
23    if message:
24        if message == str(ID):
25            hasDuck = True
26            display.show(Image.DUCK)
27        else:
28            hasDuck = False
29    

3단계: 더 좋게 만들어 보세요.

  • 오리 대신 다른 모양을 전송하도록 바꿔보세요.
  • 마이크로비트를 흔들어 뽑은 랜덤 번호가 자신의 번호와 같다면, 마이크로비트를 다시 흔들어야 합니다. 자기 번호를 뽑지 않도록 프로그램을 수정해 보세요. 그렇게 할 수 있는 여러 가지 방법이 있습니다.
  • 플레이어 1이 항상 처음에 오리를 가지고 있습니다. 게임을 시작할 때, 랜덤으로 오리를 가지도록 할 수 있을까요? 그렇게 처음에 랜덤으로 가지도록 하는 것을 다른 micro:bit 에 어떻게 전달할 수 있을까요?