gamE/etC2010. 3. 23. 13:58





1. 기능성 게임 사전적 의미

 

기능성 게임

의미

게임적 요소인 재미와 특별한 목적을 부가하여 제작한 게임. 기능성 게임은 초기 군사용으로 사용하였으나 현재는 주로 교육과 훈련, 치료 등의 목적성 게임으로 게임 산업의 장르 다변화와 영역 확대는 물론 게임에 대한 부정적 인식 해소와 건전한 게임 문화 조성에도 기여할 수 있기 때문에 게임 업계의 관심이 고조되고 있다. 미국에서는 시리어스 게임(Serious Game)이라고 한다.

 

2. 기능성 게임?

 : 교육과 게임을 접목한 교육용 기능성 게임은 실용적이고 재미있는 엔터테인먼트 컨텐츠라 할 수 있다. 이른바 에듀테인먼트라 불리며 각광받고 있는 교육용 기능성 게임은 일반적인 학습에 재미요소를 덧붙여 학습 효과를 최대로 이끌어 내는 것이다.

 

우리나라의 경우, 교육용 게임은 어린이 및 초, 중등학생을 위한 게임이 대다수이다. 그렇지만 외국의 경우는 교육용 게임을 학습을 목적으로 하는 게임에만 제한을 두는 것이 아니라, 보다 폭넓게 활용하고 있다. 선거 운동을 가상 시뮬레이션으로 경험하면서 정치를 접하고 선거의 과정을 배울 수 있는 게임, 재난 발생시 실제 소방훈련 과정을 시뮬레이션을 통해 배울 수 있는 게임 등 실생활에 도움이 되는 다양한 교육용 컨텐츠가 있다.

 

3. 기능성 게임의 정의, ‘즐기며 ㅇㅇ한다

 : 그간 높은 관심에도 불구하고 기능성 게임엔 일반적으로 받아들여지는 정의가 없었다.

이번 연구를 계기로 기능성게임에 대한 정의 및 범위, 개념 정리 작업도 병행했다. 게임 및 기능성게임에 대한 연구 성과와 관련 기관·기업의 활동 등을 토대로 기능성게임을

건강·의료, 교육·훈련, 사회적 사안에 대해(대상 분야)

관심 제고, 행동 변화 유발, 각종 업무 등 다양한 목적을 효율적으로 수행하거나 이에 대한 동기 부여를 하며(목표)

의도된 효과를 구현하기 위해 게임의 요소를 이용해 디자인된 시스템(의도성)을 말하는 것으로 정의했다.

 

대상 분야와 제작자의 의도, 게임의 목적 등 기능성게임을 구성하는 요소들을 포괄적으로 다루면서도 향후 다른 산업이나 다른 사회 분야와의 유연한 접목과 외연 확장을 염두에 뒀다. 기능성 게임의 분류 작업도 다시 했다. 형태에 따라지식전달형·참여형·체감형등으로, 적용 범위에 따라 교육·건강 등생활형게임과 기업·금융 등비즈니스형게임, 공공정책 및 환경 등의 내용을 다룬공공형게임으로 구분했다



#기타 이런저런곳 짜집기 했습니다.

 

 

 

 

'gamE > etC' 카테고리의 다른 글

공주대학교 게임디자인학과 제6회 졸업전시회  (0) 2010.10.18
게임회사 팀장  (0) 2010.05.28
돌의 강도  (2) 2010.04.22
몰입  (0) 2010.03.23
기능성 게임의 사례  (0) 2010.03.23
Posted by 생선날개





익스퍼트와의 대담
- 익스퍼트들이 어떻게 대단한 성공을 했는지 살펴보는 것은 의미가 있겠지만, 그들이 말한 대로 열심히 밀어 붙여서 똑같이 따라 하면 하루아침에 성공을 얻을 것이라고 기대하지는 말아야 한다는 것이다.

1. 전문가들
- 이 책에서 제안하는 '소프트웨어 공장' 모델은 개발 과정에서 커다란 변화가 생기지 않도록 도와준다.
- 규모를 키우는 것이 규모를 줄이는 것보다 더 섬세한 계획이 필요하다.

- 이번 Chapter는 말 그대로 익스퍼트와의 대담이므로 적지 않도록 하겠다.

2. 기술
- 개발에 필요한 기술이 완전하지 않다면 게임 개발을 시작해서는 안된다.
- 누군가가 시도했다가 제대로 만들어내지 못한 기술도 마찬가지다.

3. 개발
-

. 익스퍼드와의 대담 요약
- 초기 구상한 것에서 벗어나는 것은 어쩔수 없는 것 같다. 겁내지 말자.
- 자신이 만든 게임이 '성공할 것'은 추측은 할 수 있지만, 확신을 할 순 없다.
- 게임 미션 중간, 중간에 동영상을 넣음으로써 스토리에 더욱 집중시킬 수 있다.

- 게임의 일정을 정확하게 계획할 순 없다.
- 팀이 변화를 필요로 하지 않으면 가족적인 방식으로 운영하는 것도 가능하다. 규모가 작은 개발팀은 이런 식으로 관리하는 것이 가장 좋을 수도 있다.
- 메뉴얼을 읽어야만 하는 게임. 정말 불편하다.(나도 그렇다.)
- 스토리나 동영상을 너무 가조하는 게임도 게임 요소 중 재미를 낮추는 요소중의 하나. 둘 다 없어도 게임은 만들 수 있음.
- 속편에 관해서는 나쁘다는 평.하지만 빠르게 속편을 만든다면, 소비자에 대한 착취이고, 최소 5년 후 정도에는 만들어야 한다는 대답.

. 역자 노트
- CONFIG.SYS
 : DOS시절에는 게임을 실행할 때 마다 메모리 설정 등을 다시 해 줄 필요가 있었다. 이러한 설정은 보통 config.sys파일에 저장되어 있었는데, 이를 시스템에 반영하려면 컴퓨터를 리부팅 해야했다(까다로운 설정이 필요한 경우에는 config.sys의 설정을 수십번씩 바꿔가면서 될 때까지 리부팅을 해주곤 했다.






'게임아키텍처디자인 '182p~205p'



Posted by 생선날개





모양새와 분위기
- 게임은 아주 짧은 공상의 장면으로부터 시작한다. 이번 장에서는 플레이어들에게 게임 세계 안에 들어가 있다는 착각, 즉 몰입감을 만들어내기 위한 여러가지 방법을 살펴보겠다. 몰입을 만들어내는 중요한 요소는 다음의 세 가지이다. 분위기, 인터페이스, 그리고 스토리텔링이다.

1. 분위기
- 분위기란 게임의 겉모양을 이루는 모든 요소를 가리킨다. 분위기를 구성하는 요소를 다음의 3가지, 음향, 시각, 그리고 촉감으로 크게 나누어보겠다.

 1) 음향
 - 게임에서의 음향은 한순간에 관심을 끌기보다는 서서히 플레이어들의 무의식을 자극하여 게임속 세계에 흠뻑 빠져들게 해준다. 디아블로의 구슬픈 기타 연주곡, 워크래프트의 박력넘치는 군가 등 분위기의 음악을 떠 올려보자. 플레이어가 게임에 몰입해 있는 동안에 간간히 들려오는 음악은, 그 게임 세계의 전체적 분위기를 더욱 강조해 준다.

 2) 시각
 - 가장 이상적인 컨셉 아티스트는 게임디자이너와 마찬가지로 게임의 최종적인 세부사항을 고민하기보다는 전체 스타일과 분위기를 잡아낼 수 있는 사람이어야 한다.

 3) 촉각
 - 여기서 촉감이라는 말은 물체와 접촉했을때의 물리적인 감각을 가리키지만 우리는 이를 게임에서 모양새에서 전달되어지는 물리적인 인상, 즉 말하자면 조작성을 가리키는 말로 사용했다.(타격감도 이에 포함된다고 보인다)

