새소식

2022년

동아리 부스 활동 - 마인크래프트 맵

프로그래밍을 이용한 부스 활동을 진행하면 좋겠다고 예전부터 생각해 왔었다. 그러다가, 2학년 말에 윤이나 선생님께서 동아리 부스 행사를 진행하신다는 말을 듣게됐다. 나는 이게 좋은 기회라고 생각해서 동아리원들과 부스 행사에 참여했다.

 

1학년 동아리 활동 때, 프로그래밍을 하지 못하는 친구는 활동에 소외됨을 느꼈기 때문에 모든 친구들이 참여할 수 있도록 준비했다. 개인 윤이는 마인크래프트 곡괭이, 준모는 마인크래프트 맵 제작, 석현이는 buzz wire, 종수는 가위바위보 인공지능, 연우는 가위바위보 아두이노를 맡겼다.

 

우리 동아리에서 가장 자랑할만한 것은 단언컨대, 디지털 액자였다. 따라서, 디지털 액자를 활용하는 방안으로 진행했다. 제작할 디지털 액자를 수정해서 디지털 액자에 마인크래프트, 가위바위보, buzz wire, 1학년이 만든 핀볼 4개의 게임이 뜨게 했다. 이후, 각 게임마다 참여한 사람의 점수와 순위를 뜨게 해서 각 게임의 1등에게 상품을 줬다.

4개의 게임 별 참여자의 순위를 보여주는 것은 UI 구성이 간단하기 때문에, 프로그래밍을 못하는 친구에게 FlutterFlow란 블록코딩 프로그램을 사용해서 디자인할 수 있게 했다. 친구가 FlutterFlow로 액자에 들어갈 소프트웨어를 디자인하고, 나는 이 코드를 받아서 구글의 데이터베이스 서비스인 Firebase와 실시간으로 연동되게 했다. 게임별 관리자가 Firebase에 접속해서 게임별 참여자의 점수를 올리면 액자에 실시간으로 뜨게 된다.

 

디지털 액자에 들어갈 부스용 소프트웨어를 제작한 후에는 마인크래프트 맵을 만들었다. 단순히 마인크래프트에서 미션을 깨는 것은 동아리랑 관련이 없었기 때문에, 공동교육과정 인공지능 기초에서 제작한 포즈로 캐릭터를 조종하는 인공지능과 캐릭터를 조종할 수 있는 곡괭이를 만들어서 활용하기로 했다.

Teachable Machine는 간단하게 데이터를 모아서 인공지능을 만들 수 있는 사이트다. 위처럼, plain, w, a, s, d라는 카테고리를 만들고 카테고리에 맞는 포즈 사진을 찍어 인공지능 모델을 학습시키면, 특정 포즈를 취했을 때 무슨 포즌지 알아맞힐 수 있다.

 

가만히 있는 자세를 plain, 양팔을 벌리는 것을 w, 왼쪽팔만 드는 것을 a, 오른쪽 팔만 드는 것을 d, 만세하는 것을 s로 정하고 2,150개의 사진 데이터를 화학실, 물리실, 과전실, 2학년 4반 교실, 도서실 등 다양한 공간과 여러 대상을 통해 얻었다. 이렇게 만든 인공지능 모델을 node.js를 통해 프로그래밍해서 특정한 포즈를 취하면 웹캠을 통해 이를 인식하고, 이를 통해 마인크래프트 캐릭터를 조종할 수 있게 했다.

포즈를 통해 캐릭터를 조종하는 것은 성능 상, 앞뒤좌우의 불과했기 때문에 캐릭터가 더 많은 기능을 수행하기 위해선 다른 방법이 필요했다. 마인크래프트 하면 생각나는 것은 아무래도 곡괭이였기 때문에, 곡괭이를 만들고 곡괭이로 좌클릭, 우클릭을 할 수 있게 했다.

 

곡괭이는 윤이가 나무 젓가락을 사용해서 만들었고, 건전지와 아두이노, 기울기센서를 사용해서 곡괭이를 뒤로 기울이면 우클릭이, 앞으로 기울이면 좌클릭 되게 프로그래밍했다. 그 후, 포즈로 캐릭터를 조종하는 인공지능과 좌클릭/우클릭이 되는 곡괭이를 사용해 미션을 수행할 맵을 만들었다.

맵의 맨처음에는 앞, 뒤, 좌, 우로 이동하는 기능과, 곡괭이를 뒤/앞으로 기울여 각각 우클릭/좌클릭하는 기능을 익힐 수 있는 튜토리얼을 만들었다. 튜토리얼을 깬 후에는 간단한 구불길을 통과하는 미션이 나온다.

구불길을 통과하면, 돌로 막힌 입구가 나온다. 이곳은 산사태로 토사가 쏟아져서 통로가 막혔다는 콘셉트로 만들었다. TNT 뒤쪽에 서서, 곡괭이를 뒤로 기울이면 화살이 날아가서 TNT를 맞추고, TNT가 폭발하여 돌이 파괴된다. 돌로 막힌 입구를 뚫고 들어가면, 안에도 토사로 덮인 통로가 나온다. 여기선 곡괭이를 앞으로 기울여서 토사를 부시며 통과할 수 있다. 토사의 종류는 흙, 돌, 나무 등이 있기 때문에, 자신의 운에 따라 더 빠른 길을 택할 수도, 느린 길을 택할 수도 있다.

그 후에는 외줄다리가 나온다. 포즈로 캐릭터를 조종해서 하얀색 블록 위로 걸어가야 하며, 떨어져서 검은색 블록을 밝으면 다시 외줄다리를 타야한다. 외줄다리를 다 건너면, 움직이는 카트를 활을 쏴서 맞춰야 하는 미션이 나온다. 원래는 세 개의 카트를 모두 맞춰야 폭죽이 나오며 게임이 끝나도록 만들었었다. 하지만, 직접 플레이해보니 얘들이 너무 어려워해서, 맨 앞에 하나만 맞추면 게임이 끝나도록 만들었다.

이런 식으로 우리 부스 활동의 주된 게임인 마인크래프트와, 석현이가 만든 buzz wire, 핀볼을 만들어서 운영했다. 인공지능과 가위바위보 하는 게임도 원래 만들려 했으나 시간여건이 되지 않아 만들지 못했다. 마인크래프트의 경우 직접 테스트를 여러 번 해보지 못해 문제가 가끔 있었고, buzz wire는 고리를 작게 만들어서 그런지 어려워하는 친구가 좀 있었다. 그런 부분에서 아쉬움은 살짝 있었지만, 그래도 대체로 사람도 많이 오고 잘 진행돼서 뿌듯했던 것 같다.

 

소중한 공감 감사합니다