본문 바로가기

게임 · 프로젝트

Coding Town (Unity 기반의 온라인 코딩 대결 게임)

play.google.com/store/apps/details?id=com.GreenApple.CT

 

코딩 타운 - Google Play 앱

모두가 함께 하는 코딩 게임 코딩을 지루하지 않게 학습해보세요

play.google.com

요약 정보

1) 작품 소개

코딩 타운은 다른 사용자와 교류하며 코딩 실력을 대결할 수 있는 학습 형 온라인 게임이다. 사용자는 자신의 캐릭터로 마을을 돌아다니면서 여러 사용자들과 정보를 공유하고, 함께 코딩 관련 문제를 풀면서 대결한다. 이를 통해 사용자는 자연스럽게 자신의 코딩 실력을 높일 수 있다.


코딩 대결을 통해 얻은 점수는 랭킹 시스템에 반영되어 각 사용자는 자신의 순위를 확인할 수 있다. 또한 대결을 통해 얻는 보상(코인)으로 캐릭터를 꾸미고 아이템을 살 수 있어 사용자는 더욱 흥미로움을 느낄 수 있다.

 

2) 작품 구성도

 3) 개발 배경 및 필요성

코딩의 중요성이 부각되고 있는 현실 속에서 어린이부터 성인까지 코딩 교육을 받는 것이 이제 흔한 일이 되었다. 이와 같이 코딩에 대한 실용도가 높아지고 학습자가 많아짐에 따라 혼자가 아닌 여러 사람들과 함께 즐겁게 코딩을 배울 방법이 있으면 좋겠다고 생각하였다.

코딩 타운은 다른 사용자들과 정보를 교류하고, 코딩 대결을 통해 자연스럽게 코딩 실력을 높일 수 있기 때문에 사용자에게 강제 학습이 아닌 자발적인 즐거운 학습을 제공한다. 또한 현시대의 코딩 교육 정책에 부합하는 게임이기 때문에 교육 과정에 활용 가능하다.

 

 

4) 작품 특 장점

기존 코딩 게임은 대부분 미취학 아동을 위한 것으로 프로그래밍의 기초 개념을 이해시키기 위해 간단한 알고리즘으로 캐릭터나 사물을 이동시키는 방식의 게임이다.

하지만 코딩 타운은 코딩 개념을 활용하는 수준의 문제로 대결을 펼치게 된다. 또한 다른 여러 사용자들과의 소통, 대결 후 얻게 되는 여러 보상을 통해 학습하며 다양한 즐거움을 얻을 수 있다.

 

 

5) 작품 기능

메인 기능으로는 다른 사용자와의 코딩 대결이 가능한 대결장과 개인 코딩 연습을 위한 훈련장이 있다. 대결장에서는 자동 매칭을 통해 랜덤한 사용자와 대결을 할 수 있다. 또한, 마을에서 같이 대결하기를 원하는 사용자에게 대결을 신청하여 직접 원하는 상대와 대결이 가능하다. 훈련장에서는 문제 유형별로 사용자가 선택해서 연습이 가능하므로 취약한 부분을 집중적으로 공략할 수 있다.

부가적인 기능으로는 다른 사용자와의 정보 교류를 할 수 있는 게시판, 자신의 캐릭터를 육성시킬 수 있는 마이룸, 코딩 대결에서 사용할 수 있는 아이템을 판매하는 상점이 있다. 게시판에서는 사용자들끼리 질의응답이 가능하며, 대결이나 미니게임의 결과로 얻은 코인으로 상점에서 원하는 아이템을 구매 후, 마이룸에서 아이템들을 장착할 수 있다.

 

 

6) 기대효과 및 활동분야

코딩 학습 – 지루하지 않은 게임 형식으로 코딩 지식 습득 접근성을 완화하고, 게임의 보상으로 원하는 아이템을 구매할 수 있기 때문에 흥미를 유발한다. 이는 자발적으로 학습에 참여하고 즐겁게 공부하는 동기가 된다.

교육 활용 - 공교육기관에서 학습교구로 활용할 수 있으며 정보화 시대, 4차산업혁명 교육에 부합해 시의성도 매우 높다.

 

개요

1) 작품 소개

● 코딩 타운은 코딩을 학습을 위한 대결형 온라인 게임이다.

 

● 코딩에 대한 실용도가 높아지고 학습자가 많아짐에 따라 코딩 타운은 혼자가 아닌 여러 사람들과 함께 즐겁게 코딩을 배울 기회를 제공한다.

 