2. 인터페이스
- 가장 이상적인 인터페이스는 투명한 것이다. 어떻게 했으면 하고 생각을 하면 그것이 곧바로 실행되는 것이다. 하지만 투명한 인터페이스가 이상적이라고는 말했지만, 이것이 '보이지 않는다' 는 뜻은 아니다. 자동차 경주게임에서 아무런 계기판 없이 직관적으로 게임을 조작해야 한다면 매우 곤란할 것이다. 실제의 자동차를 운전하는 것은 그렇지 않기 때문이다. 이 경우에 가장 '투명한 인터페이스' 라는 것은 최대한 실제의 차를 운전하고 있다는 느낌과 근접한 것이어야 할 것이다.
- 게임 전체의 모양새를 보다 강조하도록 함으로써 인터페이스를 투명하게 할 수 있다. 이것이 '눈앞에 있지만 보이지 않는' 방식이다. 스타크래프트가 대표적인 예이다. 이런 복잡한 전략게임에서 유닛 상태 표시창이나 명령 아이콘을 없앤다는 것은 불가능하기 때문에 게임 디자이너들은 어짜피 필요한 것이라면 최대한 전체 게임과 어울리도록 구성하였다.
- 때로는 인터페이스를 감출 수도, 게임 분위기에 녹아들도록 할 수도 없을 때도 있다. 이 경우에는 플레이어가 게임에 몰입하는데 방해가 되지 않도록 인터페이스를 최소화시켜야 한다.

3. 스토리텔링
- 스토리가 중요하지 않다면, 권투시합 직전에 복서들이 서로에게 으르렁대며 화가 나있는 척 할 필요 없다. 정치인의 지나간 인생역경이 아니라 그가 내놓은 공약을 보고 투표를 하면 될 것이다. 스타워즈는 현란한 추격전과 칼싸움밖에 없는 영화가 되었을 것이다.

 1) 스토리텔링 테크닉

 2) 동기부여

 3) 전조

 4) 개인적인 목표
 ex) 세계를 구한다(X) 전세계가 위험에 빠졌다. 오직 당신만이 세계를 구할 수 있다(O)
 - 개인적인 문제로 만들어야 독자이건 관객이건 플레이어건 그 문제에 관심을 가질 것이다.

 5) 공명
 - 공명은 시너지와 비슷하다.(정술님.. 엉?)

 6) 반항
 - 스토리작가들은 사람들의 삐뚤어진 심성에 대해 잘 알고 있다. 스토리를 듣는 사람들은 무의식속에서 '말도 안돼!' 라고 중얼거리는 삐딱한 마음이 도사리고 있다.
ex)
브루스 윌리스는 지저분한 술집에 앉아서 스카치 한잔을 마시며 골골거리고 있다. 검은 양복에 검은 안경을 쓴 두 명  의 남자가 걸어들어온다. "테러리스트가 대통령을 암살하려고 합니다. 당신이 필요합니다." 그는 얘기한다 " 난 은퇴헀어." 그리고는 위스키를 마시며 춤추는 여자들을 구경한다.
- 관객들은 어느새 "이봐 가만히 앉아 있으면 안되지! 영화가 진행이 안되잖아!" 라고 생각한다. 주인공은 스토리의 흐름에 반항하지만, 오히려 관객들은 스토리에 동조하도록 스토리작가가 유도한 것이다.

 7) 플롯 포인트
 -  아리스토텔레스는 플롯 포인트를 세 가지로 정의했다. 반전, 발견, 재앙이 그것이다.
 - 스토리 내에서의 플롯 포인트는 아이를 살리려고 애쓰는 것이 그녀의 죽음을 대가로 요구한다거나(반전)
 - 살해당한 이의 핸드폰에서 스위스 은행의 계좌번호가 발견된다거나(발견)
 - 폭탄이 터져서 주연급 캐릭터가 죽는 등의 사건(재앙)
 - 고전적인 3막 구성은 헐리우드 어드벤처 영화에서 특히 자주 쓰이는데, 이 세 개는 '전개', '충돌', '해결' 이다

 8) 서스펜스
 - 어떤 어드벤처 게임에서 절대로 이길 수 없는 적이 등장했다. 주인공은 절대로 그 적을 쓰러뜨릴 수 없다. 그는 일단은 도망치면서, 조금 전에 지나쳐왔던 함정이 설치된 곳까지 적을 유인해서 그것에 걸려들도록 해야 한다. 어떻게 하면 게임 디자이너가 플레이어에게 그 적이 절대로 죽일 수 없는 놈이라는 사실을 제대로 알려줄 수 있을까? 이 효과적인 방법이 서스펜스이다.
복도 가득히 오래된 해골들을 가득 채우고, 석화되어버린 영웅들을 세워둔다. 그렇다면 플레이어는 죽지 않는 보스가 언제 튀어나올지 조심스러워 할 것이다. 순간적으로 긴장을 풀어주면 그 다음의 서스펜스는 더욱 강회될 것이다.

 9) 대사
 - 백문이 불여일견이다. 게임은 주로 시각적인 효과에 의존하는 매체이기 때문에 이미지로 더 잘 설명할 수 있는 일에 굳이 대사를 남발할 필요가 없다.

 10) 주제
 - 스토리에 내제되어 있는 질문

 11) 결론
 - 스토리를 결말 지을 때는 다음의 규칙을 따라야 한다.
 1. 약간은 힘겨운 결말을 선택하라
 - 너무 쉽게 얻어진 보상은 큰 만족감을 주지 못한다(이것이 문제가 되는 컴퓨터 게임은 그리 많지 않다)
 2. 당연한 결말은 피하라
 - 플레이어가 게임 내내 예상하고 있던 결말을 그대로 보여줘서는 안되며, 전혀 다른 결말을 준비하라.
   하지만 그 전혀 다른 결말 역시 되돌아보면 당연한 것처럼 느껴져야 한다.
 3. 만족감을 주는 결말을 선택하라
 - 대부분의 경우 만족감이라 하면 도덕적인 만족감(주인공이 승리한다)을 말한다.
   뛰어난 작가들은(비극과 같이)미학적인 만족감을 주는 결말을 선호한다.
 4. 일관성을 유지하라
 - 결말은 스토리 전체의 분위기, 주제, 그리고 줄거리와 맞아야 한다.
 5. 문제를 해결한다
 - 결말에서는 스토리 중에 제시된 문제가 종결되어야 한다.("왕이 돌아가셨다. 새 왕 만세.")

 12) 변화
 - 스토리가 흥미를 유발하기 위해서는 어떤 사건에 의해 기존의 질서가 망가져야 한다.
   따라서 좋은 스토리는 그 시간적 배경으로 많은 변화가 일어나는 시기, 혼란과 변혁의 시기를 설정한다.





