보더랜드 : 프리 시퀼 클랩트랩의 일기장. 게임

클랩트랩스틱 보야지에서 메모리뱅크 오버룩의 숨겨진 오두막에 들어오시면

이런 콘솔이 있습니다.

대놓고 클랩트랩의 자서전이라고 써있군요.



이부분은 한글화가 안된줄 알았으나..


다행히 옆에 메세지로 뜨는군요.

이 과정은 클랩트랩스틱 보야지 메인퀘스트를 진행하면서 직접(?) 겪은 상황이죠.

글로 보는것보다 더욱 끔찍합니다 ......

그리고 토그는 저걸 보고 2에서의 배드에스 결투를 기획하게 되죠..


약주고 병을 주는 클랩트랩.

실망시키지 않습니다.

참고로 이부분 메인퀘스트에서 상당히 끔찍합니다 ....

사람들 비명소리가 ........;;; 

음악도 우울하고 ;






이 부분은 매우 당황스러웠던 부분이였죠.

설마 그 오버룩에 있던 갈갈이가... 설마 그걸 처음 한게 클랩트랩이라니 .;; 여러모로 충격적이였습니다.






[유니티]시간에 따라 변화하는 미로 만들기 프로그래밍

안녕하신가요~

첫 글로 어떤 주제로 글을 쓸까 하다가

졸업작품 프로젝트중에 만들었던 미로 하나를 소개해볼까 합니다.

이 미로를 만들때 미로가 고정되어 있는 단조로움에서 벗어나서

시시각각 변화하는 미로를 만들면 반복 플레이에 의한 단조로움도 줄고

미로 크기를 굳이 크게 만들지 않아도 적당한 난이도가 될것으로 예상했기 때문입니다.


먼저 미로를 어떻게 만들지 생각했습니다.

여기에서 특수 문자인  ┼ ,├ , ┯ .... 등 텍스트 상에서 표나 테두리 등을 나타낼때 쓰는 문자를 보고

아이디어를 떠올렸습니다.

일단 하나의 정사각형을 놓은뒤 가운데에 기둥하나를 세웁니다.

그리고 위에서 바라봤을때 상하좌우에 벽을 하나씩 놓습니다.

그림으로 보면 이런식입니다.


원래 공책에 이런 설계를 그리면서 하는데 사진으로 찍거나 스캔해서 올리기엔 너무 지저분(...)해서 부득이하게 그림판으로 대충

그려서 표현해 봤습니다. 여기서 저 하나를 '미로 한칸' 이라고 표현하며

4개의 벽은 위쪽 벽부터 시계방향으로 1,2,3,4번 벽으로 부르도록 하겠습니다.

다들 아시다싶이 프로그래밍에선 어떠한 물체의 상태를 이진법을 활용하여 구분합니다.

가장 많이 쓰이는 예중 하나가 전구의 불이 들어와 있는 상태를 1 , 꺼져있는 상태를 0 으로  2진법 한자리수로 나타 낼 수 있지요.

이것도 마찬가지입니다. 저 벽이 막혀있을때를 1, 열려있을때를 0으로 놓습니다.

그럼 벽 하나당 2가지의 상태를 가지게 되고 벽이 총 4개이므로 2^4 = 16가지의 상태를 가지게 됩니다.

이는 이진법 4자리수로 0000 ~ 1111 까지로 나타 낼 수 있습니다. 10진법으로 표현하면 0~15 까지입니다.

여기서 2진법 각 자리수를 벽 하나에 대응시켜 보겠습니다.

1,2,3,4번벽을 편의상 그대로 맨 왼쪽 자리수부터 대응시켜 보겠습니다. (실제 프로그래밍 할때는 최하위 비트인 맨 오른쪽 비트부터 대응시켰습니다.)

그렇게 하면 0101 은 2,3번만 막혀있는 상태이고 1000은 1번벽만 막혀있는 상태입니다.