● 사용자는 다른 사용자와 코딩 대결을 통해 자연스럽게 코딩 실력을 향상시킬 수 있다.

 

● 사용자는 자신의 캐릭터 조작을 통해 마을을 돌아다니면서 다른 사용자들과 정보를 교류할 수 있다.


● 코딩 대결을 통해 얻은 점수는 랭킹 시스템에 반영되어 각 사용자는 자신의 순위를 확인할 수 있다.

 

● 대결을 통해 얻는 보상(코인)으로 캐릭터를 꾸미고 아이템을 살 수 있다.

 

● 다양한 기능의 아이템들은 대결 중에 어려움을 겪는 사용자에게 도움이 되어줄 것이다.

 

 

 

2) 작품의 개발 배경 및 필요성

● 현시대에서 IT기술은 빠르게 발전하고 있다. 이런 시대에 맞춰 창의력 사고, 일명 컴퓨팅적 사고(Computational Thinking, CT)를 기르기 위한 노력이 일어나고 있다. 컴퓨팅적 사고는 주로 코딩 학습을 통해 향상시킬 수 있으며, 어린이부터 성인까지 코딩 교육을 받는 것이 이제 흔한 일이 되었다.

● 이와 같이 코딩에 대한 실용도가 높아지고 학습자가 많아짐에 따라 혼자가 아닌 여러 사람들과 함께 즐겁게 코딩을 배울 방법이 있으면 좋겠다고 생각하였다. 코딩 타운 프로젝트는 코딩 교육 정책에 부합하는 게임이기 때문에 교육 과정에 활용 가능하다. 또한 다른 사용자들과 정보를 교류하기 때문에 재미있고 유익한 게임으로 거듭날 것이다.

 

 

 

3) 작품의 특징 및 장점