'게임아키텍처디자인' 154p~182p



Posted by 생선날개
gamE/C2010. 1. 22. 17:53






3-1. 덧셈 프로그램 구현을 위해 필요한 + 연산자

#include <stdio.h>

int main(void)
{
 3+4;
 return 0;

}

- 잘못된 코드


- 위의 + 기호처럼 연산을 요구할 때 사용되는 기호를 가리켜 연산자라 한다.


3-2. C언어는 데이터 저장을 위해 변수를 제공한다.
 1. 변수를 이용한 데이터의 저장
 - 변수란?
 > 데이터를 저장할 수 있는 메모리 공간에 붙여진 이름을 의미한다.



#include <stdio.h>

int main(void)
{
 int result; //변수 선언
 result=3+4; //덧셈 결과 저장

 printf("덧셈 결과 : %d \n", result);
 printf("%d 더하기 %d는 %d 입니다. \n", 3, 4, result);
 printf("변수 result에 저장된 값 : %d \n", result);

 return 0;

}

결과

덧셈 결과 : 7
3 더하기 4는 7 입니다
변수 result에 저장된 값 : 7



3-3. C언어에는 다양한 연산자가 존재한다.
 1. C언어가 제공하는 다양한 종류의 연산자들
 -대입 연산자(=)와 산술 연산자(+,-,*,/,%)

 연산자  연산자의 의미
 =  오른쪽에 있는 값을 왼쪽에 대입한다.
ex) a = 20
 +  왼쪽과 오른쪽에 있는 값을 더한다.
ex) a = 4+3
 -  왼쪽에 있는 값에서 오른쪽에 있는 값을 뺀다.
ex) a =4-3
 *  왼쪽과 오른쪽에 있는 값을 곱한다
ex) a= 4*3
 /  왼쪽에 있는 값을 오른쪽에 있는 값으로 나눈다
ex) a = 4/3
 %  왼쪽에 있는 값을 오른쪽에 있는 값으로 나눠서 나머지를 반환한다.
ex) a= 4%3



#include <stdio.h>

int main(void)
{
 int val1=4;
 int val2=2;

 printf("두 수의 덧셈: %d \n", val1+val2);
 printf("두 수의 뺄셈: %d \n", val1-val2);
 printf("두 수의 곱셈: %d \n", val1*val2);
 printf("두 수의 나눗셈: %d \n", val1/val2);
 printf("두 수의 나머지: %d \n", val1%val2);

 return 0;

}


결과

두 수의 덧셈: 6
두 수의 뺼셈: 2
두 수의 곱셈: 8
두 수의 나눗셈: 2
두 수의 나머지: 0




 2. 기타 대입 연산자(+=, -=, *=, /=, %=)
 - a = a + b;                 =               a +=b;
 - 위는 같은 의미


#include <stdio.h>

int main(void)
{
 int val1=2;
 int val2=4;
 int val3=6;

 val1+=3; //val1=val1+3;
 val2*=4; //val2=val2*4;
 val3%=5; //val3=val3%5;

 printf("result : %d %d %d \n", val1, val2, val3);
 
 return 0;

}

결과

result : 5 16 1


 3. 부호 연산으로서의 +와 -연산자

#include <stdio.h>

int main(void)
{
 int val1=2;
 int val2=-4;
 
 val1=-val1; //val1-=val1과 혼동 하지 말 것.
 printf("val1=-val1 연산 이후 val1은 %d \n", val1);
 
 val2=-val2;
 printf("val2=-val2 연산 이후 val2은 %d \n", val2);

 return 0;

}

결과

val1=-val1 연산 이후 val1은 -2
val2=-val2 연산 이후 val2은 4



 4. 증가, 감소 연산자
 

 연산자  연산자의 의미
 ++a  값을 1 증가 후 연산을 진행
ex) printf("%d", ++a)
 a++  연산을 진행한 후 값을 1 증가
ex) printf("%d", a++)
 -b  값을 1 감소 후 연산을 진행
ex) printf("%d, --b)
 b-  연산을 진행한 후 값을 1 감소
ex) printf("%d", b--)




#include <stdio.h>

int main(void)
{
 int val1=10;
 int val2=10;

 printf("선 연산 후 증가 : %d \n", val1++);
 printf("다시 한번 출력 : %d \n", val1);

 printf("선 증가 후 연산 : %d \n", ++val2);
 printf("다시 한번 출력 : %d \n", val2);

 


 return 0;

}


결과

선 연산 후 증가 : 10
다시 한번 출력 : 11
선 증가 후 연산 : 11
다시 한번 출력 : 11






#include <stdio.h>

int main(void)
{
 int val1=10;
 int val2=(val1--)+2;

 printf("val1 : %d \n", val1);
 printf("val2 : %d \n", val2); 

 return 0;

}


결과

val1 : 9
val2 : 12




5. 관계 연산자(비교 연산자)

 연산자  예  의미
 <  a<b  a가 b보다 작은가?
 >  a>b  a가 b보다 큰가?
 ==  a==b  a와 b가 같은가?
 !=  a!=b  a와 b가 같지 않은가?
 <=  a<=b  a가 b보다 작거나 같은가?
 >=  a>=b  a가 b보다 크거나 같은가?



#include <stdio.h>

int main(void)
{
 int val1=10;
 int val2=12;
 int result1, result2, result3;

 result1=(val1==val2);
 result2=(val1<=val2);
 result3=(val1>val2);

 printf("result1 : %d \n", result1);
 printf("result2 : %d \n", result2);
 printf("result3 : %d \n", result3);

 return 0;

}



결과

result1 : 0
result2 : 1
result3 : 0



6. 논리 연산자
- 논리 연산자란 and, or, not을 표현하는 연산자이다.

 연산자  연산자의 의미
 &&  피연산자가 모두 참이면 true를 반환(and의 의미)
 ex) a && b
 ||  피연산자 중 하나라도 참이면 true를 반환(or의 의미)
 ex) a||b
 !  피연산자가 true면 false를, false면 true를 반환
 (not의 의미)
 ex) !a



#include <stdio.h>

int main(void)
{
 int val1=10;
 int val2=12;
 int result1, result2, result3;

 result1=(val1==10 && val2==12);
 result2=(val1<12||val2>12);
 result3=(!val1);

 printf("result1 : %d \n", result1);
 printf("result2 : %d \n", result2);
 printf("result3 : %d \n", result3);

 return 0;

}


결과

result 1 : 1
result 2 : 1
result 3 : 0



7. 비트 단위 연산자

~, &, ^, |, <<, >>

8. 콤마(,)연산자

#include <stdio.h>

