기능성 게임
프로그래밍 교육을 위한 기능성 게임의 설계와 구현※
정찬용
장안대학교 IT학부 게임컨텐츠과 tyonarts{@naver.com, @jangan.ac.kr}
Designing and Implementing Serious Game for Programming Education
ChanYong Jung
Dept. of Game Content, Jangan University
요 약
프로그래밍 학습은 비숙련자에게 쉽지 않은 과정이다. 최근의 피교육자는 학습 전에 게임을 경험하는 경우가 빈번하므로 재미와 함께 자연스럽게 교육 내용에 몰입할 수 있는 기능성게임 이 유용한 도구로 활용될 수 있다. 이 논문에서는 프로그래밍 교육을 지원하기 위하여 설계하 고 구현한 기능성 게임을 제안한다. 제안된 기능성게임은 프로그래밍 언어를 구성하는 요소들 을 게임 규칙과 객체들로 치환하는 방법으로 구성한다. 게임의 구조와 함께 차별화된 설계 요 소들에 대하여 논하고자 한다.
ABSTRACT
Programming is a difficult meat for novices. Educatees nowadays start to play games before they first attend formal education. Serious games offer tools that may have potential to support programming trainers to become more engaged on their learning through a learn while having fun approach. This paper aims to design and implement serious game for programming education. Our serious game substitutes game rules and objects for elements of programming language. We will begin by describing the game mechanics, followed by the general system architecture, finalizing with a small conclusion. We also discuss the implications of our work for the development of the serious game that support the identified features and teach programming concepts.
Keywords : Serious games for education, programming education, teaching programming
Received: Nov. 16, 2016 Revised: Dec. 12, 2016 Accepted: Dec. 16, 2016
Corresponding Author: ChanYong Jung (Jangan University) E-mail: [email protected]
ISSN: 1598-4540 / eISSN: 2287-8211
Ⓒ The Korea Game Society. All rights reserved. This is an open-access article distributed under the terms of the Creative Commons Attribution Non-Commercial License (http://creativecommons.otg/licenses/by-nc/3.0), which permits unrestricted non-commercial use, distribution, and reproduction in any medium, provided the original work is properly cited.
1. 서 론
직무 분야나 지역의 구분 없이 프로그래밍 능력 을 보편적으로 확산시키고 활용하려는 요구가 늘고 있다. 산업 현장에서는 비 프로그래머 직군이 스크 립트 언어나 DSL(Domain Specific Language)을 사용하여 프로그래밍을 자신의 직무 영역에 포함 하는 사례들을 찾을 수 있다[1,2].
교육 분야에서도 학습 가치가 인정된 프로그래 밍을 정규교과에 적극 도입하는 움직임이 활발하 다. 2012년, 에스토니아는 20개 시범 초등학교에 논리학습, 자바, C++ 교과로 구성된 교육 프로젝트
‘Proge Tiiger’를 시행한 후 이듬해부터는 7세 이 상의 모든 학생들을 대상으로 프로그래밍 교육을 의무화 하였다. 이에 고무된 핀란드와 영국도 초등 학교 정규과정에 프로그래밍 과목을 편성하였다.
영국의 초등학생들은 5세부터 간단한 프로그램을 작성하여 데이터를 저장하거나 검색하는 방법을 배 우며 11세 이상은 프로그래밍 언어를 학습한다. 미 국의 글로벌 비영리단체인 ‘Code.org’가 운영하는 프로그래밍 교육 캠페인 ‘아워오브코드(Hour of Code)’에는 빌 게이츠와 마크 저커버그 등 유명 인사들이 초청 강사로 참여하고 있다. 온라인 강의 를 통해 프로그래밍과 친숙해지도록 하는 이 캠페 인의 교육 내용 중에는 ‘앵그리버드’와 같이 인지도 높은 게임을 프로그래밍 해보는 특강도 준비되어 있다. 이러한 추세에 영향을 받아 한국 정부 또한 교육부와 미래부의 주도 하에 ‘소프트웨어 중심사 회 실현전략’에 근거한 소프트웨어 인재 양성 계획 을 수립하여 추진하고 있다.
프로그래밍의 핵심은 어떤 문제를 해결하기 위 한 논리적인 절차를 확립하여 특정 언어로 구현하 는 과정이라 할 수 있다. 반복 실습과 시행착오가 필요하기 때문에 타 영역 전문가를 비롯한 프로그 래밍 비숙련자를 대상으로 하는 효과적인 교육 방 법에 대한 연구가 꾸준히 진행되어 왔다.
이제 기능성 게임은 단순한 보조적 역할을 넘어 이상적인 교육을 실현하기 위한 패러다임 전환의
큰 움직임에 기여하고 있다. 게임의 전통적인 목적 인 재미 외에 다른 특정 목적을 수행하기 위하여 설계된 기능성 게임은 다양한 분야로 응용 범위가 확장되고 있다[3,4,5].
이 논문에서는 프로그래밍의 개념과 언어 체계 의 특성을 자연스럽게 학습할 수 있는 기능성 게 임을 제안한다. 프로그래밍 과정의 중요한 요소들 을 게임 요소와 규칙으로 치환하여 모델링함으로써 게임 플레이를 통한 학습 효과를 기대할 수 있도 록 구성하였다.
2. 본 론
2.1 관련 연구
쉽게 배울 수 있는 프로그래밍을 실현하기 위한 방법론은 주로 시각화에 기반 하는 직관적 구조 및 오류 가능성의 최소화 연구 등에 초점을 맞춰 광범위하게 진행되어 왔다[6,7].
2.1.1 시각화 관련 연구
프로그래머의 도움 없이 특정 분야에 쉽게 적용 하기 위하여 설계된 도메인 특화언어, 비주얼 스크 립트, 프로그램 시각화, 소프트웨어 시각화 등의 관련 연구가 활발하다[8,9,10]. EVizor는 넷빈스 (Netbeans) 통합환경에 적용되는 비주얼화 플러그 인으로 정규교과에 적용되어 효율성이 검증되었다 [11]. VIP 툴에서 도입한 C++ 인터프리터와 Jeliot 3 유저 인터페이스를 결합하여 C 프로그래밍을 지 원하는 시각화 변형 버전이 연구되어 강의에 적용 되었다[12]. 실시간 데이터 변화를 애니메이션으로 시각화하여 프로그래밍의 이해도를 높이고 오류를 줄여주는 왕(Wang)의 프로그래밍 지원 시스템도 강의에 적용되었다[13]. 또한 시각화된 논리블록을 배치하여 프로그래밍을 학습하는 MIT의 스크랫치 를 발전시키고 단점을 보완한 팅커(Tynker), 아워 오브코드(Hour of Code) 등이 활용되고 있다.
2.1.2 기능성 게임 관련 연구
JV2M은 게임 캐릭터를 활용하여 자바 프로그래 밍을 교육하는 웹 기반 시스템이다. 친근한 게임 형식이지만 튜터 요소 중심으로 구성되었기 때문에
‘교육을 받고 있다’는 인식이 커져 몰입이 방해되는 경우가 있다[14].
[Fig. 1] Running mode of JV2M
워싱턴 대학의 라이트봇(LightBot)은 절차적 프로 그래밍 개념과 메모리의 한계 개념을 시각화 한다.
차곡차곡 쌓여진 블록 더미 위를 탐색하는 과제들 이 제시되며 사용자는 로봇의 순차적인 동작명령을 차례로 지정하여 목표 블록으로 이동해야 한다. 로 봇의 움직임에서 명령과 실행의 관계를 인지할 수 있지만 블록 더미 위를 이동하는 단순한 과제 수준 에만 국한되어 있는 것이 한계점으로 지적된다.
[Fig. 2] Running mode of LightBot
2.2 설계
여기서 제안하는 게임 형식은 공장을 배경으로 하는 시뮬레이션 장르로, 다양한 기계들을 배치하 여 구성한 생산라인을 이용하여 과제를 해결한다.
기초 수준의 프로그래밍에 필요한 변수, 명령문, 메서드 등의 요소들이 치환된 게임객체들이 제공된 다. 차례로 주어지는 문제를 해결하기 위하여 사용 자는 게임객체들을 선택하여 배치하고 기능을 조합 함으로써 나름의 생산라인을 구성한다. 완성된 라 인을 가동하면서 의도한대로 결과가 나오지 않거나 동작에 문제점이 발견되면 생산라인을 수정하는 과 정을 반복한다.
하위요소를 조립하여 과제를 해결하기 위한 상 위요소를 완성하는 모티브는 게임 ‘The Incredible Machine’에서 도출한 것이다[15]. 원형게임과의 차 별성은 두 가지로 첫째, 하위요소의 기능이 프로그 래밍 언어 요소의 기능과 정확히 일치하도록 구성 한다는 점이다. 둘째, ‘부품의 조립을 통한 기계’
개념에서 ‘기계의 배치와 조합을 통한 생산라인’ 개 념으로 확장함으로써 자유도가 증가하며 프로그래 밍 특성의 모방에도 더 효과적이다. 게임의 진행과 정을 단계별로 구체화하면 다음과 같다.
(1) 프로그래밍 학습 교재에서 선정한 예제 프로그 램을 게임월드에 적합하게 변형한 과제가 주어진 다. 예를 들어 ‘1부터 입력받은 자연수까지 차례로 출력하는’ 예제는 ‘1부터 주문 기계에 입력한 자연 수까지 차례로 인쇄된 상품을 제조하는’ 과제로 모 델링 된다.
(2) 제안된 게임에서는 C# 언어 체계를 구성하는 기초수준의 요소들을 게임월드인 공장 환경에 적합 하도록 모델링한 기계 게임객체들로 변형한다. 이 기계 객체들의 배치와 연결을 조합하여 과제를 해 결하기 위한 생산라인을 구축한다. 게임 플레이 상 황이지만 플레이어가 경험하는 실질적인 내용은 소 스를 코딩하는 학습 과정과 유사하다.
using System;
namespace ConsoleApplication { class Program
{
static void Main(string[] args) {
string str = Console.ReadLine(); //① int n = Convert.ToInt32(str); //② for (int i = 1; i <= n; i++) //③ Console.WriteLine(i); //④ }
} }
[Fig. 3] Sample code
[Fig. 3]과 같은 구조로 생산라인을 구축하려는 플레이어는 다음과 같이 게임객체들을 배치하여 문 제를 해결하려 할 것이다.
①문자열 변수 역할을 하는 상자와 문자 입력기계 (ReadLine 메서드를 상징하여 치환한 게임객체)를 파이프(지정 명령어 치환)로 연결한다.
②문자열 바구니와 변환기(ToInt32 치환)를 파이 프로 연결한 후 정수 변수 역할을 하는 상자(변수 n)도 파이프로 연계하여 연결한다.
③컨베이어 벨트(for 반복문 치환)에 장착된 세 연 결 부속체(for 반복문의 세 조건을 넣도록 구성한 객체)에 해당하는 객체를 연결한다.
④컨베이어 벨트 위에 인쇄기계(WriteLine 치환) 를 배치한다.
⑤생산라인을 가동하여 인쇄기계로부터 상품들이 제대로 인쇄되는지 확인한다. 만약, 제대로 동작 하지 않는다면 문제 부분을 수정하면서 시행착오를 거쳐 해결해간다.
(3) 자신이 구성한 생산라인을 마치 소스 파일처럼 저장하거나 불러올 수 있으며 주어진 과제 외에도 창의적으로 문제를 만들어 해결할 수 있다.
게임 분석 및 설계에 일반적으로 활용되고 있는 MDA(Mechanic, Dynamic, and Aesthetic) 모델 [16]을 기반으로 트레이시[17]가 제안한 형식요소, 동적요소, 극적요소 항목으로 구분하여 세부 설계
내용을 확정한다.
2.2.1 형식요소 : 플레이어 상호작용 패턴
실시간 상호작용이 가능한 템플릿을 구성할 수 도 있지만 프로그래밍 과정을 모델링하는 기능성의 취지대로 턴 방식의 상호작용으로 구성한다. 생산 라인을 구축한 후 의도대로 생산되는지 관찰하고 수정하는 과정을 반복하면서 플레이가 진행되도록 한다. 물론 이러한 상호작용 패턴은 기존 디펜스 (defense) 장르에서 보편적으로 활용되고 있다.
2.2.2 형식요소 : 목표
구체적인 생산과제가 목표로 주어지며 플레이어 는 과제를 달성하기 위하여 생산라인을 어떻게 구 성할지 궁리하여야 한다. 일반 프로그래밍 하는 과 정에서 문제 해결을 위하여 분석하는 과정과 내용 상 동일하지만 학습을 하고 있다는 부담 없이 해 결 과정에 몰입할 수 있다. 이 연구에서는 자료로 활용한 학습문헌[18]에서 선별한 16개 기초 예제를 게임월드에 어울리도록 변형하여 적용하였다.
2.2.3 형식요소 : 규칙과 절차
객체지향 프로그래밍에서 보편적으로 교육되는 기초 수준의 요소들을 [Table 1]과 같이 게임 객체 로 모델링 한다. 실무 수준의 시각화 프로그래밍 도 구와 비교하면 일부의 요소 밖에 지원하지 못하지 만 기초 단계의 프로그래밍 개념 파악과 구현에는 충분하다.
[Table 1] Applied objects including game mechanics
Issues Applied objects including game mechanics
classes factory objects
methods machine unit objects with basket box(parameters)
constructor machine unit which produce new object
entry point entry location of the factory basic data
types
box object with flag(bool) box object with numeric panel operators object with mathematical operators
object with logical operators variables
basket objects with label
serial basket objects with label(array)
constants colored basket objects with label typecasts convert box with casting label branching
selectable box with two pass(if)
selectable box with multi-pass(switch)
looping
condition box with pipe line -head condition(while) -three condition block(for) -tail condition(do-while) break &
continue
jumping object which pointed to the pipe line(break)
jumping object which pointed to the condition box(continue)
scoping bound object with wall garbage
collection
robot object which collect garbages automatically
inheritance copied section in a factory object namespace industrial complex object which
has factories
2.2.4 동적요소
과제 상황에 설정되지 않은 의외의 요소를 무작 위로 발생하게 하여 플레이어가 실시간으로 대응하 도록 하는 동적요소로 공장의 갑작스러운 정전이나 생산라인을 구성하는 일부 기계의 고장 상황 등이 적용된다. 과제 마감 시간을 지키기 위하여 생산라 인을 멈추지 않고 즉시 대응하여야 하므로 실시간 상호작용 요소가 추가되는 효과를 기대할 수 있다.
이 게임에서는 외부 동적요소 8종과 게임 객체별 로 구성한 내부 동적요소 14종을 적용하고 있다.
2.2.5 극적요소
무인 공장의 생산라인을 직접 구성하여 가동하 는 시나리오는 플레이어의 취향에 따른 선호도 차 이가 발생할 수 있다. 일부 기능은 기계 대신 사원 들이 직접 움직여 직무를 수행하면서 과제를 완수 할 수 있도록 구성하여 극적요소를 보강한다.
또한 메인 뷰 상단에 생산라인 전체의 실행 상 태를 상징화 한 기차 객체가 배치된다. 기차 한 량 은 생산라인 하위모듈을 의미하며 실행에 문제가 발생하면 이를 사고처럼 상징하는 불꽃과 연기를 보여준다.
2.3 구현 및 평가
제안된 기능성 게임 프로토타입은 유니티 5.4.2 버전에서 크로노스 상용 템플릿과 3D모델 공개 애 셋을 사용하여 구현하였다. 플레이어의 플랫폼 선 호도에 따른 평가 결과의 편차를 최소화하기 위하 여 PC와 모바일 버전으로 제공하여 플레이어가 직 접 선택할 수 있도록 하였다.
[Fig.4] Running mode of the implemented prototype
구현된 기능성 게임에 대한 평가는 프로그래밍 학습과정을 이수할 예정인 89명을 대상으로 이루어 졌다. 플레이 단계에는 참여하였으나 프로그래밍 교육 이수 후 평가에 불참한 5명을 제외한 84명을 유효한 평가 대상으로 확정하였으며 통계적 특성은 [Table 2]와 같다.
[Table 2] General features of test subject group
Features N (%)
gender male 61 (72.6) female 23 (27.4) age
20~24 78 (92.9) 25~29 6 ( 7.1) above 30 0 ( 0.0) coding
experience
none 82 (97.6) have 2 ( 2.4) total 84 (100.0)
1주일 이상의 코딩 경험 또는 관련 정규 훈련을 받은 경험이 있는 두 명을 제외하면 전체 평가인원 의 97.6%인 82명이 프로그래밍 관련 사전지식이 없는 상태에서 제안된 기능성 게임을 플레이한 후 예정된 학습 프로그램을 이수하였다. 기능성 게임 에서 얻은 경험이 이수 과정에 도움이 되었는지 교 육 주제 항목별로 응답한 설문으로 효과성을 평가 하였다. 설계된 게임 오브젝트와 관련된 프로그래 밍 학습 키워드들과의 연관성에 대한 평가 설문지 는 [Table 3]과 같이 구성하였다. 주제별 각 항목 에 대하여 리커트 5점 척도로 평가한 점수와 함께 평가 이유도 제출하도록 한 결과는 [Table 4]와 같다.
기본 데이터타입, 변수, 조건 및 분기 명령 등에 대한 평가는 긍정적인 응답이 많았으나 객체화나 클래스와 관련된 항목들은 상대적으로 적었다. 또 한 연관된 항목 간에 긍정적 응답 비율이 다른 경 우도 관찰할 수 있다. 스코프룰을 대체한 방식은 유사 영역의 다른 소재보다 긍정 평가가 많았다.
변수를 상징하는 게임객체가 메서드 몸체를 의미하 는 경계 벽을 넘지 못하도록 구성한 모델링이 언 어 체계의 논리적 의미를 잘 전달하였기 때문이라 고 추정된다.
[Table 3] Results of evaluation
# Content of a question
Q1 Is it easy to understand how to play the game object?
Q2 Can you remember easily to the method to control the game object?
Q3 Is the game object helpful to understand related statements or concepts with programming courses?
Q4 Can you remember easily to the statements or keyword to program the quest?
Q5 Is the game object interesting to play?
프로그래밍 요소 별로 구현된 게임화 모델링의 수준이 낮은 경우 긍정 응답률이 저하되는 경향을 보인다. 또한 제안된 게임과 같은 시뮬레이션 장르 를 선호하지 않거나 게임 자체에 흥미를 느끼지 못하는 평가자는 모든 질문 항목에 대하여 1점 또 는 2점으로 평가하였다.
[Table 4] Results of evaluation Issues Q1 Q2 Q3 Q4 Q5 classes 3.71 3.12 3.03 3.10 2.98 methods 3.78 3.24 3.08 3.21 3.05 constructor 3.76 3.33 3.17 3.29 3.12 entry point 3.77 3.32 3.19 3.37 3.18
basic data
types 4.12 3.67 3.35 3.46 3.23 operators 4.09 3.58 3.32 3.35 3.17 variables 4.15 3.98 3.66 3.18 3.34 constants 4.17 3.99 3.67 3.21 3.35 typecasts 4.08 3.74 3.61 3.10 3.36 branching 4.18 4.01 3.88 3.45 3.48 looping 3.96 3.83 3.52 3.35 3.19 break &
continue 3.98 3.88 3.54 3.37 3.22 scoping 4.03 4.00 3.94 3.88 3.79 garbage
collection 3.95 3.98 3.76 3.41 3.09 inheritance 3.54 3.72 3.64 3.23 3.01 namespace 3.48 3.66 3.63 3.17 3.08
전체 인원의 14.2%를 차지하는 이들을 대상으로 게임 이외의 방법으로 동일한 교육을 실시할 경우 더 효과가 있는 대안을 도출할 수 있는지, 평균적
인 학습 능력과 몰입에 공통적 특이 사항이 있는 군집인지 추가 조사와 분석이 필요할 것으로 보인 다. 이상의 내용을 종합하면 항목별로 편차가 존재 하지만 프로그래밍을 훈련받기 전에 플레이한 이 기능성 게임이 교육 이수에 긍정적일 수 있다.
3. 결론 및 제언
프로그래밍 요소들을 게임 객체와 규칙으로 치 환하여 구성한 기능성 게임이 프로그래밍 학습에 긍정적일 수 있다는 가능성을 확인하였다. 적용되 는 프로그래밍 요소, 실험 인원, 실험과제 수 등을 확대하는 한편, 불만 요인을 세분화한 분석 연구도 필요할 것으로 보인다.
기존 프로그래밍 작업에 필요한 요소들을 게임 규칙과 객체로 치환한 이 설계 방법론은 근본적인 한계를 가질 수 있다. 복잡한 문제일수록 기존 언 어체계가 갖는 직관적이지 못한 구성 형태가 동일 한 양상으로 나타나기 때문이다. 일례로 중첩된 순 환구조 내부에 복합적으로 사용되는 변수들의 연산 은 항상 오류를 일으키기 쉬우며 작은 수식 변환 에도 큰 차이가 발생하므로 이를 유사하게 대체한 게임 환경에서도 동일한 문제점이 재연될 가능성이 높다. 추후 연구에서 이에 대한 해결 방안을 제시 할 필요가 있다.
프로그래밍 교육에 관련한 문제는 교육기관 뿐 아니라 산업체 프로그래머 직군의 훈련과정에서도 항상 대두되는 현실적 고민이기도 하다. 논의된 사 항들을 보강하는 한편, 고급 프로그래밍 기능까지 범위를 확장한 후속 연구를 통하여 기능성 게임의 가능성을 향상시키고자 한다.
REFERENCES
[1] J. W. Ko et al. “Tablet PC based Convergence Educational Serious Game for Children”, Journal of Korea Game Society, 14(1), pp.59-68, 2014.
[2] H. Husmann. “Realtime Interactive Architectural Visualization using Unreal Engine”, Ludwig-Maximilians University, Munich, 2013.
[3] J. M. Kwon. “Effect of Serious Games on Disability Player Performance by Ability Levels”, Journal of Korea Game Society, 15(6), pp.149-156, 2015.
[4] E. S. Kim et al. “Developing Functional Game Contents for the Silver Generation”, Journal of the Korea Academia-Industrial cooperation Society, 9(9), pp.151-162, 2009.
[5] B. H. Kim, “Computer Programming Education using App Inventor for Android”, Journal of the Korea Institute of Information and Communication Engineering, 17(2), pp.467-472, 2013.
[6] J. Sorva et al.,“A Review of Generic Program Visualization Systems for Introductory Programming Education”, ACM Transactions on Computing Education, 13(4), 2013.
[7] Y. B. Kafai, “Education From Computational Thinking to Computational Participation in K–
12 Education”, Communications of the ACM, 59(8), pp.26-27, 2016.
[8] E, F, Anderson. “A Classification of Scripting Systems for Entertainment and Serious Computer Games”, Proceedings of VS-GAMES 2011: 3rd International Conference on Games and Virtual Worlds for Serious Applications, pp.47-54, 2011.
[9] M. Ebner et al. “Towards a Video Game Description Language”, Artificial and Computational Intelligence in Games, 2013.
[10] T. Schaul. “A video game description language for model-based or interactive learning”, Computational Intelligence in Games (CIG), 2013 IEEE Conference, 2013.
[11] J. Moons and C. D. Backer. “The design and pilot evaluation of an interactive learning environment for introductory programming influenced by cognitive load theory and constructivism”, Comp. Educ. 60, 1, pp.368-384, 2013.
[12] S. Kirby et al.. “Program visualization tool for teaching programming in C”, In Proceedings of the International Conference on Education, Training and Informatics (ICETI’10), 2010.
[13] P. Wang et al. “During automatic program animation, explanations after animations have
greater impact than before animations”, In Proceedings of the 12th Koli Calling International Conference on Computing Education Research (KoliCalling’12), pp.100-108, 2012.
[14] P. J. Guo. “Online Python tutor: Embeddable web-based program visualization for CS education”, In Proceedings of the 44th ACM Technical Symposium on Computer Science Education (SIGCSE’13), 2013.
[15] https://www.mobygames.com/game-group/incred ible-machine-series
[16] J. Gibson. “Introduction to Game Design, Prototyping, and Development : From concept to playable game with Unity and C#”, Pearson Education, pp51-92, 2014.
[17] T. Fullerton et al. “Game Design Workshop : A Playcentric Approach to Creating Innovative Games”, Elsevier, pp.77-125, 2008.
[18] J. Albahari and B. Albahari. “C#4.0 in a Nutshell, Fourth Edition”, O’Reilly Media, pp.121-134, 2010.
정 찬 용 (Jung, Chan Yong)
(현)장안대학교 IT학부 게임컨텐츠과 조교수 (전)한국게임학회 프로그래밍 분과위원장 (전)서강대학교 연구교수
(전)삼성 SDS 정보기술연구소
관심분야 : Gamification, 기능성게임, 게임언어