● 기존의 코딩 대결, 코딩 게임에 대한 대표적 작품으로는 미국에서 개발된 ‘코드 시그널’ (https://codesignal.com)이 있다. 코드 시그널에서는 싱글 플레이로 코딩 학습이 가능하고, 다른 유저들과 대전이 가능하다. 하지만 시합을 하며 문제를 풀기 때문에 잠깐의 흥미를 유발할 수는 있지만 그것 만으로는 장기적으로 유저들의 흥미를 유지시키기는 어렵다. 또한 위 제품은 어플리케이션으로는 존재하지 않으며, 한국 사용자들을 위한 매끄러운 번역 서비스를 제공하지 않는다. 국내에서는 코드 시그널과 같은 게임형 코딩 대결 기능을 제공하는 어플리케이션과 사이트를 찾아보기 어렵다.

 

● 코딩 타운은 위의 유사 작품과 비교하여 사용자에게 장기적으로 흥미를 제공할 수 있는 학습형 온라인 모바일 게임이라는 점이 가장 큰 차이점이다. 사용자는 자신의 캐릭터로 마을을 돌아다니면서 여러 사용자들과 정보를 공유하고, 함께 코딩 관련 문제를 풀면서 대결한다. 이를 통해 사용자는 지루하지 않게 자신의 코딩 실력을 높일 수 있다. 또한 코딩 대결을 통해 얻은 점수는 랭킹 시스템에 반영되어 각 사용자는 자신의 순위를 확인할 수 있다. 또한 대결을 통해 얻는 보상(코인)으로 캐릭터를 꾸미고 아이템을 살 수 있어 사용자는 장기적으로 흥미로움을 느낄 수 있다. 또한 코딩 타운은 모바일 어플리케이션이기 때문에 사용자는 시간과 장소에 구애 받지 않고 자유롭게 플레이 할 수 있다.

 

● 구글 플레이스토어 및 타 어플리케이션 스토어에 존재하는 다수의 기존 코딩 학습 게임들은 어린이들에게 프로그래밍의 기본 개념을 소개하고 기초적인 코드 작성법을 익힐 수 있도록 도와주는 저난이도의 게임이다.

 

● 그와 비교해 코딩 타운은 단순한 프로그래밍의 기초 개념뿐만 아니라 학습한 내용을 응용하는 수준의 문제를 함께 제공하기 때문에 기초 수준의 사용자부터 높은 실력의 사용자까지 다양한 실력의 사용자들에게 학습 효과를 제공한다.

 

 

구성도 및 기능

1. 작품 구성도

 


2. 작품 기능

구분 기능 설명
S/W ​그래픽 ​클립 스튜디오와 어도비 포토샵을 이용하여 배경 맵, 게임 오브젝트, UI 디자인 진행
​포톤 클라우드 ​사용자들의 게임 오브젝트 위치 동기화
RPC 활용을 통한 실시간 네트워킹
소스코드 클라이언트 개발 및 서버 연결을 위해 필요한 기능을 C# 언어 기반 스크립트로 구현
Unity 엔진 게임 오브젝트 배치
사용자 인터페이스 구성
게임 내 다양한 맵 생성 및 기능 적용
안드로이드 플랫폼 기반 빌드
데이터베이스 AWS DynamoDB서비스를 활용
사용자 정보, 아이템 정보, 코딩 문제 등을 저장
효율적인 서비스 제공을 위해 체계적인 데이터베이스 설계 및 관리

 


 

3. 추가적인 적용기술

● 포톤 클라우드 서비스를 연결하여 RPC함수를 통해 클라이언트 내 실시간 온라인 네트워킹을 구현하였다. 랜덤 또는 선택적인 플레이어의 배틀 매칭이 가능하고, 모바일, PC, 콘솔 기기, 웹 등 다양한 플랫폼에서 작동 가능하다. 

 

● 클라이언트 내 Google Play Game API 연결을 통해 추가적인 데이터 없이 사용자의 정보를 효율적으로 받아오고 백업 기능을 구현하였다.


● 게임 구성에 필요한 데이터베이스를 효율적으로 접근 할 수 있도록 체계적인 설계를 하였다. 이후 아마존 웹 서비스에서 제공하는 종합 관리형 NoSQL 데이터베이스 서비스인 DynamoDB를 활용하여 사용자 정보, 코딩 문제 정보, 아이템 정보 등을 테이블 형태로 저장하였다. 추가적으로 유니티 내 AWS SDK 설치 및 Cognito 인증 부여, 스크립트 내 연동으로 서버 데이터베이스 연결을 구현하였다.

 

 

4. 개발환경

구분 상세내용
S/W
개발 환경
OS ​Window 10
개발환경(IDE) ​Visual Studio 2017
개발도구 ​Unity 2018.4.8f1
개발언어 ​C#
기타사항 ​Android SDK(플랫폼 빌드)
프로젝트
관리환경
형상관리 ​Gitlab, Google Drive
의사소통관리 ​월 1회 정기 회의, 온라인 회의 및 스케줄 관리

 

 

 

문제점 및 해결방안

1. 프로젝트 관리 측면

● 기술적인 측면에서 생긴 문제들을 해결하는데 많은 시간이 소요되었다. 이에 따라 기획 측면에서 사용자에게 제공하는 기능에 대해 우선 순위를 정하여 높은 순위의 기능부터 순차적으로 개발하여 주요 흐름을 유지하도록 하였다. 우선 순위가 낮은 기능들의 경우 추가적인 업데이트를 통해 추가 및 관리 할 예정이다.

 

● 게임 내부에서 사용자들이 질의 응답을 할 수 있는 게시판 기능을 제공하는 것으로 기획하였으나, 데이터베이스 관리를 최소화하고 사용자의 글 작성 기능 사용에 대해 편리함을 제공하기 위해 게임 외부 코딩 타운 커뮤니티 사이트 연결 기능으로 대체하였다.

● 게임 내 폰트, 음악, 효과음 사용에 대한 저작권을 해결하기 위해 대부분은 자체적으로 디자인을 하였으며, 폰트 및 음악의 경우 저작권 무료 사이트에서 제공하는 리소스를 활용하였다.

 

 

 

2. 작품 개발 측면

● Google Play Game Service를 활용하여 실제 어플리케이션을 빌드 하였을 때, 제대로 로그인이 이루어지지 않는 문제가 발생하였다. 이를 해결하기 위해 PC에 설치된 모바일 에뮬레이터를 활용하여 디버깅을 통해 서비스 오류 원인을 확인하였다. 구글 플레이 콘솔에서 패키지의 인증서 지문과 어플리케이션 ID를 재발급 후, 최신 GPGS 플러그인 설치 및 셋업, 패키지 정보 통일을 함으로써 문제를 해결할 수 있었다.

 

● Unity 클라이언트 내에서 AWS Cognito 연동 실패로 사용자 인증을 받을 수 없는 문제가 발생하였다. 이를 해결하기 위해 AWS SDK 재설치 후, 수정된 SDK 버전에 맞춰 추가적인 연동 코드 작성( + Initializer) 및 수정을 하였다. 또한 추가적으로 Cognito UnauthRole(비인증 역할)의 신뢰 관계를 수정하여 올바른 인증 정보를 허용하도록 하였다.

 

● 코딩 배틀 진행 시, 사용자의 네트워크 연결 상태에 따라 실시간 진행 정도가 상이한 문제가 있었다. 이를 해결하기 위해 각 사용자의 네트워크 연결 상태를 주기적으로 확인하고, 각 사용자의 데이터베이스 연결 진행 상태를 공유하였다. 또한 방을 개설한 사용자에게 관리자 권한을 부여하여 각 사용자들의 현재 단계의 완료 상태를 확인 후 다음 단계를 진행하도록 하였다. 이를 통해 최대한 사용자들 간의 진행 격차를 줄일 수 있었다.

 

 

 

느낀점 및 기타사항

1. 느낀점

● 적극적인 소통이 이루어졌기 때문에 프로젝트가 원활하게 진행될 수 있었던 것 같다. 오프라인 회의에서 진행 상황을 공유하고 다음 작업 계획을 논하였으며, 온라인 회의를 통해 세부 기획서, 작업 내용, 데이터베이스를 체계적으로 관리하였다. 이는 프로젝트가 적절한 흐름으로 진행될 수 있도록 도와주었다.

 

● Git를 적극적으로 활용하여 프로젝트의 형상을 관리하였다. 진행 정도와 업무 분담, 수정 내용 등 전반적인 프로젝트 진행 정보를 체계적으로 관리할 수 있어서 좋았다.

 

● 아무리 사소한 기능이라도 문제는 언제나 발생할 수 있음을 느꼈다. 이를 해결하기 위해 기획 오류를 최소화 하고, 세부적인 디버깅을 통해 작은 에러도 놓치지 않고 바로잡았다.

 

 


2. 작품의 가치(Value) 및 제작 노력

Clean Code 지향 : 효율적인 프로젝트 관리를 위해 최대한 객체 지향적인 프로그래밍을 통해 개발하고자 노력하였다.

 

안정적인 온라인 서비스 : 통신 속도 차이를 염두하여 빠르고 안정적인 통신이 이루어지도록 안정적인 네트워킹을 구현하였다.

 

신뢰성 및 보안 : 구글 플레이 게임 서비스와 게스트 코드 개념을 도입하여 사용자의 개인 정보를 최소한으로 수집하고 관리하고자 노력하였다.

 

다양한 코딩 문제 및 아이템 기획 : 학습 게임에서 사용자가 흔히 느낄 수 있는 지루함을 최소화시키기 위해 다양한 아이템 효과를 기획하고 많은 코딩 문제를 생성하여 관리하였다.

 

프로젝트를 통한 사용자의 코딩 학습 가치 창출 : 다양한 연령대의 사용자에게 코딩 학습 자료로 사용될 수 있다는 점은 코딩 타운의 가장 큰 가치이다.

 

 

기대효과

1. 작품의 기대효과

● 타 제품들의 단순한 코드 작성을 통한 1인 코딩 학습 방법과는 다르게 코딩 타운은 상대방과 실시간으로 코딩 대결을 통해 함께 즐겁게 학습할 수 있기 때문에 많은 코딩 학습자가 사용할 것으로 기대된다.

 

● 캐릭터 꾸미기, 아이템 조합, 미니게임 등 코딩 퀴즈와 연관된 다양한 컨텐츠들이 사용자의 지속적인 흥미를 유발해 장기적인 학습 효과를 기대할 수 있다.

 

● 추후에 이용자가 많아지면 자신의 수준과 비슷한 사용자와 대결이 가능하기 때문에 더욱 쟁쟁한 대결이 이루어질 수 있을 것이다.

 

● 지속적인 업데이트를 통하여 다양한 언어 및 분야의 문제가 제공되면 사용자가 선택할 수 있는 학습 주제의 폭이 넓어져 코딩 타운의 활용도가 높아질 것이다.

 

 


2. 작품의 활용분야

● 공교육기관에서 학습교구로 활용할 수 있으며 정보화 시대, 4차산업혁명 교육에 부합해 시의성도 매우 높다.

 

● 코딩 타운은 초등학생, 중학생을 주요 대상으로 코딩지식 습득 접근성을 완화하고, 게임의 보상으로 학습에 흥미를 유발한다. 이는 자발적으로 학습에 참여하고 즐겁게 공부하는 동기가 된다.

 

● 또한 질의응답 게시판을 운영해 게임 속 코딩 문제의 해설이나 더 복잡한 코딩 문제를 묻고 답할 수 있는 공간을 만들어 코딩을 공부하는 학생들의 커뮤니티 공간이 되어줄 수 있다.

 

 

 

LIST