int main(void)
{
 int a=1, b=2;
 printf("Hello "), printf("World! \n");

 a++, b++;
 printf("%d ", a), printf("%d ", b), printf("\n");

 return 0;

}


결과

Hello World!
2 3

 연산순위  연산자
 1  (), [], ->, .
 2  sizoof, &, ++, ==, ~, !,
 *(간접 지정 연산자), +(단항 연산자), -(단항 연산자)
 3  *(곱셈 연산자), /, %
 4  +(이항 연산자), -(이항 연산자)
 5  <<,>>
 6  <,<=,>=,>
 7  ==,!=
 8  &
 9  ^
 10  |
 11  &&
 12  ||
 13  ?;(삼항 연산자)
 14  =, +=, *=, /=, &=, &=, ^=, |=, <<=, >>=
 15  ,(콤마 연산자)


3-4 키보드로부터 데이터를 입력 받고 싶다!

1] scanf를 이용해서 키보드로부터 정수를 입력받기 원한다면?

#include <stdio.h>

int main(void)
{
 int result;
 int val1, val2;

 printf("첫 번째 숫자: ");
 scanf("%d", &val1); //첫 번째 데이터 입력

 printf("두 번째 숫자: ");
 scanf("%d", &val2); //두 번째 데이터 입력

 result=val1+val2; //덧셈 연산.
 printf("%d + %d = %d \n", val1, val2, result);

 return 0;

}


결과

첫 번째 숫자 : A
두 번째 숫자 : B
A + B = C



2] scanf를 이용하면 입력 형태를 다양하게 지정하는 것이 가능하다.

#include <stdio.h>

int main(void)
{
 int result;
 int val1, val2;

 printf("숫자 둘을 입력 하세요 : ");
 scanf("%d %d", &val1, &val2);

 result=val1+val2;
 printf("%d + %d = %d \n", val1, val2, result);

 return 0;

}


결과

숫자 둘을 입력하세요 : A B
A + B = C



'C 프로그래밍' ~80P



'gamE > C' 카테고리의 다른 글

C - Chapter 2. 프로그램의 기본 구성  (0) 2010.01.20
C - Chapter1. 이것이 C언어다.  (1) 2010.01.19
Posted by 생선날개





게임밸런스
- 게임 밸런스에는 다음과 같이 크게 세 가지의 유형으로 나누어서 생각해 볼 수 있다.
1. 플레이어/플레이어 밸런스는 게임을 공평하게 만들어서, 승패를 겨루는 플레이어에게 실력을 제외한 모든 조건이 동등하게 주어지도록 구성하는 것이다. 게임에 운이 작용할 수도 있지만, 이것은 모든 플레이어에게 동일하게 적용되어야 한다.
2. 플레이어/게임플레이 밸런스는 플레이어의 학습곡선에 따라 그에 상응하는 보상을 주어서 계속 게임을 플레이하도록 유도하는 것을 말한다. 플레이어가 게임을 적으로 인식할 정도로 게임 진행의 난이도가 너무 높거나 임의적이어서는 안된다.
3. 게임플레이/게임플레이 밸런스는 게임 안의 요소들간의 밸런스를 맞추는 것이다. 예를 들어 '타부의 검' 이 다른 무기에 비해 2배의 공격력을 갖는다면, 그 가격을 다른 무기의 2배로 설정하는 식으로 다른 요소들이 보정되어서 밸런스가 맞춰져야 한다.

*역자노트 5.1 학습곡선
-학습량, 학습시간, 반응시간, 정밀도, 오류 등을 측도로 하여 행동의 변화를 표시한 그래프. 게임에서는 플레이어의 게임에 대한 숙련도가 향상되는 과정을 뜻한다. 즉 게임 초반에는 플레이어의 숙련도가 늦지만 게임이 진행될수록 점점 숙련도가 높아지는 것을 말한다.

1) 플레이어/플레이어 밸런스
- 하나의 캐릭터가 다른 캐릭터보다 조금 더 쎄다고 해서 너무나도 큰 문제가 되진 않는다. WOW를 예로 든다면, 도적이 PVE에서 엄청난 데미지를 보인다고 해서 흑마들이 좌절하거나 하기싫거나 이런 면보단, 흑마로써 도적을 이기고 싶다 라는 도전이나 새로운 목표와 같은 점이 생길 것이다.

 1. 대칭
 - 게임에서는 플레이어가 제어하지 못하는 요인 때문에 승패가 결정되어서는 안된다.

 2. 레벨 디자인에서의 대칭성
 - 각 플레이어가 똑같은 입장이 되도록 만들면, 대칭성을 유지하기가 쉽다. 하지만 너무 뻔하기 때문에 플레이어들이 쉽게 질릴 수 있다. 조금 더 바람직한 방법으로는 레벨이 기능적으로는 대칭을 이루지만, 그것이 대칭이라는 사실이 한눈에 드러나지 않도록 구성하는 것이 가장 바람직하다.

 3. 게임 디자인에서의 대칭성
 - 게임 디자인에서의 대칭성이란 모든 플레이어에게 주어지는 선택사항이 기능적으로 동일하다는 것을 뜻한다. 이것은 공정한 게임을 만들기 위한 가장 쉬운 방법이다. 더 어려운 방법으로는, 플레이어들에게 서로 다른 선택사항을 제공하되 그 선택사항들 간의 밸런스를 잡아서 각 플레이어가 우승할 확률을 비슷하게 만드는 것이다.

ex)
워크레프트 2 : 기본적으로 대칭구조를 이루고 있지만, 오크쪽의 오우거메이지는 광전사의 분노와 폭발 부적을 사용하지만, 인간쪽에서는 동료들을 치료하거나 언데드 유니트를 파괴할 수 있는 능력을 가진 팔라딘이 있다.

2) 플레이어/게임플레이 밸런스
- 플레이어/게임플레이 밸런스는 게임의 상호작용 요소에 관련된 일이다. 게임이라면 당연히 모든 플레이어에게 공정하고, 그 안의 모든 요소와 기능들이 의미를 갖어야겠지만, 동시에 플레이어와 게임 간의 관계에 대해 생각해보아야 한다. 게임이 보상을 얻기 위해 너무 많은 고생을 요구한다면, 플레이어의 관심은 그리 오래가지 못 할 것이다.

