2012/02/27

코드가 유실되었다

전에 작성했던 코드들을 깃허브에 올리려고 찾아봤는데 거의 다 없어진거같다. 이럴수가... 완성도나 뭐 그런게 안좋긴해도 꽤나 많이 작성했던 것들이 대부분이었는데 그것들이... 나의 분신들이...!!

앞으로는 깃허브에 모조리 때려넣어야지 내가보기엔 깃허브가 망할거같진 않고 어쨌든 나중엔 구글에 인수되지 않을까...

2012/02/22

비쥬얼드 블릿츠 분석 툴 8

Github에 프로젝트 하나 커밋한 기념으로 깃허브에서 비주얼드를 검색해 봤는데, 두 가지의 봇이 나왔다. 1번은 Clojure를 이용해서 만들었고, 2번은 놀랍게도 Qt를 사용해서 만들었음...!! 반가워서 Qt로 만든 봇을 클론받아서 실행해봤는데 컴파일에는 별 문제는 없었고, 오토플레이, 힌트플레이도 이상없이 잘 된다. 다만 1년 4개월 전에 생각했던 문제점이(진짜 나도 어지간히 안했다. 비주얼드 봇 손 놓은지가 1년 4개월 전이라니 -_-) 그대로 드러나는 약간은 안타까운 봇이어서 좀...

클론 받자마자 바로 컴파일해서 실행해보고 쓰는 것이라 코드는 보지 않았지만, 일단 그 Qt봇에는 약간의 문제점이 있다. 첫번째 문제는 별다른 알고리즘 없이 매치되는 모든 것을 그냥 회전시키려 하는 것이 그 문제인데 그걸 적어보면

OXOOXOO

의 블럭이 있다고 치고 좌로부터 번호 1번을 주면, 1번 입장에서는 2번과 자리를 바꾸면 123이 완성이 되지만 4번 입장에서는 5번과 자리를 바꾸면 이게 567번이 또 완성이 되니까... 1-2를 바꾸고 나서 4-5를 바꾸니 계속 지워지지가 않고 또 계속 지우려 쉴새없이 보석을 움직이게 된다. 두 번째 문제는 스피드업된 상태에서 화면이 밝아졌다 어두워지는 것을 반복하는데, 이때 블럭의 RGB값을 잘 못찾아내는거 같고 또, 마지막으로 특수 블럭을 잘 인식하지 못하는 것 같다. 처음 문제는 내가 생각했던 문제였는데, 두번째와 세번째 문제는 전혀 생각을 안했던 문제라서... 하여간 상당히 잘 만들어져서 깜짝 놀랐지만 아마 단순히 블럭만 찾게 움직이게 하는 식으로 구현한 듯 보인다. 사실 봇 본연의 임무만 생각해보면 뭐 괜찮은 것 같기도 하고... 솔직히 서치스페이스까지 생각하는건 그냥 내 연구과제였지, 그거 생각 안한다고 이상한 것은 아니니까 말이다.

몇 가지 라이트한 부분은 여기서 가져와도 될 거 같고 나머지 핵심 부분은 예전에 썼던 대로 해보는 것이 좋을 것 같다. 일단 내가 생각했던 대로 하면 분명 고득점 나올듯;


봇으로 돌리면 대강 50만점 근처로 나오는 것이 평균이고 대박치면 83만점 정도... 그런데 이 게임 자주 하던 여자 후배는 그냥 50만점 정도 나왔던 것 같은데-_- 하여간 고득점이 나오려면 꽤 여러가지를 신경써야 할 것 같다.

C++11을 이용한 NES 에뮬레이터 제작하기

TAS라는 장르라고 해야 되는지는 모르겠지만, 하여튼 Tool-Assisted Speedrun이라는 것이 있는데, 각종 게임을 말 그대로 툴의 도움을 받아 스피드런을 하는 그런 것이 있다. 어떤 게임 플레이 동영상을 볼때 말도 안되는 플레이가 나오거나 하여간 있을수가 없는 그런 일이 자꾸 벌어진다면 동영상 초반이나 한구석에 보통 TAS Video라고 써있는 그거, 그게 TAS Movie고 뭐 그렇다. 아무튼 그런게 있는데...

얼마전에 웹서핑을 하다가 신기한 것을 봤는데 그게 NES 에뮬레이터를 C++로 제작하는 유튜브 영상이었다.


위 동영상이 그건데, 일단 동영상이 15분 길이인데 코드 짜는 것을 보면 알겠지만 말도 안되는 속도로 무슨 모든 코드를 외운듯하게 미친듯이 짜내려가기 시작하는데다가, 다음 동영상을 보면 알겠지만 게임을 막 돌리기 시작하는데 진짜 깜짝 놀랐다.(이 코딩도 TAS란다 -_-)

뭐 아무튼, 일단 C++11로 작성했다고 하는데다가 또 개인적으로 연구할 가치도 있는거 같아서, 또 코드를 공개를 해 놨기에 오늘 코드를 잠깐 봤는데 상당히 재미있게 본거 같다. 일단 네임스페이스가 이쁘게 들어간거 같고(설명은 잘 못하겠지만 그런 느낌이었다.) 코드 자체도 굉장히 쉽게 짜여진 거 같아서 읽기도 좋았고 말이다. 물론 마음에 들지 않는 부분도 있었는데, 줄 수를 줄이려고 했던 건지 뭔지는 모르겠는데, 한 줄에 여러 코드를 쓰거나 하는 부분이... 하기야 이건 개인 스타일이니까 뭐... 어쨌든 덕분에 NES 헤더나 그런 것들도 찾아보고 그랬는데 굉장히 재미있는 시간이었다.

