Lesson Progress
0% Complete

이 활동에서는 다음과 같이 작동하는 Gift Courier Service를 구축합니다.

  • Tobi는 4개의 국제 도시 중 한 곳에 전달하고 싶은 선물이 있습니다.
    • 샌프란시스코
    • 토론토
    • 시드니
    • 뉴델리
  • 그러나 tobi는 선물을 어디로 배달해야 할지 모릅니다. 대신 종이에 적힌 핀 코드 번호를 tobi에게 보여주면 tobi가 해당 도시로 선물을 배달할 것입니다. 핀 코드 번호는 다음과 같습니다.
    • 샌프란시스코용 94016
    • 토론토용 667777
    • 시드니용 2001
    • 뉴델리용 380001
  • 화면의 run 버튼을 눌러 스크립트를 실행하면 화면에 음성인식 창이 뜬다. 이 화면 팝업에 핀 코드를 표시하면 해당 도시로 선물이 발송됩니다.

코딩하자

무대 설정

  1. Pictoblox에서 새 파일을 열고 Python Coding 환경을 선택합니다.
  2. 시간 라이브러리를 가져옵니다. 이제 코드는 다음과 같아야 합니다.
    sprite = Sprite('Tobi')
    
    import time
  3. 이 활동에서는 무대에 총 6개의 스프라이트가 있을 것입니다. 이들은 다음과 같습니다.
    1. Tobi 스프라이트(기본값)
    2. 선물 스프라이트
    3. 홈 버튼(이 중 4개)
  4. Choose a sprite 버튼(오른쪽 하단 모서리)을 클릭하고 위에 나열된 모든 스프라이트를 하나씩 추가합니다.
  5. 또한 Choose a Backdrop 버튼을 클릭하여 배경 Blue Sky2를 추가합니다.
  6. 이제 4개의 국제 도시에 따라 4개의 홈 버튼 스프라이트에 레이블을 지정해야 합니다. 이를 위해 다음 단계를 따르십시오.
    1. Home Button 스프라이트를 클릭합니다.
    2. Costumes 탭으로 이동
    3. 스프라이트 주위에 텍스트를 쓰기 위한 T 버튼을 클릭합니다.
    4. 도시 이름 쓰기: San Francisco
  7. 마찬가지로 스프라이트 Home Button2, Home Button3, Home Button4로 이동하여 위의 절차를 반복합니다.