- 플레이어/게임플레이 밸런스 조정은 다음 세 가지의 간단한 규칙을 따른다.
>플레이어에게 보상을 주어라
>잡일은 컴퓨터에게 시켜라
>플레이어가 즐길 게임을 만들어야지, 적이 되어서는 안된다

 1. 플레이어에게 보상을 주어라
 - 일단은 게임 하는 법을 익히며 시작할 것이다. 하지만 완벽하게 게임 조작을 익힐 때까지 플레이어는 자주 실수를 저지를 것이며, 그 때마다 힘이 빠질 것이다. 따라서 플레이어가 무언가 새로운 것을 배울 때마다 약간의 보상을 제공해서 실수 때문에 생긴 실망감을 상쇄시켜야만 한다.
 - 단순히 수치가 높아지는 보상보다는, 게임 안에서의 선택의 폭이 넓어지는 보상이 바람직하다. "가위차기 기술을 배우려고 무진장 노력했지. 이제 드디어 익혔어. 멋진 기술이지." 라고 말하면 단순히 사용가능한 기술의 갯수가 늘어난 것이지만, "가위차기를 배우고 나니까, 그것과 연계시켜서 리버스 펀치를 활용할 방법이 생각났어." 라고 말한다면 새로운 기술을 배웠을 뿐 아니라 기존의 기술들까지도 새롭게 활용할 수 있게 된 것이다.

 2. 잡일은 컴퓨터에게 시켜라
 - 예를 들어 예전 CRPG게임 패키지 안에 모눈종이와 연필이 들어 있어, 던전을 탐험할 때마다 지도를 그려야 했다. 판단력을 요구하는 의사결정 이외의 다른 작업은 컴퓨터의 AI가 알아서 처리하도록 만들어야 한다. 플레이어를 귀찮게 하면 안된다.

 3. 플레이어가 즐길 게임을 만들어야지, 적이 되어서는 안된다
 - 세이브라는 것은 현실에서 일이 생겨서 저장을 하는 도구가 되어야 하지, 게임을 공략하기 위한 도구가 되어서는 안된다. 만약 세이브가 없이 공략하기 어려운 게임이라면, 그 게임은 밸런스가 제대로 잡혀 있지 않은 게임이다.

3) 게임플레이/게임플레이 밸런스
- 게임플레이에서의 밸런스를 위해서 해결해야 될 문제로는 다음의 세 가지를 생각해 볼 수 있다.
>절대우위의 단일한 의사결정보다는 다양한 의사결정이 가능하도록 해야 한다
>상대방의 의사결정에 따라 자신이 내릴 수 있는 최적의 의사결정을 제공하기란 생각만큼 쉽지 않다
>각각의 선택가능한 결정들 중에서 각각이 채택되는 빈도수를 파악하기 힘들다.그럼에도 불구하고 게임의 밸런스를 잡기 위해서는 그것을 알아내야만 한다

 1. 구성요소와 속성 밸런스
 - 게임을 이루는 요소들 간의 밸런스 조정은 두 가지 수준에서 이루어져야 한다.
 >구성요소 밸런스, 속성 밸런스

 2. 비순차적인 게임 규칙은 밸런스를 보장한다
 - 가위, 바위, 보가 최고의 예
  가위  바위  보 
 바위  -1 0
 보  1 -1 
 가위  0 -1 

- 가위, 바위, 보와 비슷한 예로, 하단차기, 상단차기, 내려찍기가 있다.
- 위의 타격기를 더욱 재미있게 추가할 수 있는 것은 콤보기를 넣고, 보상값을 더 크게 구성하면 된다.

 3. 지나치게 복잡한 조합
 - 너무 많은 가위바위보의 관계를 유지 한다면, 경험에 입각한 전략을 세우기가 불가능한 게임이 되고 만다.

 4. 게임 디자인의 규모. 그리고 또 다른 비순차적 관계
 - 가위바위보의 규칙에 확장을 한다면, 홀수가 되어야 한다. (3, 5, 7, 9..)
 - 한가지 예를 들어 보자. 아래의 5방향 가위바위보 보상값을 보았을 때, 5가지의 캐릭터중에 한가지의 캐릭터만 제외 한다고 하면, 바로 밸런스의 차이가 생긴다. 1가지의 캐릭터는 매우 강하게 특화될 것이고, 1가지의 캐릭터는 매우 쓸모가 없어질 것이다.

ex)가위바위보의 예

- 3방향 가위바위보 보상값 표
  가위  바위  보 
 바위  -1 0
 보  1 -1 
 가위  0 -1 

- 4방향 가위바위보 보상값 표(홀수 방향 보상값과는 달리 비대칭이라 어떻게 보면 더 매력적이다)
   궁수(a) 전사(w) 야만인(b)  마법사(s) 
 궁수(a)  0   +1  -1  0
 전사(w)  -1  0  +1  +1
 야만인(b)  +1  -1  0  -1
 마법사(s)  0  -1  +1  0
 위의 표를 정리해보자면,
 1. a + w + b + s = 1
 2. A = w - b
 3. W = b + s
 4. B = a - w - s
 5. S = b = w
 6. A + W + B + S = 0

 - 5방향 가위바위보 보상값 표
   무사 승려  보병   궁수 자객 
 무사 +1  +1  -1  -1 
 승려 -1  +1  +1  -1 
 보병 -1 -1  +1  +1 
 궁수 +1  -1  -1  +1 
 자객 +1 +1  -1  -1 


- 5방향이지만 유저의 눈에 보이지 않는 가위바위보 보상값 표
 (탱크는 탱크킬러를 제외한 모든 유니트에게 이기고, 탱크킬러는 탱크를 제외한 모든 유니트에게 패배한다.
  또한 보병, 장갑차, 포병은 일반적인 가위바위보 관계를 이룬다.)
   탱크  보병  포병  장갑차  탱크 킬러
 탱크  0  +1  +1  +1  -1
 보병  -1  0  +1  -1  +1
 포병  -1  +1  0  +1  +1
 장갑차  -1  +1  -1  0  +1
 탱크킬러  +1  -1  -1  -1  0

 겉으로 보기에는 많은 사용자들이 탱크와 탱크 킬러의 게임이 유지될거라 보이겠지만,
 줄여 본다면,
 
   탱크  그 외  탱크 킬러
 탱크  0  +1  -1
 그 외(가위바위보유지)  -1  0(평균값)  +1
 탱크 킬러  +1  -1  0

이렇게 된다면, 각 유니트의 사용 빈도는
 유니트 종류  탱크  보병  포병  장값차  탱크 킬러
 사용 빈도  1/3  1/9  1/9  1/9  1/3

 이 예는 각 유니트들의 가격이 동일하다는 전제하에 이런 빈도가 나오지만,
 만약 탱크의 값을 다른 유닛에 비해 2배로 올린다면? 탱크와 보병의 수치와 결과에 따라 보상값을 조정한다면, 이 공식은 알맞는 밸런스를 맞출 수 있고, 게임을 만들기도 쉬울 것이다.

4) 게임밸런스 체크리스트
- 플레이어/플레이어 밸런스에서의 황금률 : 실수를 범하지 않은 플레이어가 이길 수 없는 상황에 놓이는 경우가 없어야 한다.
- 플레이어/게임플레이 밸런스의 황금률 : 게임을 플레이하는 것만큼이나 게임을 배우는 과정 또한 재미있어야 한다. 그리고 게임에 숙달될수록 점점 더 재미있어져야 한다.
- 게임플레이/게임플레이 밸런스의 황금률 : 게임 내의 모든 옵션은 이따금이라도 쓸모가 있어야 하며, 각 옵션을 사용할 때의 순 비용은 그것을 사용했을때 얻는 보상값에 비례해야 한다.




'게임아키텍처디자인' 120p~154p




Posted by 생선날개
gamE/C2010. 1. 20. 15:10




함수란?
ex)

3X + 4 = Y

인자 전달 - 입력 X를 전달하는 행위
함수 호출 - 입력 X를 전달하면서 정의된 함수의 실행을 요구하는 행위