여기까지 이해 되셨는지요?

저희는 2진수 4자리수를 보고 바로 어떤 벽이 막혀있고 어떤벽이 열려있는지 알 수 있습니다.

그렇지만 컴퓨터는 어떻게 알 수 있을까요?

물론 각 자리수에 대응하는 bool 변수를 만들어서 활용하는 방법도 있겠습니다만.

문제는 고정된 값이 아니라 각 자리수가 일정 시간마다 바뀌게 된다는 점입니다.

각 자리수별로 1인지 0인지 랜덤으로 계속 정하게 하는건 비효율적이라고 생각했습니다.

그래서 일단 10진수로 0~15사이의 숫자에서 랜덤하게 하나를 정하도록 한 뒤

나온 숫자를 4자리수의 2진수로 표현했을때 각 벽의 상태를 바로 알 수 있는 방법을 고안했습니다.

사실 10진수를 2진수로 변환하는 방법에서 따온겁니다.

0000~1111의 2진수를 순서대로 쭉 써보면 어떤 규칙이 보입니다.

맨 오른쪽 2진수는 0 1 / 0 1 / 0 1 이 숫자가 올라갈수록 반복됩니다.

오른쪽에서 두번째는 0 0 1 1/  0 0 1 1  이렇게 반복됩니다.

세번째는 0이 4번, 1이 4번 반복됩니다.

네번째. 즉 맨 왼쪽 비트는 0이 8번 1이 8번 반복됩니다.

즉 10진수로 8 이상, 이진수로 1000 이상이면 맨 왼쪽 비트는 무조건 1이 되며 1번 벽은 항상 막혀있는 상태입니다.

이를 구분하는 방법은 코드로 적으면 


for(int i = 0 ; i < 4 ; i ++)
{
if(state%Mathf.Pow(2,i+1) >= Mathf.Pow(2,i))
isOn[i] = true;
else
isOn[i] = false;
}

이와 같이 사용했습니다.

state 는 0~15 사이의 상태 숫자이며 저 반복문에 들어올때 이미 하나의 랜덤한 상태로 주어지게 됩니다.

isOn[i]는 1번부터 4번까지 4개의 벽의 상태를 나타냅니다.  여기서는 계산의 편의상 0번부터 3번까지를 사용하였습니다.

계산의 편리함 이외에도 프로그래밍에서는 0번부터 숫자를 세는게 일반적이지만 위에서의 설명에서는 1번부터 숫자를 사용했습니다.

if문 안쪽을 자세히 보시기 바랍니다.  Mathf.Pow(a,b) 함수는 a^b 를 반환해주는 함수입니다.

%연산은 나눈 나머지값을 반환합니다.

4%3 하면 4를 3으로 나눈 나머지인 1이 나오는 겁니다.

그럼 천천히 살펴봅시다.

먼저 제일 오른쪽에 있는 비트는 10진수로 보면 1, 3, 5, 7, 9 .... 처럼 홀수번째가 왔을때 1이 됩니다.

2^(0+1)은 2 이고 2^0 은 1입니다. 즉 상태값를 2로 나눈 나머지가 1 보다 같거나 크다면 제일 오른쪽에 있는 비트는 1이 됩니다.

두번째 비트를 살펴보겠습니다.

2^(1+1)은 4 이고 2^1은 2 입니다. 즉 상태값을 4로 나눈 나머지가 2보다 같거나 크다면 두번째 비트는 무조건 1이 됩니다.

그렇게 되나요?

두번째 비트가 1인 경우는 2,3,6,7,10,11,14,15 입니다.  4로 나눴을때 나머지가 2 또는 3이 나오면 두번째 비트는 1이 됩니다.

세번째, 네번째 역시 똑같은 방법을 사용합니다.

이렇게 일정 시간마다 상태값을 랜덤한 값으로 초기화 시켜 각 벽의 상태를 정하게 하였습니다.

그런데 이게 과연 미로처럼 보일 수 있을까요?