롬 헤더를 읽고 뭐 재배치하고 설정하는 부분에 대해서는 상당히 이해가 쉬운데...  문제는 옵코드를 구현해 놓은 부분이나 뭐 그런 생소한 부분이 너무 이해가 가지 않는다. 일단 코드를 보면 왜 이렇게 해놓은건지 모르는 부분이 많은데다가, NES에 대해서 하나도 모르니까...

먼저 nesdev wiki에 가서 이것저것 정보를 모으다 보면 좀 쉽게 풀리지 않을까 싶다. 그래서 나도 한번 비슷하게 에뮬레이터를 만들어보면서 C++11로 실제로 작성해보는 것이 재미있지 않을까 싶다. 그리고 이 기회에 github도 실제로 이용해보는 것이 좋을거같다.

아 그리고, 이걸 실제로 해보려는 이유는 원래




이런 류의 동영상 때문이었다. 뭐 FCEUX라는 에뮬레이터를 쓰면 실제로 게임에 루아 코드를 심을 수 있는 모양이지만(진짜 별별 것들이 다 나온다), 기왕 하는거 잘 모르는 C++11에 접근해볼겸, 그리고 실제 머신에 대한 에뮬레이팅을 어떤 식으로 하는지도 평소에 궁금했었기 때문에 한번 도전해보려 한다. 꽤 많은 정보가 nesdev wiki에 쓰여 있기 때문에 정보 문제는 없을 것 같고 문제는 내 실력이겠지... 천천히 한번 도전해 보겠다.

한 가지씩 차근차근 해결해보자

이쪽 블로그나 저쪽 블로그나 뭐 해놓겠다고 한건 많은데 정작 한 것은 손에 꼽을 정도여서, 오늘 블로그 글들을 하나씩 보다가 느낀 것을 적으면...

앞으로 특정 기간엔 이것을 반드시 끝내자, 하는 마음으로 달려들어야겠다. 그리하여... 순서를 한번 정해 봤는데

그 전에 일단 규칙을 써 보면

  1. 내 실력을 업그레이드 하기 위해서 연구하고 검색하고 실제로 짜 보는 것이므로, 누구의 도움도 받지 않는다. 다만 검색은 가능하며 대략적인 조언은 지인들에게 들을 수 있다.
  2. 한 가지를 끝내야 다음 주제로 넘어갈 수 있다.
  3. 물론 새로운 주제가 생기는 것은 언제나 적을 수 있다.
  4. 실패하거나 포기할 시에는 포기했다는 것을 반드시 블로그에 적자.
  5. 어영부영 넘어가는 시간을 조금 더 효율적으로 사용하자
뭐 이후에 더 추가될지도 모르겠지만 대충은 이 정도가 되겠고, 그렇다면 이제 순서가 문젠데 일단 내가 하겠다고 했던, 또 해볼 것들이
  1. 서징오라 한글화 - 이건 중단됨 허나, 일본어를 공부하기 시작하면 그냥 나 혼자 하겠다
  2. 샤이닝포스 한글화 - 이것도 한다
  3. C++11을 이용한 NES 에뮬레이터 제작 - 계획중
  4. 디아블로 큐브봇 프로젝트 - 이건 디아블로3가 충분히 재미있고 또 유명한 프리서버가 나오면(아마도 나모모 디아블로2 서버 수준 정도 되야겠지만) 그때 다시 생각해보자
  5. 심비안 어플 제작 - 안함
  6. 디자인 패턴 정리 - 싱글톤과 state는 무조건, 그리고 찾아보고 다른 것도 두어개 추가
  7. javascript canvas를 이용한 3D 그래픽 구현 - 이거는 할 생각이 있고 1단계는 진행했음
  8. 서치스페이스를 이용하는 비주얼드 오토플레이 - 할 생각이 있다
이 정도가 있는데, 순서를 어떻게 해야할지 모르겠다. 일단 3번을 해보면 2번은 굉장히 쉬울 것 같으니 순서는 3-2가 될거고 2가 잘 풀리면 1도 하게 되지 않을까... 8번을 제일 먼저 해볼까 싶기도 하고, 6번과 7번은 수시로 시간이 날 때마다 하면 될거 같다.

2012/02/10

잡담

일때문에 리눅스 부팅 과정에 대해서 분석할 일이 있었는데...

요즘 코드 보는 눈이 전보다 좀 좋아졌다고 생각했는데 진짜 앞이 안보이는게 무척이나 당황스러웠다. 하여...

리눅스 부팅과정에 대한 포스팅을 해 보도록 하겠다. 꽤 알아야 할 정보도 많고, 그래도 코드 자체를 아예 못 읽은것도 아니라서 읽다보니 재미있는 부분도 있긴 하더라. 그런것을 정리해서 적어둔다면 꽤 괜찮을 것 같다.

그전에 빨리 샤이닝포스 한글화와 비주얼드 네비게이터를 완성해야하는데 시간이 참 없구나... 시간이 항상 넘쳐난다고 생각했는데 잘못 생각했었던 것 같다.

조지 버나드 쇼라는 사람이 자기 묘비에 I knew If I stayed aroung long enough, Something like this would happen 이라고 적어 놨다는데 얼마 전까지 조지 버나드 쇼에 대한 나의 생각이 죽는 순간까지 개그를 치는 위대함과 그 개그의 퀄리티, 이거 정말 대단한 사람이구만. 하고 놀라움을 가지고 있었다면, 지금은 그의 뛰어난 통찰력에 대한 놀라움이 생긴 것 같다.