main
- 주 프로그램임을 의미. 함수의 이름

괄호{}
- 함수 main()의 실행 범위. main 몸체 시작과 종료.

printf()
- 문자열을 화면에 출력하기 위한 함수

return 0
- 함수를 빠져나온다는 의미
- 함수를 호출 한 영역으로 값을 반환한다는 의미

%d
- 서식 문자. 10진수 정수형으로 출력



특수 문자

기능

 \a

벨소리

 \b

왼쪽으로 1칸이동

 \f

한 페이지 전진

 \n

줄바꿈

 \r

Enter

 \t

Tab

 \v

수직 Tab

 \\

\를 출력

 \'

작은 따옴표 출력

 \"

큰 따옴표 출력

 \0

아무 동작하지 않음

 %%

% 기호 출력

 ;

문장 구별하기

 /* */

주석문(자신만의 문장.출력되지 않음)

 //

한줄 주석 


연습문제 1.

#include <stdio.h>
int main(void)
{
 printf("홍\n홍길\n홍길동\n");
  return 0;
}


결과


홍길
홍길동




연습문제 2.

#include <stdio.h>
int main(void)
{
 printf("이름\n아무개\n");
 printf("주소\n어딘가에\n");
 printf("전화번호\n123456789\n");
  return 0;
}


결과

이름
아무개
주소
어딘가에
전화번호
123456789




연습문제 3.


#include <stdio.h>

int main(void)
{
 printf("Hello Everybody \n");
 printf("%d\n", 1234);
 printf("%d %d \n", 10, 20);
 return 0;

}

결과

Hello Everybody
1234
10 20


연습문제 4.

#include <stdio.h>

int main(void)
{
 printf("my age : %d \n", 20);
 printf("%d is my point \n", 100);
 printf("good \nmorning \neverybody\n");

 return 0;

}

결과

my age : 20
100 is my point
good
morning
everybody





연습문제 5.

#include <stdio.h>

int main(void)
{
 printf("저의 이름은 홍길동입니다. \n");
 printf("저의 나이는 %d살이고요. \n", 20);
 printf("제가 사는 번지수는 %d-%d번지입니다.\n", 111, 222);

 return 0;

}

결과

저의 이름은 홍길동입니다.
저의 나이는 20살이고요
제가 사는 번지수는 111-222번지입니다.





연습문제 6.

#include <stdio.h>

int main(void)
{
 printf("%d * %d = %d\n", 2, 3, 6);
 printf("%d * %d = %d\n", 2, 4, 2*4);

 return 0;

}


결과

2 * 3 = 6
2 * 4 = 8




'C 프로그래밍' ~51P



'gamE > C' 카테고리의 다른 글

C - Chapter 3. 변수와 연산자  (0) 2010.01.22
C - Chapter1. 이것이 C언어다.  (1) 2010.01.19
Posted by 생선날개





일정계획서
- 사례연구 4.1에서는 실시간 전략 게임인 코푸스 Corpus 의 일정계획을 보여준다. 코푸스 (다른 이름으로 출시되었다)는 1990년대 후반에 개발된 게임이다. 요즘의 게임은 좀 더 긴 개발기간이 걸리곤 한다

1. 아이디어 내기
- 기간 : 1개월
- 진행 : 초기 아이디어를 내고 실험가능성에 대한 의견을 나누기. 그 결과를 개요서로 이끌어내기
- 인원 : 리드 디자이너. 떄때로 아키텍트와 기술진의 도움을 받는다
- 결과물 : 유통사가 프로젝트를 진행할지 결정을 내림

2. 컨셉짜기
- 기간 : 3개월
- 진행 : 세부 기획서 쓰기
- 인원 : 리드 디자이너 (2~4개월)
- 결과물 : 2가지의 문서. 게임기획서와 기획자 노트

3. 청사진
- 기간 : 2개월
- 진행 : 개발의 매 단계를 작은 문서들로 나눈 개발단계별 세부사양서를 기획하기. 각 문서들은 각 개발단계에서 해 내야 할 목표와 최선의 결과를 제시한다.
- 인원 : 리드 디자이너와 소프트웨어 기획
- 결과물 : 몇몇의 개발단계별 세부사양서

4. 기술적인 설계
- 기간 : 2개월
- 진행 : 아키텍쳐 그룹이 개발단계뿐 세부사양서에 기초해서 필요한 개발툴들과 프로그램 사양서를 준비한다. 리드 디자이너는 사람들에게 컨셉을 설명하고 프로젝트 리더의 손에 주 업무를 넘긴다. 코푸스의 프로젝트 매니저는 아키텍처 그룹의 맴버이고 프로젝트를 마지막까지 관리했다.
- 인원 : 프로젝트 리더. 미드 디자이너. 소프트웨어 기획
- 결과물 : 게임을 만들기 위한 기술적인 내용들이 정리된 프로그램 사양서와 개발단계별 세부사양서 이 문서와 기획서가 프로젝트 계획이 된다. 개발단계별 세부사양서는 유통사측과 협의한 마일스톤에 맞추어 설계된다 (이경우에는 4단계씩으로 나누어진다)

5. 개발 툴 만들기
- 기간 : 4개월
- 진행 : 게임 개발에 필요한 툴과 구성요소를 구축한다. 목표는 게임 아키텍처를 일정한 완성도에 도달하도록 함으로써 잘 이해되도록 하며 전체를 재 작업할 필요가 없도록 만드는것이다.
- 인원 : 프로젝트 리더와 4명의 툴개발 및 프로그래밍 그룹원
- 결과물 : 게임제작에 필요한 개발툴과 기능적으로는 완성되어 있지만 모든 요소가 다 들어가 있지는 않은 게임구성요소 코푸스의 경우 게임구성요소는 3D그래픽엔진. 화면 구성빌더. 유닛과 빌딩을 만들기위한 게임배경에디터가 그것이다.

6. 제작
- 기간 : 12개월
- 과정 : 프로젝트 리더와 개발툴 프로그래머 한명이 팀을 맞는다 (예를 들어 4명의 프로그래머와 네명의 아티스트) 프로젝트 리더는 게임플레이를 정교하게 마무리 짓는다. 툴 프로그래머는 개발툴을 지원하여 개발툴 및 프로그래밍 그룹이 요청할경우 개발툴을 수리한다 (이론적으로 리드 디자이너는 모든 계층이 마지막 단계의 테스트와 테스트레벨에 대한 고문을 맞는다. 언제나 함꼐 일할 필요는 없고 다음 게임의 디자인을 해도 괜찮다)
- 인원 : 프로젝트 매니져 12개월. 툴 프로그래머 9개월. 12달 동안 9명의 프로그래머. 마지막으로 8~9달 동안 네명의 아티스트
- 결과물 : 다음단계를 프로그래머 없이 조정할 수 있기에 충분한 게임과 완성된 툴