이 '미로 한칸'을 서로 이어붙여서 마치 심시티에서 바둑판 도로를 깔듯이, 구성하게 되면....


이렇게 됩니다!

보기만 해도 복잡하시죠?;

이게 랜덤함수를 통하여 작동하게 된 모습은 다음과 같습니다.




뭔가 복잡하긴 하지만 아직 미로인가?? 싶은 엉성함(..)이 보입니다.

그래도 실제로 플레이 해보면 미로같이 보이는데요. 이 미로의 플레이 영상을 보여드리겠습니다.







직접 영상으로 보니 제법 미로같지 않습니까?

아니면 예전 윈도우 화면보호기의 미로가 생각나기도 합니다.

이번 글에서는 이 미로를 구성하는 핵심 요소였던 '미로 한 칸'의 상태를 어떻게 나타내며

각 벽의 상태를 어떻게 구분했는지를 써봤습니다.

유니티다 보니 처음부터 보고 따라할 수 있는 일종의 강의같은 형식을 해볼까 고민도 했습니다만.

이미 유니티 기본 듀토리얼이 잘 되어 있는데다가 쉽게 따라 할 수 있게 써놓은 사람들도 매우 많더군요.

그래서 저는 색다르게 제가 프로젝트 하면서 고민했던 알고리즘이나 '아.. 이런게 필요한데 어떻게 구현하지?' 했던 것들을

설명하는 방식으로 가볼까 했습니다.

처음이라 그런지 말도 두서없이 한것 같고 10진법과 2진법 변환에서 해당 자리수가 1인지 0인지 구분하는 방법같은

수학적으로는 매우 초보적일 수 있는 알고리즘이라 내용이 부실하지는 않았는지 걱정이 되기도 합니다.

긴 글 읽어주셔서 감사드립니다 :D

여기선 프로그래밍 이야기를 하려고 합니다. 프로그래밍

컴퓨터공학부를 다니면서 했던 크고작은 프로젝트들을 정리해보려고 합니다.

주로 제가 짰던 프로그램 코드나 설계에 대해서 써보도록 하겠습니다.

이글루스를 너무 오랜만에 해서 편집이 잘 될지는 모르겠지만

열심히 해보겠습니다. :D

이글루스 다시 시작해보려 합니다. 잡담

2012년 4월에 군대 갔다가

2014년 1월에 전역하고 귀찮아서 냅두고 있었는데

슬슬 졸업도 하고  프로그래밍 공부나 게임 관련 정보를 모아보고자

이글루스를 다시 시작합니다.~




안그래도 미래가 잘 안보이는 우리나라 게임산업이.. 잡담

http://www.thisisgame.com/board/view.php?id=1090432&board=0&category=102&subcategory=&page=2&best=&searchmode=title&search=&orderby=&token=

http://www.zdnet.co.kr/news/news_view.asp?artice_id=20120206114001


와우...

엄청나군요 :S

게임산업에 몸 담으려고 했는데 비관적이 되는듯.

참... 답이 안보입니다.

여성부가 게임 유해하다고 들고나오는 게임은 죄다 성인게임이고 ㅋ

에휴..

아니 게임물등급위원회는 괜히 만들었고 수위등급은 괜히 만들었습니까?

그걸 안지키는 상황을 고치던가 해야지 청소년이 19금 게임에 나오는 폭력을 많이 보니

게임을 못하게 하자!  라는 말도 안되는 논리는 진짜 -_-;

그리고 학교폭력... 게임 없던 시절에는 학교 폭력도 없었다는듯이 말하내요.

마치 게임이 생겨나게 된 뒤로 학교폭력이 같이 생긴것처럼 학교폭력의 주된 원인은 게임이라는

말도 안되는 논리가 참 -_-;

정말 말이 안되는듯.

1 2 3 4 5 6 7 8 9 10 다음


통계 위젯 (화이트)

53
14
19554