코드 추가

  1. Project Files 내의 Tobi.py 파일을 클릭하면 여기에 모든 코드를 작성할 것입니다.
  2. Tobi 스프라이트는 이미 시작되었으므로(기본값), 그림과 같이 다른 5개의 스프라이트를 시작하겠습니다.
    gift = Sprite('Gift')
    home1 = Sprite('Home Button')
    home2 = Sprite('Home Button2')
    home3 = Sprite('Home Button3')
    home4 = Sprite('Home Button4')
  3. 이제 스테이지에 있는 6개의 스프라이트 위치를 조정하겠습니다. 이를 위해 xy 그리드를 사용하여 스프라이트를 무대 전체에 배치합니다.
    스테이지의 중심점은 xy 좌표(0, 0)를 가지며 스프라이트가 스테이지 전체를 적절하게 덮도록 배치합니다. 이를 위해 다음 기능을 사용합니다.

    1. gotoxy(): 스프라이트를 특정 xy 좌표로 이동
    2. goto(): 스프라이트를 특정 스프라이트의 위치로 이동
      sprite.gotoxy(-180, 0)
      home1.gotoxy(-80, 120)
      home2.gotoxy(180, 120)
      home3.gotoxy(-20, -140)
      home4.gotoxy(120, -140)
      gift.goto('Tobi')
  4. 이제 스테이지는 아래와 같이 표시됩니다.
  5. 기능을 사용할 수 있도록 텍스트 인식 클래스를 시작합니다.
    tr = TextRecognition()
    
  6. video() 함수를 사용하여 스테이지에서 비디오를 시작합니다. 우리는 숫자를 인식하고 있기 때문에 문자 미러링을 방지하기 위해 ‘on flipped’ 매개변수도 추가합니다.
    tr.video('on flipped')
  7. 이제 우리는 핀코드를 분석할 것입니다. 이를 위해 텍스트 인식 클래스의 함수 analysecamera()를 사용하고 여기에 ‘handWrittenText’ 매개변수를 추가하여 우리 손으로 종이에 쓴 핀코드를 분석할 수 있습니다.
    우리는 텍스트를 지속적으로 분석할 수 있도록 무한 루프 안에 이것을 작성할 것입니다.

    while True:
      tr.analysecamera("handWrittenText")
  8. San Francisco: 94016의 핀 코드가 보이는지 여부를 확인하기 위해 if를 사용하여 조건문을 작성하려고 합니다. 표시되면 스프라이트 선물은 샌프란시스코(홈 버튼)로 이동해야 합니다. 이를 위해 다음 기능을 사용합니다.
    1. handwrittentextresult(): 카메라에서 감지된 텍스트의 텍스트 인식 결과를 얻기 위해
    2. goto(): 매개변수로 추가된 스프라이트 위치로 Gift 스프라이트 보내기
    3. str(): 핀 코드를 숫자에서 문자열 데이터 유형으로 변환하는 파이썬 내장 함수.
        if tr.handwrittentextresult() == str(94016):
          gift.goto('Home Button')
  9. 스프라이트가 어디에서 선물을 보내는지 말하게 합시다. 이를 위해 Sprite 클래스의 say() 함수를 사용합니다.
      if tr.handwrittentextresult() == str(94016):
        sprite.say("Sending the gift to San Francisco")
        gift.goto('Home Button')
  10. 마찬가지로 elif 조건문을 사용하여 Toronto: 66777 , Sydney: 2001 및 New Delhi: 380001의 핀 코드를 확인합니다. San Francisco의 경우에 사용했던 것과 동일한 3개의 함수( handwrittentextresult(), goto(), str())를 사용합니다. 우리는 또한 스프라이트가 어디에서 선물을 보내는지 말하게 할 것입니다. 코드는 다음과 같습니다.
      elif tr.handwrittentextresult() == str(66777):
        sprite.say("Sending the gift to Toronto")
        gift.goto('Home Button2')  
        
      elif tr.handwrittentextresult() == str(2001):
        sprite.say("Sending the gift to Sydney")
        gift.goto('Home Button3')  
        
      elif tr.handwrittentextresult() == str(380001):
        sprite.say("Sending the gift to New Delhi")
        gift.goto('Home Button4') 
  11. 화면에서 핀 코드가 감지되지 않으면 tobi가 ‘Try Again’라고 말해야 하므로 최종 else 조건 내에도 적절한 코드를 추가합니다.
      else:
        sprite.say('Try Again', 2)
  12. 선물이 적절한 도시로 보내지면 다른 도시로 보낼 수 있도록 선물을 다시 tobi로 가져와야 합니다. 우리는 gift 인스턴스에서 goto() 함수를 사용하여 이를 수행할 것입니다. 또한 선물을 다시 가져오기 전에 sleep() 함수를 사용하여 잠시 기다립니다.
      time.sleep(3)
      gift.goto('Tobi')
  13. 전체 while True(forever) 루프는 다음과 같습니다.
    while True:
      tr.analysecamera("handWrittenText")
      
      if tr.handwrittentextresult() == str(94016):
        sprite.say("Sending the gift to San Francisco")
        gift.goto('Home Button')
        
      elif tr.handwrittentextresult() == str(66777):
        sprite.say("Sending the gift to Toronto")
        gift.goto('Home Button2')  
        
      elif tr.handwrittentextresult() == str(2001):
        sprite.say("Sending the gift to Sydney")
        gift.goto('Home Button3')  
        
      elif tr.handwrittentextresult() == str(380001):
        sprite.say("Sending the gift to New Delhi")
        gift.goto('Home Button4')  
        
      else:
        sprite.say('Try Again', 2)
        
      time.sleep(3)
      gift.goto('Tobi')
  14. 최종 코드는 다음과 같습니다.
    sprite = Sprite('Tobi')
    
    import time
    
    gift = Sprite('Gift')
    home1 = Sprite('Home Button')
    home2 = Sprite('Home Button2')
    home3 = Sprite('Home Button3')
    home4 = Sprite('Home Button4')
    
    sprite.gotoxy(-180, 0)
    home1.gotoxy(-80, 120)
    home2.gotoxy(180, 120)
    home3.gotoxy(-20, -140)
    home4.gotoxy(120, -140)
    gift.goto('Tobi')
    
    tr = TextRecognition()
    tr.video('on flipped')
    
    while True:
      tr.analysecamera("handWrittenText")
      
      if tr.handwrittentextresult() == str(94016):
        sprite.say("Sending the gift to San Francisco")
        gift.goto('Home Button')
        
      elif tr.handwrittentextresult() == str(66777):
        sprite.say("Sending the gift to Toronto")
        gift.goto('Home Button2')  
        
      elif tr.handwrittentextresult() == str(2001):
        sprite.say("Sending the gift to Sydney")
        gift.goto('Home Button3')  
        
      elif tr.handwrittentextresult() == str(380001):
        sprite.say("Sending the gift to New Delhi")
        gift.goto('Home Button4')  
        
      else:
        sprite.say('Try Again', 2)
        
      time.sleep(3)
      gift.goto('Tobi')
    
  15. Run 버튼을 눌러 스크립트를 테스트합니다.

과제

다음 수업으로 넘어가기 전에 작은 과제가 기다리고 있습니다!

이 활동에서 작성한 PictoBlox 프로그램을 웹 사이트에 업로드해야 합니다. 과정을 마친 후 수료증을 받으려면 과제를 제출해야 합니다.

과제를 업로드하려면 아래 단계를 따르세요.

  1. Browse를 클릭합니다.
  2. 저장된 프로젝트 파일(.sb3)을 검색하여 선택하고 Open을 클릭합니다.
  3. Upload를 클릭하여 과제를 제출합니다.
evive Alert
허용되는 파일 유형은 PictoBlox 프로그램에서 생성된 SB3 파일입니다. 허용되는 최대 파일 크기는 5 MB입니다.

행운을 빕니다!