7. 레벨 디자인
- 기간 : 4개월
- 과정 : 프로젝트 리더의 지시하에 게임의 레벨을 제작한다 (경험적으로 프로젝트 리더는 과로로 앓아 누웠을 것이므로 그의 짐을 덜어줄, 유능하고 창조적인 리드 레벨디자이너가 꼭 필요해진다. 그래서 프로젝트 리더는 리드 레벨 디자이너와 레벨 디자인 기간동안에 역할을 나눠가지게 된다)
- 인원 : 프로젝트 리더와 3명의 레벨 디자이너
- 결과물 : 모든 장면들과 게임안에서의 도움말이 들어간 완성된 게임.매뉴얼에 들어갈 글과 그림도 이 시점에서 완성된다

8. 리뷰
- 기간 : 3개월 (레벨 디자인동안에 같이 진행될수도 있다)
- 과정 : 일반적으로 레벨을 만드는 것과 평행하게 진행된다. 외주를 주기로 한다. 또는 일반적으로는 (코푸스의 예에서도 보이듯이) 유통사가 제품의 버그테스트 팀을 발족시킨다.
- 인원 : 테스터 4명
- 결과 : 버그를 찾아 고친다. 게임플레이를 할떄에 기본적인 문제가 발생되었다면 (그런일이 생겨서는 안되지만) 게임은 수정을 위해 개발자들에게 돌려보내지지만 아무튼 이 단계는 생산직전 마지막 단계다



*비효율적인 과정에서는 모든 팀이 첫날부터 함께 프로젝트에 투입된다. 게임 디자이너가 게임을 기획하는 작업을 끝내면 개발팀이 일을 시작한다. 마무리단계에서 디자이너는 팀 멤버 중의 몇 명만을 데리고 막판 수정을 한다. 이런 식으로는 팀원들이 할 일이 없어 빈둥대는 동안에도 시간과 돈이 계속 들어간다.
*컨셉부터 완성까지의 시간 대 결과의 비율이 중요하다. 코푸스의 일정계획서를 들여다보면 어떻게 전체 비용을 낮추었는지 알 수 있을 것이다. 처음 6개월간은 프로젝트에 소수의 사람만이 투입되었다. 이 팀의 실제 제작팀의 규모는 12개월동안만 유지되었다.



Posted by 생선날개




4. 세부기획
- 이번 Chapter.4 에서는 세부기획을 어떻게 나아가는지에 대해 알아본다.
- 세부 기획에 끝날 즈음에는 '게임기획서'와 '기획자노트' 두 개의 문서가 완성될 것이다.
- 게임기획서는 만들어질 게임에 대해 설명하고 모든 사람들이 해야 하는 목표를 설명하여 비전을 제시하는 역할을 하는 글이다.
- 기획자노트는 게임 기획서와 같이 읽는 문서인데, 기획자의 생각을 설명하고 다른 사람들이 기획자가 제안한 게임에 함께 도전하도록 이끄는 역할을 한다.

1) 디자이너의 역할
- 팀원이 함께 브레인스토밍하는 두 시간이 한 사람이 평생 생각할 수 있는 것보다 좋은 아이디어들을 쏟아낼 수 있다.

2) 기획 문서
 1. 게임 기획서
 - 게임에 대해 자세히 설명한 문서로, 잘 읽고 이해하기만 한다면 읽는 사람이 완성된 제품의 모든 것을 눈앞에 그려낼 수 있을 정도로 쓰여 있어야 한다.
 2. 기획자 노트
 - 기획자 노트는 기획서를 구상하는 동안 머리에서 굴러다닌 많은 생각들에 대해서 써내려간 문서이다.
 - 기획자 노트는 2가지 이유에서 쓸모가 있다. 첫 번째로 제작팀에게는 모든 문서들은 가치가 있다. 그리고 프로그래밍 코드에 대한 도큐멘트 비슷한 방식으로 유용하게 쓰인다.

3) 기획 문서 이용하기
- 2가지를 기억하라
>게임 기획서는 프로그래머들이 읽을 수 있도록 준비되어 있어야 한다
>프로그래머들은 게임 기획서를 읽지 않을 것이다
그러나 프로그래머들은 몇 가지 이유에서 기획문서들을 읽을 필요가 있다. 첫 번째 이유는 목표도 모르고 일을 맡아서 하면 사기도 저하되고 능률이 오르지 않기 때문이다. 두번째 이유는 일을 진행하면서 질문이 생길 때마다 디자이너가 대답하기 위해 묶여있는 것보다 이쪽이 더 효율적이라는 것이다. 세 번째 경제적인 이유 때문에 몇 명 안 되는 사람들이 기획서를 쓰기는 하지만 여전히 모든 사람들의 좋은 아이디어를 모아 발전시키는 것이 완벽을 기하기에 더 좋은 방법이기 때문이다. 마지막으로 프로젝트의 비전을 그룹에서 함께 나누는 것은 전체적인 단결력을 강화하고 사기를 올리는 결과를 가져오게 된다.

4) 기획을 개발에 맞추기
 1. 개발단계 Tier와 테스트베드 Testbeds
 - 개발단계에 대한 세부사양서는 다음 사항들을 제시한다.
 > 목표 - 이 단계에서 기획자가 바라는 요소들의 목롱
 > 철학 - 이 단계는 무엇을 테스트하는 것인가
 > 기대하는 결과 - 테스트를 하고 변화시킨 후에 얻고자 하는 것
 > 대안 - 이 아이디어나 컨세빙 변해야 한다면 다른 좋은 대안




'게임아키텍처디자인' 103p~119p



Posted by 생선날개
gamE/C2010. 1. 19. 16:36





프로그램이란?
-컴퓨터가 처리할 일련의 작업 처리 절차의 집합체

프로그래밍이란?
-프로그램을 만드는 행위를 말한다.

프로그래밍 언어란?
-사람과 컴파일러가 이해할 수 있는 약속된 언어를 의미한다. C언어도 이러한 프로그래밍 언어 중 하나.

컴파일러가 하는 역할
-프로그래밍 언어로 작성한 프로그램을 컴퓨터가 이해할 수 있도록 기계어로 번역해 주는 역할. 더불어 이렇게 번역하는 일 자체를 컴파일이라 한다.

코딩
-프로그램을 작성하는 과정

소스 코드
-컴파일되지 않은 코드

소스 파일
-소스 코드가 저장되어 있는 파일

오브젝트 파일
-소스 파일을 컴파일하면 새로운 파일이 하나 생성되는 것

C언어의 특징
-프로그램의 이식성이 높다
-저급 언어와 고급 언어의 구조를 모두 갖추고 있다
-예약어를 사용하여 표현이 간결하다
-함수의 집합이다
-프로그램의 모듈화가 가능하고, 분할 프로그래밍과 분할 컴파일 할 수 있다
-구조화 프로그래밍이 용이하다
-연산자가 풍부하며, 비트 연산, 쉬프트 연산, 번지 및 포인터 연산 등으로 시스템 프로그래밍을 하기 쉽게 한다
-Preprocessor의 매크로 기능이 있다
-포인터를 데이터로 사용할 수 있다
-모든 함수의 순환이 허용된다




'C 프로그래밍' ~34P



'gamE > C' 카테고리의 다른 글

C - Chapter 3. 변수와 연산자  (0) 2010.01.22
C - Chapter 2. 프로그램의 기본 구성  (0) 2010.01.20
Posted by 생선날개




3. 게임플레이
- 이번 Chapter.3 는 앞에서 언급한 것들 보다 자세히 살펴보도록 한다.

1) 게임 플레이란 무엇인가?
- 다양한 것들이 관계되고, 흥미로운 선택을 만드는 것

2) 게임 플레이를 구현하기
- "게임이란 흥미로운 선택의 연속이다"
- 게임 안의 전략은 각각의 장단점이 있어야 한다. 장점만 존재한다면 AI도 자동적으로 그 전략을 택할 것이다. 단점만 존재한다면 누구도 사용하지 않을 것이다.
- 결정이라는 요소는 장점과 단점, 그리고 다른 요소들에 영향을 받는 기회비용이 있을 때 게임플레이에 있어 가치를 갖는다
- 매 선택이 다음 결정에 영향을 미치는 흥미로운 선택의 연속
- 최고의 게임은 규칙은 적을수록 좋다는 원칙을 따라 만들어진다.
-
3) 절대 우세 전략의 문제점
- 어떤 상황에서도 쓸모없는 선택은 '절대열세전략'
- 너무 좋아 다른 것들이 쓸모없는 선택은 '절대우세전략'
- '절대열세전략'의 선택은 쓸모가 없고, 그것을 게임에 적용하는 데 쏟은 시간이 낭비일 뿐이다. 또한 '절대우세전략'은 다른 모든 선택을 쓰레기로 만들기 때문에 '절대열세전략'보다 더욱 좋지 않다.

4) 유사 우세 선택
- 특정한 상황에서만 쓸모 있는 전략
 ex)
 - 고블린에게 파이어볼 마법은 1방. 하지만 다른 적 유닛에겐 아주 극소수의 데미지

5) 무의미한 선택지 피하기
- 가위<바위<보 (X)  가위<바위<보<가위 (O)
- 나아가서, 가위2=바위 와 같은 새로운 변화와 변수가 필요함
- 한가지 규칙만을 도입하는 것으로 재미있는 게임플레이를 기대할 수는 없다.
 ex)
 - 같은 가격 질럿 2마리(200)와 저글링 8마리가 평지에서 싸우면 저글링이 이긴다. 하지만 입구에 막혀 질럿이 2마리를 세워 둔 변수가 생긴다면 저글링이 지게 된다. 이러한 변수

6) 흥미로운 선택지를 확보하기
- 게임에 넣을 만한 선택지의 예 (1번과 2번이 가장 좋다)
 1. 다른 요인들에 의해 하거나, 하지말아야 하는 선택
 2. 맥락에 따라 결정적인 타이밍이 있는 선택
 3. 해도, 하지않아도 차이가 없는 선택 (장식요소)
 4. 언제나 하는 것이 좋은 선택
 5. 아무 소용없는 선택

7) 재미있는 선택지를 만드는 도구들
- 플레이어의 역할을 고려하기
 1. 전략적 선택지
 ex)
 - 상대 프로토스가 질럿체제로 발전하고 있다. 마린 업그레이드를 스팀팩을 할 것인가? 공격 업그레이드를 할 것인가?
 - 투해처리로 멀티를 가져가서 자원을 빠르게 모으면서 위험한 도박을 할 것인가? 아니면 빠른 저글링으로 상대를 압박할 것인가?
 2. 지원 투자
 ex)
 - 배럭스를 지어야만 아카데미를 지을 수 있다.
 - 마린을 만들어서 자신의 병력을 늘릴 것인가? 배럭을 더 지어서 생산량을 늘릴 것인가?

 3. 적응성
 - 게임플레이를 예측하는 유용한 방법은 사용자가 택할 수 있는 선택지 중 가장 좋은것과 가장 나쁜 것을 파악하는 것이다.
 ex)
 1. 최고의 피해를 입히지만 가장 느린 행동 (리버)
 2. 가장 빠르지만 방어력이 아주 나빠지는 행동 (레이스)
 3. 최고의 방어력을 주지만 피해를 거의 입힐 수 없는 행동 (울트라리스크)
 4. 최고도 최저도 아니지만 가장 적응성이 큰 행동 (히드라리스크)

 4. 보정인자
 - 전략게임에 어느 지형이든 건널 수 있는 비행 유니트를 추가했다고 해보자. 다른 유니트들이 모든 지형을 이동하지 못하기 때문에 비행 유니트는 굉장한 이점을 가지고 있다. 어떻게 하면 밸런스를 잘 맞출 수 있을까? 아래와 같은 예가 보정인자다.
 - 느리게 만든다
 - 약하게 만든다
 - 가시거리를 짧게 만든다
 - 비싸게 만든다 (별로 좋지 않다. 사용자가 재미있게 사용하는 데 도움이 되지 않기 때문)

 5. 비영구성
 - 새로운 자원이 있는 곳에 내가 확장기지를 지었다. 그 확장기지를 없앨 수 없다면 영구성. 하지만 다른 적군이 나의 확장기지를 파괴하고 새로운 확장기지를 지었다. 그렇다면 이것은 비영구성.
 - 우연이나 적의 행동에 따라 파괴될 수 있다.
 - 빼앗기거나 변형될 수 있다.
 - 항상 가질 수는 없는 무언가를 줄 수 있다.
 - 사용 회수에 제한이 있다 (10번 쓰면 없어지는 번개의 지팡이)
 - 일정 시간만 유지된다 (10시간이 지나면 사라지는 버프 주문)

 6. 숨은 비용
 - 저글링을 만들기 위한 비용은 50미네랄. 하지만 실질적으로 저글링을 만들기 위한 절차까지 생각해 본다면 200미네랄의 스포닝풀 + 50미네랄의 저글링 변태 비용 = 총 250미네랄. 여기서 200미네랄이 숨은 비용이 된다

 7. 시너지
 - 와우를 예를 들어 설명해보면 20명의 마법사 전체 데미지보다, 17명의 마법사와 1명의 조화드루(공대원 전체 마법치명타5%증가, 마법데미지13%증가), 1명의 정기술사(공대원 전체 치명타5%증가, 주문력280증가), 1명의 암흑사제(공대원 전체 적중도 3% 증가)가 더욱 데미지가 강하다.

8) 게임플레이에 대한 결론
-  좋은 게임이란 '적이 예상하지 못했던 일을 가능하게 함으로써 이기는 게임', 나쁜 게임이란 '어떻게 하면 되는지'를 알아버린 후에는 더 이상 어떤 선택도 필요하지 않는 게임

9) 상호작용
- 뒷마당에서 혼자 벽을 향해 축구공을 차는 것과 팀을 이뤄 골대로 달려가 골을 넣는 것의 차이
- 단지 자동차 운전 게임을 한다면 재미없겠지만, 소화전을 박고 그 소화전에서 물이 뿜어져 나오고, 그 물로 인해 물웅덩이가 생겨 다른 차들이 미끄러진다는 생각을 한다면 이해할 수 있을 것이다.



'게임아키텍처디자인' 78p ~ 103p



Posted by 생선날개