블로그는 귀차니즘

First Sensation
  • 공지
  • 지역로그
  • 태그
  • 방명록

Script Interpreter - boost::spirit

Programming 2010/03/09 02:57 귀차니스트
  이번에는 boost에 존재하는 spirit을 사용하여 간단한 스크립트 언어의 Interpreter를 만들어보게 되었습니다. 예전에 IPangYa 를 비롯하여 PangCal 프로그램을 만들 때 잠시 사용하였던 라이브러리를 다시 사용하게 되었는데요, 예전엔 문법적인 체크만 했었는데 이번엔 그래도 파서라는 이름에 맞게 인터프리터를 만들어보게 되었네요.

문법

명령문 -> if문, while문, 변수선언문, 변수대입문

if문 -> if(판별식) { 명령문 } else { 명령문 }

while문 -> while(판별식) { 명령문 }

판별식 -> 수식 비교연산자 수식

비교연산자 -> == != < >

변수선언문 -> var 변수이름

변수대입문 -> set 변수이름 = 수식

수식 = 값 +, -, *, / 값

값 = (값), 숫자, var:변수이름

 

예시

변수선언

ex) var abc

    abc 변수를 선언

변수대입

ex) set abc=100

    abc 변수에 100을 대입

if문

ex) if(1==1) { 명령문 }

          1과 1의 값이 동일할 때 명령문 실행

    if(var:a==var:b) { 명령문 }

        변수a 값과 변수b 값이 동일할 때 명령문 실행

    if(a==b) { 명령문 }

        변수a 값과 변수b 값이 동일할 때 명령문 실행

    else { 명령문 }

           추가적으로 뒤에 붙을 수 있음

while문

ex) while(a<1000) { 명령문 }

       변수a 값이 1000보다 작을 동안 명령문 실행

  위와 같은 문법을 지원하는 스크립트 언어 입니다. 사실 너무 간단한 스크립트 언어라 어떻게 이름을 지정할 것도 없지만요^^; 사용은 무척 쉽게 되었습니다. 사실 boost::spirit에 존재하는 함수에서 abstract parser tree를 만들어주기 때문에 해당 트리를 기반으로 평가함수를 실행하면 되기 때문이죠^^. 이번에는 C Interpreter를 만들어보려고 하고 있습니다. C++ 은 template가 있어서 그 부분은 불가능 할 것 같고 차라리 C 를 만들어보기로 했습니다. 이 부분은 완성이 천천히 진행이 될 것 같군요. 아래는 제가 만들었던 스크립트 언어의 룰입니다.

Identifier = token_node_d[(alpha_p >> *alnum_p)];
Message = '"' >> token_node_d[*(anychar_p - '"')] >> '"';
Program = *Expression;
Expression = discard_node_d[space_p] | IfExpression
| WhileExpression
| VarExpression
| CallExpression
| NumericExpression
| AssignExpression;

AssignExpression = str_p("set")
>> token_node_d[+space_p]
>> LValue
>> discard_node_d[*space_p]
>> '='
>> discard_node_d[*space_p]
>> RValue;

RValue = NumericExpression
| Message
| Identifier;

LValue = Identifier;

ComparisonOperator = str_p("==") | str_p("!=") | str_p("<") | str_p(">");

BooleanExpression = (RValue
>> discard_node_d[*space_p]
>> ComparisonOperator
>> discard_node_d[*space_p]
>> RValue);

IfExpression = str_p("if")
>> discard_node_d[*space_p]
>> '('
>> discard_node_d[*space_p]
>> BooleanExpression
>> discard_node_d[*space_p]
>> ')'
>> discard_node_d[*space_p]
>> '{'
>> discard_node_d[*space_p]
>> Program
>> discard_node_d[*space_p]
>> '}'
>> !( discard_node_d[*space_p]
>> "else"
>> discard_node_d[*space_p]
>> '{'
>> discard_node_d[*space_p]
>> Program
>> discard_node_d[*space_p]
>> '}');

WhileExpression = str_p("while")
>> discard_node_d[*space_p]
>> '('
>> discard_node_d[*space_p]
>> BooleanExpression
>> discard_node_d[*space_p]
>> ')'
>> discard_node_d[*space_p]
>> '{'
>> discard_node_d[*space_p]
>> Program
>> discard_node_d[*space_p]
>> '}';

VarExpression = str_p("var")
>> token_node_d[+space_p]
>> Identifier
>> *( discard_node_d[*space_p]
>> discard_node_d[ch_p(',')]
>> discard_node_d[*space_p]
>> Identifier);

CallExpression = str_p("call")
>> token_node_d[+space_p]
>> Identifier
>> discard_node_d[*space_p]
>> '('
>> discard_node_d[*space_p]
>> !Arguments
>> discard_node_d[*space_p]
>> ')';

Arguments = RValue
>> *( discard_node_d[*space_p]
>> discard_node_d[ch_p(',')]
>> discard_node_d[*space_p]
>> RValue);

CallVal = str_p("var:") >> Identifier;

NumericExpression = Term
>> *(   (ch_p('+') >> Term)
|   ('-' >> Term) );

Term = Factor
>> *(   ('*' >> Factor)
|   ('/' >> Factor) );

Factor =   int_p
| CallVal
|   '(' >> NumericExpression >> ')'
|   ('-' >> Factor)
|   ('+' >> Factor);

 위와 같은 룰로 구성이 되어있습니다.  앞으로 C Interpreter를 구성하게 된다면 여러모로 여기저기 붙여서 써먹을 일이 많을 듯합니다^^. 아마 제가 제작하는 OS에도 사용이 가능하게 될지도 모르겠네요^^; 가능했으면 좋겠는데.. 그럼 직접 적은 글은 별로 없는 영양가 없는 포스팅을 줄이도록 하겠습니다. 다음에 뵙겠습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Programming" 분류의 다른 글

Gradient에 대한 정리 (2)2009/01/07
한게임 자동테트리스 Ver 0.6 (40)2008/11/15
한게임 자동테트리스 Ver 0.2 (27)2008/11/03
Read Sector From Floppy (0)2008/07/17
어제 무작정 맹글어봤던 것입니다.. (2)2008/07/16
2010/03/09 02:57 2010/03/09 02:57
TAG Interpreter, 인터프리터
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/120

댓글을 달아 주세요

Gradient에 대한 정리

Programming 2009/01/07 10:17 귀차니스트

  일전에 Gradient에 대한 기능을 구현하였는데, 최근 몸 상태도 그렇고 마무리되지 않은 다른 부분도 있어 포스팅을 차일피일 미루어 왔습니다. 일단 간단한 Gradient는 색이 차츰차츰 변해가는 그런 것을 지칭하게 되는 데요. 이 기능에 대해서는 여러가지 방법이 존재할 수 있습니다.

  먼저 그리는 방법에 대해서 알아보자면 간단하게 하나의 방향을 향해가면서 색이 점점 변하는 경우를 볼 수 있습니다. 다른 경우는 원형의 경우도 존재할 수 있겠고, 하나의 방향을 향해가면서 절반 정도에 이르러 색이 완전히 다 변하였다 다시 복구 되는 경우도 존재할 수 있겠죠.

  가장 간단한 기울기가 없는 방향성 Gradient를 정리하면 다음과 같습니다.( 예로써 Left 방향을 선택해 보죠. )

Gradient (Language : cpp)
  1. 색상1 = Red;
  2. 색상2 = Blue;
  3. for( int i = 0; i < Width; ++i )  {
  4.  
  5.    double Percent = static_cast<double>(i) / Width;
  6.    
  7.    색상Put = RGB( 색상1.Red * ( 1.0 - Percent ) + 색상2.Red * Percent ),
  8.                           색상1.Green * ( 1.0 - Percent ) + 색상2.Green * Percent )
  9.                           색상1.Blue * ( 1.0 - Percent ) + 색상2.Blue * Percent )
  10. }

  와 같이 구현할 수 있습니다. 색상Put는 Width 에 해당하는 i 에 대한 출력 값이 되는 셈이죠. 결국 0 ~ Width를 0% ~ 100%에 대한 Blend 비율로써 생각을 하면 됩니다.

  그럼 기울기가 존재하는 경우를 한 번 생각해 봅시다. 속도를 위해서는 4가지의 경우를 먼저 생각을 해봐야 합니다. 어떤 경우냐면 기울기가 - 인지 + 인지에 따라서 2분류가 먼저 나눠지게 되고, 기울기에 대한 값이 0.5 보다 큰지 작은지에 따라서 각각 또 나눠주어야 합니다.

  왜냐하면 기울기가 한 쪽에 대해서만 처리를 해야 되는 경우를 생각해보면 0.5 이하일때와 0.5 이상일때를 먼저 살펴보도록 하겠습니다. 0.5 이하일때는 선을 하나 그릴 경우 가로로 무척 길게 뻗어나가게 됩니다. Windows GDI 상에서는 화면 좌표의 원점이 좌측 상단이라는 것을 먼저 생각하고 보면,

  위 두 가지의 경우를 살펴보면 (X, 0)좌표에서 (X + 기울기, 높이)로 선을 긋는게 한 쪽에 비효율적이라는 것을 알 수 있습니다. 밑의 경우는 X 좌표를 증가시켜가면서 선을 그려도 많아봐야 2X 만큼의 선을 그리게 되는 반면 위의 경우는 기울기가 0에 가까워 질수록 거의 무한대로 선을 그려야 하기 때문이죠.
  그리하여 위의 경우는 Y 축의 좌표를 증가시켜가며 선을 그리면 됩니다. (0, Y)좌표에서 (너비, Y + 기울기) 처럼 말이죠. 물론 - 기울기의 경우도 동일하게 처리하면 됩니다.

  그리고 저의 경우 MoveToEx 와 LineTo 를 이용하여 Gradient를 구현하였는데, 실제 이 부분에 대해서 처음 고민을 약간 하였습니다. 혹시나 선을 그리는 DDA 알고리즘이 처리하지 못하는 빈 픽셀이 생기면 어떻게 하지 하고 말이죠. 하지만 이 경우도 사실 고민할 경우는 없습니다.
  처음에 기울기에 대해서 먼저 계산을 하여 높이 또는 너비에 대한 X, Y 축 증가량을 미리 구한 뒤 천편일률적으로 목적지에 + 를 하면 되게 됩니다. 왜냐면 선을 그리는 알고리즘에 있어서 기울기가 완전 동일 하다면 위치가 약간 좌우 혹은 상하로 이동했을 뿐 그리는 순서 또한 동일하기 때문입니다.

  그리고 원형 Gradient의 경우도 존재합니다. 이 경우는 상당히 까다로운 경우라고 할 수 있습니다. 피타고라스의 정리를 사용하여 목적지와 원점의 거리를 계산하여 색상을 Blend하면 되긴 하지만 그 것 보다는 원을 그리는 함수로 원을 그리면 됩니다. 물론 Pen에 대해서는 Width가 2로 지정이 되어야 합니다. 1로 지정이 되었을 경우 빈 공간이 차츰차츰 크기가 작아져가면서 그리는 원에 대해서 빈 공간이 사라지고 Gradient가 작성되기 때문이죠.

Radial (Language : cpp)
  1. for( int i = 0; i < Radius; ++i )   {
  2.    
  3.     double Percent = static_cast<double>(i) / Radius;
  4.     Ellipse(hDC, i, i, 2*Radius - i, 2*Radius - i);
  5. }

  간단하게 적는다면 위와 같은 코드가 작성될 수 있겠군요^^. 타원에 대해서는 Ellipse 함수가 Rect 크기에 대해서 Drawing 이 가능하므로 연구를 개인적으로 하면 가능할 듯 합니다. 실제 구현은 했지만 올리는 것은 금전적 문제의 여지가 많은 듯 합니다^^.

  이 Gradient를 작성하면서 논문을 무척 많이 찾아본것 같습니다. 결국 찾기는 찾았지만 적용은 하지 못하고 그냥 구현하게 되었지만요. 그런 것을 보면서 참 많은 노력이 있었고 그로 인한 속도의 발전이 있지 않았나하는 생각이 많이 들더랍니다. 다른 분야도 마찬가지겠지요. 저도 그런 사람의 하나가 되길 기원하면서 이만 글을 줄이도록 하겠습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Programming" 분류의 다른 글

Script Interpreter - boost::spirit (0)2010/03/09
한게임 자동테트리스 Ver 0.6 (40)2008/11/15
한게임 자동테트리스 Ver 0.2 (27)2008/11/03
Read Sector From Floppy (0)2008/07/17
어제 무작정 맹글어봤던 것입니다.. (2)2008/07/16
2009/01/07 10:17 2009/01/07 10:17
TAG Gradient
받은 트랙백이 없고, 댓글 2개가 달렸습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/113

댓글을 달아 주세요

  1. kkamagui 2009/04/29 01:30  댓글주소  수정/삭제  댓글쓰기

    와우~ 후배~ 요즘은 블로깅 안하냐?
    너무 뜸해서 함 와본다 ㅋㅋ
    잘 지내고 있지?

    • 귀차니스트 2009/05/21 17:33  댓글주소  수정/삭제

      ㅋㅋ 넹.. MSN 에서 뵈었잖아용 ㅋㅋ 이캄서..
      음.. 뭐 한 1월 부터 갑자기 뭐 쫌 그렇게 됐죠 ㅋㅋ

      슬슬 다시 시작을 해야 되는데 ㅜㅜ 너무 오래 끊은듯 해용

한게임 자동테트리스 Ver 0.6

Programming 2008/11/15 00:41 귀차니스트
  음 0.2 버젼 때 이후로 다른 것을 간간히 하면서 약간씩 수정을 해봤습니다. 굳이 이 것을 100% 잘돌아가게 하여 승률이 100%에 달하게 만든다는 것에 흥미가 없다보니 정체가 될 수 밖에 없는 군요. 그리하여 0.6 버젼에서 업그레이드는 무기한 연기를 예정해보려 합니다. 사실 스피드 15레벨 까지 도달하는 것을 나름대로 달성했기 때문이랄까요.



  위 동영상은 0.6 버젼의 프로그램을 가지고 테스트한 동영상 입니다. 0.2 버젼의 동영상과 비교하면 확실히 엄청난 차이가 있음을 알 수 있습니다. 하지만 거의 95% 정상적으로 작동하는 프로그램인데 동영상을 찍다 보니 한게임 테트리스 프로세스의 처리가 늦어서 인지 키가 몇개 먹는 동영상이 보입니다. 사실 키를 먹는 것은 거의 다 수정을 했거든요^^; 그런데 동영상을 찍을 때만 저렇게 잘못 놓는 다는 것이 꽤 많다는 것은 원인을 그 쪽으로 돌릴 수 밖에 없을 것 같네요.



  위 0.3 버젼과 비교를 해보시기 바랍니다.^^. 그럼 이 것을 마지막으로 자동테트리스에 대한 포스팅을 할 일은 없을 것 같습니다. 게임 트리적인 부분이 A.I 쪽을 간단하게 구현을 하면 그다지 복잡하지도 않고 대 부분 같기 때문이죠^^. 그럼 다들 즐거운 한게임 테트리스 하시길 바래요^^. 마지막으로 댓글로 공개를 요청하셔도 공개할 일은 없습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Programming" 분류의 다른 글

Script Interpreter - boost::spirit (0)2010/03/09
Gradient에 대한 정리 (2)2009/01/07
한게임 자동테트리스 Ver 0.2 (27)2008/11/03
Read Sector From Floppy (0)2008/07/17
어제 무작정 맹글어봤던 것입니다.. (2)2008/07/16
2008/11/15 00:41 2008/11/15 00:41
트랙백은 하나, 댓글 40개가 달렸습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/110

  1. Subject: 한게임 테트리스 인공지능(AI)을 얼마나 잘 구현할 수 있을까?

    Tracked from 고니's Life 2009/09/08 00:36  삭제

    저랑 비슷한걸 해보신 분이 있어서 관심있게 보다가 저도 포스팅 해봅니다^^ 전 지금 소프트웨어 엔지니어링, 그 중에서 테스팅 분야를 연구하고 있지만 원래는 인공지능에 관심이 많았습니다(취미로서). 그래서 먼가를 자동으로 해주는 도구를 만드는 것을 좋아하고요. 예전엔 넷마블 테트리스를 자동으로 해주는(다른 말로 'XX오토'라고 이야기하는...) 프로그램을 만들어서 '컴퓨터가 얼마나 사람보다 잘 할 수 있을까?'에 대한 궁금증을 해소해 보려 하였고, 그..

댓글을 달아 주세요

  1. 현젱 2008/11/22 20:36  댓글주소  수정/삭제  댓글쓰기

    키 먹는다는 거는 동영상 탓?!

    그럼 컴터 성능이 안좋다는거네 ㄲㄲ

    • 귀차니스트 2008/11/24 21:37  댓글주소  수정/삭제

      헐.. 나의 초 특급 고 사양이라고 하기엔 쿼드가 아닌 내 컴으로 안되는건 어쩔 수 없어!!

      사실 뭐 그래픽 처리 한다고 어쩔 수 없겠찌 ㅋㅋ

  2. 김동혁 2008/11/25 01:47  댓글주소  수정/삭제  댓글쓰기

    ai좀 주실수없나요 ?

    • 귀차니스트 2008/11/26 22:51  댓글주소  수정/삭제

      아.. 코드를 바로 드리는것은 좀 그렇구요..

      AI의 기본적인 구조는 알려드릴 수 있습니다. 기본 구조는 블럭이 하단 부터 쌓이니 현재 쌓을 블럭의 Y위치를 맨 밑에서 부터 쌓을 수 있는 블럭 위치를 X 위치 하나마다 판별합니다.

      그럼 결국 하나의 블럭에 대한 경우의 수는 (가로칸 - 블럭의 가로길이) * 블럭 회전가능수 가 되겠죠. 그렇게 각각의 경우의 수에 대해서 블럭의 높이, 모양에 대해서 점수를 판별합니다.

      그 점수의 계산이 끝나면 해당 점수가 가장 높은쪽의 상태를 택하면 블럭이 쌓여야 될 곳의 위치가 결정될겁니다. 그 후의 처리는 ^^; 아시는대로 ..

  3. slayer 2008/12/02 19:16  댓글주소  수정/삭제  댓글쓰기

    언뜻 봤더니 게임가드가 붙어있는것 같던데

    키입력 메시지는 별다른 우회 없이 작동하던가요?

    • 귀차니스트 2008/12/05 19:57  댓글주소  수정/삭제

      음.. 엔플텍이 붙어있는것 같지는 않네요^^;
      제가 마지막으로 플레이한 것이 2~3주 전인지라 지금은 바뀌었을지도 모르겠습니다. 답은 예전엔 가능했습니다.

  4. 부탁인디 2008/12/04 16:48  댓글주소  수정/삭제  댓글쓰기

    저기요 엔프로텍트 뚫는방법아시나요 그리구
    이런프로그램 어케만드는지 자세히 설명좀 해주세요
    이메일로 보내주세요 ssg1423@naver.com
    부탁합니다 엔진 사용 같은 거 등등 버그들

    • 지나가다가 2008/12/05 02:29  댓글주소  수정/삭제

      C언어로 만든 프로그램이 게임가드에걸리면 프로그래머는 게임을 접어야하는 상황인겅미?

    • 귀차니스트 2008/12/05 19:58  댓글주소  수정/삭제

      프로그램을 만드는 것은 어떠한 방법으로 처리를 하던간에 조건에 의한 자료를 제작하고 자료를 바탕으로 처리로직을 만드는 것입니다. 프로그래밍에 대해서 알고 계시면 단순히 Hello world 가 아닌 여러가지 기술이 섞여 있다고 생각하시면 됩니다.

  5. 부탁인디 2008/12/05 16:17  댓글주소  수정/삭제  댓글쓰기

    그럼 없는건가요?
    엔프좀뚫어보시징

  6. 김성욱 2008/12/05 18:11  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 ^^
    웹서칭을 하다가 우연히 검색결과에서 보고 찾아왔는데
    오토 테트리스라니 신기하네요

    화면의 이미지를 얻어온다거나 명백히 키보드로 부터 들어온 입력이 아닌것에 대해서 게임에 붙어있는 핵쉴드나 게임가드 같은것에 진단이 되지 안나요?
    막지못한 것에 대한 실망이랄까? 그리고 호기심에 질문드려봅니다

    • 귀차니스트 2008/12/05 20:03  댓글주소  수정/삭제

      일단 저는 게임가드가 없을 때 했다는 것을 알려드립니다. 지금은 모르겠네요.. 게임가드 같은 것에 대해서 일반적으로 어느정도 잘 알려진 Win32 API 들은 실행이 됨과 동시에 막히게 됩니다. 물론 Native API도 일정 어느 부분은 막히는 것으로 알 고 있구요.

      저도 정확히 관계를 추론할 수는 없지만 잉카인터넷이 MS에서 제공하는 모든 부분을 알고 있다면 모든 부분에서 막을 수도 있겠지만, 경우에 따라서 막지 못하는 부분과 다 알지 못하기에 막을 수 없는 부분, 그리고 어디서나 100% 안전이란 없기에 존재하는 취약점이라는 것을 이용하면 뚫을 수야 있겠죠.

      그래서 굳이 막지 못한것이라고 해서 실망할 필요는 없습니다. 왜냐면 창과 방패가 있다고 한다면 창이 우세할 수 밖에 없으니까요. 굳이 예를 든다면 집에 보안이 철저한 문을 세워놓는다고나 할까요. 그게 없다면 그냥 도둑이 드나들겠지만 있다면 시간도 지체 되고 이런 저런 방법을 사용하게 되겠죠^^.

  7. 님아 2008/12/06 14:09  댓글주소  수정/삭제  댓글쓰기

    부탁인데요 얍카라는게임에 버그좀 만들어주세요
    버그가 게임가드때문에 막혀버렷음
    그리구 게임가드뚫는방법좀 알려주시구요
    급해요
    전 할줄아는게 만들어놓은 파일 받아서 설명서보고
    따라하는것뿐임
    엔진이나 버그좀 만들어주삼

    • 귀차니스트 2008/12/07 15:17  댓글주소  수정/삭제

      음.. 게임에 대해서 따로 일부러 오토 같은것을 만드는 짓은 하지 않습니다. 그냥그저 좋아하는 게임을 하다보니 궁금한 것도 있고 프로그래밍 적으로 궁금한 게 있어서 한 것일 뿐이죠..

      그리고 중요한 것은 그런 것을 만든다고 하여도 공개하지는 않습니다.

  8. 님아 2008/12/07 17:51  댓글주소  수정/삭제  댓글쓰기

    어떻게 그렇게 컴퓨터를 잘하죵?

    • 귀차니스트 2008/12/08 14:26  댓글주소  수정/삭제

      제가 잘하는 편은 아닙니다..
      잘하는 사람들은 세상에 많죠..

  9. 귀차니스트분에게 2008/12/08 07:53  댓글주소  수정/삭제  댓글쓰기

    저기요 얍카라는게임에 게임가드가 설치됏는데 어떻게 복사버그가
    가능한거죠~~ 여러 가지 고가 템들이 막늘어나는것같은데
    그건 어떻게하는방법이죠?

    • 귀차니스트 2008/12/08 14:30  댓글주소  수정/삭제

      글쎄요 그건 게임 만든 루틴을 조작하는 건데 그것은 게임을 뜯어본 사람만이 알겠죠.. 그리고 게임도 하나의 프로그램이고 프로그램마다, 경우에 따라 해석방법을 다 각기 달리해야 되니 정석적인 방법이 있는 것도 아니구요..

      어쨋든 중요한 것은 얘기하시는 버그나 핵은 취약점을 이용하는 것 뿐이라는 겁니다. 취약점은 단순히 컴퓨터를 할 줄 안다가 아니라 구조적인 원리까지 알면서 해야 되는거니 단순 설명으로는 끝나지 않겠죠.

  10. 흠아 - _ - 2008/12/08 14:21  댓글주소  수정/삭제  댓글쓰기

    오토프로그램으로 40라인 39등.....

    난 손으로 150등 겨우찍었는데... 난감 - _ -

    • 귀차니스트 2008/12/08 15:17  댓글주소  수정/삭제

      하하^^;;

      사실 특정목적만을 위해서 만들어진 것에는 범용적인 것이 당해낼 재간이 없듯이 프로그램은 빠르긴 하지만 사람이 할 수 있는 것은 못합니다^^;

      그래도 한게임 테트리스를 플레이 하지 않은지 꽤 오래고, 일단 프로그램 자체의 배포는 하지 않았으니 제 프로그램에 의한 게임 랭킹 문제는 생각하지 않으셔도 될거 같네요.. 다만 타 프로그램이 있다면 모르겠지만요..

  11. 강희주 2008/12/16 20:43  댓글주소  수정/삭제  댓글쓰기

    귀차니스트님 =_=
    작대기 의 고유 코드를 알수있을까요 ?
    파란색 긴막대기의 그 막대기 1개만의 코드요 .

    • 귀차니스트 2008/12/18 11:31  댓글주소  수정/삭제

      고유코드라고 하시면 어떤 것을 말씀하시는건지..
      게임 자체 메모리에서 빼내온것이 아니라 영상처리를 한 것이기 때문에 블럭 하나에 대한 코드는 제가 붙이기 나름이었습니다. 물론 원하는 것에 따라 또 다른 코드를 설정할 수도 있었구요.
      그래서 고유라는것은 있을 리가^^;

  12. 비밀방문자 2008/12/19 21:50  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 귀차니스트 2008/12/21 13:27  댓글주소  수정/삭제

      ^^; 그러셨군요.. 사실 동영상을 찍지 않았다면 3배 정도는 더 빠른데 동영상 때문에 적절히 맞춰봤습니다. 그런데 그렇게 해도 힘들것 같더군요..

  13. 비밀방문자 2009/01/07 21:04  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 귀차니스트 2009/01/08 00:08  댓글주소  수정/삭제

      글쎄요.. 프로그램이라는게 적절한 논리의 조합이다보니 방법에 대한 구현 논리만 있다면야 구현이야 하실 수 있으실 겁니다.

      하지만 코드는 어렵겠군요^^. 문제의 여지가 많다보니.. 컴퓨터 이론을 공부하시다 보면 자연스럽게 알게 될 거 같군요^^.

  14. 비밀방문자 2009/01/08 11:22  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

  15. 비밀방문자 2009/02/07 14:09  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 귀차니스트 2009/04/17 17:15  댓글주소  수정/삭제

      글쎄요.. 현 시점에서 가능할지는 모르겠네요..
      제가 테트리스를 플레이한 시간이 약 10일 정도 되고... 그 중 절반가량을 할애하여 제작한 프로그램이라 이후 동향은 잘 모르겠습니다^^..

      반응이 되지 않는다면 제가 만든 것 또한 안될거라 생각을 합니다^^..

  16. 비밀방문자 2009/04/13 03:27  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 귀차니스트 2009/04/17 17:20  댓글주소  수정/삭제

      아마 안될 가능성이 높을거 같네요^^..

      시간도 시간대로 흐른 상태고.. 여러가지 보안툴이 적용되었으리라 생각합니다. 마지막으로 플레이한 것이 약 3개월~4개월 전 쯤이라 안될 것 같군요...

      코드배포에 대해서는 걱정 안하셔도 됩니다..^^..

  17. 비밀방문자 2009/04/14 14:55  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 귀차니스트 2009/04/17 17:23  댓글주소  수정/삭제

      음... 네 시간 있을때 간혹 UVA 같은 문제를 풀기는 합니다만 문제가 발상의 전환? 같은 것으로 풀어야하다보니 저도 꽤 막히더군요..

      저도 물론 현재는 학부생입니다. 병역때문에 휴학하고 산업체에 근무하고 있지만요.. 그렇다고 잘하는 것은 아니구요..

      자동테트리스AI 는 김동혁님에 대한 댓글로 간략하게나마 추측이 가능할 듯 합니다.. 자세한 AI 자체에 대해서 토론을 원하시면 댓글을 남겨주세요~

  18. Only 2009/07/16 01:10  댓글주소  수정/삭제  댓글쓰기

    저도 AI 부분이 많이 궁금하네요

    저도 비슷하게 인공지능 테트리스를 만들어 볼려하거든요``
    (한게임에 후킹이 아니라 직접 인공지능 전용으로 하나 만들어보려구요 ㅎ)
    사전조사 하고있는데
    알고리즘이 상당히 좋은거같아 호기심을 자극하네요 ^^

    즐겨찾기 등록해두고 자주 들리겠습니다~

    • 귀차니스트 2009/08/21 19:37  댓글주소  수정/삭제

      ^^;;

      요새 글을 통 남기지 못했는데..
      댓글을 달아주셨었군요..

      음 대단한건 아니라서 그냥 한 번쯤 가끔가다 들러주셔도 충분합니다.

  19. 저기요 2009/12/10 20:35  댓글주소  수정/삭제  댓글쓰기

    자동 테트리스 어디서 다운 받나요?

    • 귀차니스트 2009/12/12 10:56  댓글주소  수정/삭제

      프로그램은 본문에 비공개로 명시 되어있습니다.

  20. 죄송하지만 2010/01/12 13:40  댓글주소  수정/삭제  댓글쓰기

    한게임 테트리스 오토는 어디서 다운받나요 ??

    • 귀차니스트 2010/01/22 04:44  댓글주소  수정/삭제

      프로그램은 공개하지 않습니다.

한게임 자동테트리스 Ver 0.2

Programming 2008/11/03 19:28 귀차니스트

  최근 집으로 돌아오는 길마다 무엇을 만들어야 할까? 이렇게 시간을 보내지 말고 무엇이라도 하나 만들어야 할텐데 라는 생각이 머릿속을 지배하더군요. 그런 와중에 저번주 수요일 집으로 돌아와서 한게임 테트리스 소식을 듣고 실행한 순간 갑자기 생각나는게 있었습니다.

  그 것은 바로 "한게임 테트리스 오토" 였죠. 물론 게임 시장에 있어서 일반적으로 퍼져있는 오토에 대한 인식만을 생각한다면 제작을 고심하여 생각해보아야 했지만, 타 프로그램같이 일반인에 공개를 하지 않고, 개인용 연습목적으로 제작해본다면 어떨까 하는 생각이 들었습니다.
  연습하고싶은 부분은 이미지 처리와 테트리스 AI 부분이었죠. 다른 부분이야 일반적으로 사용되는 C++ 언어를 사용하기 떄문에 별 다른 부분이 없었습니다. 그래서 수요일부터 일요일까지 바짝 달린결과 어느정도 썩 괜찮은 결과물이 나오더군요. 하지만 아직 에러가 많습니다ㅜㅜ



  결과는 위 동영상과 동일합니다. 썩 그렇게 좋은 AI가 아님에도 불구하고 50여초 동안은 생존하더군요. 그래도 갓 키보드 입력을 받아들였을때인 0.1 버젼에 비하면 엄청 오래 살고 있는거랍니다. 그 때는 한 5초면 죽었으니까요. 동영상을 자세히 보시면 간간히 부분부분 마다 놓지 말아야할 곳을 실수로 컴퓨터가 놓고 있습니다. 아마 이것은 프로그램 내부의 입력키 생성 부분에서의 버그이거나 키보드 입력이 먹어버리는 경우가 아닐까 라고 생각하고 있습니다. Log를 남기면서 확인 중이니 곧 잡히리라 생각합니다.^^.


  약간 개량해보니 더 오래 사는군요^^;;

  개인적으로 이 프로그램을 만들면서 비록 한게임 테트리스에 붙어서 동작하는 거라지만 나름대로 테트리스 AI에 대해서 어느정도 공부를 해본것 같네요. 아직 계산하는 요소가 2가지 밖에 되질 않아 8가지 정도 더 추가하면 90% 정도의 AI가 나오지 않을까 기대해봅니다.

추가로 40줄 빨리 없애기 모드 도전해보니 어느정도 잘 나오는군요;; 저도 깜짝 놀랬습니다.


크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Programming" 분류의 다른 글

Script Interpreter - boost::spirit (0)2010/03/09
Gradient에 대한 정리 (2)2009/01/07
한게임 자동테트리스 Ver 0.6 (40)2008/11/15
Read Sector From Floppy (0)2008/07/17
어제 무작정 맹글어봤던 것입니다.. (2)2008/07/16
2008/11/03 19:28 2008/11/03 19:28
TAG 테트리스
받은 트랙백이 없고, 댓글 27개가 달렸습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/108

댓글을 달아 주세요

  1. d 2008/11/04 09:16  댓글주소  수정/삭제  댓글쓰기

    파일점 만들어서 올려용 ;;

    • 귀차니스트 2008/11/04 14:04  댓글주소  수정/삭제

      아.. 본문에도 적었지만 실행에 관련된 바이너리 파일은 일반인에게 공개를 하지 않을 생각입니다.

      아실거라고 생각하지만 사실 이런 오토가 공개되어 실질적으로 퍼지게 된다면 플레이어를 비롯하여 게임제작사마저 타격을 입게되는 것은 당연하겠죠. 개인적인 연습목적으로 만든것이고 저도 대전에서 사용하지 않을생각이니 파일 공개하지 않는 것을 이해해주시리라 생각합니다.

  2. kkamagui 2008/11/04 12:41  댓글주소  수정/삭제  댓글쓰기

    역시 넌 짱이구나 ㅋㅋ
    쵝오 >ㅁ<;)-b

    • 귀차니스트 2008/11/04 14:04  댓글주소  수정/삭제

      ㅋㅋ 뭐 횽님에 비하면 별거 아니죠 ㅋㅋㅋ

  3. 비밀방문자 2008/11/04 13:34  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 귀차니스트 2008/11/04 20:24  댓글주소  수정/삭제

      음.. 그 것은 왜 물으시는지 궁금하군요. 단순히 그 것때문이라는 이유라면 따로 말씀을 드릴 이유가 없을 것 같습니다. 아니면 목적에 대한 명확한 이유를 설명 부탁드립니다.

  4. 굿데이 2008/11/06 19:50  댓글주소  수정/삭제  댓글쓰기

    대단한데
    보면서 감탄사만 나오네 ㅋㅋ

    • 귀차니스트 2008/11/08 11:54  댓글주소  수정/삭제

      그런가 ㅋㅋ

  5. hks9999 2008/11/07 06:56  댓글주소  수정/삭제  댓글쓰기

    햐 멋지네요~ ;-)
    대단대단
    API후킹으로 하는거에요?

    • 귀차니스트 2008/11/08 11:54  댓글주소  수정/삭제

      이미지 프로세싱 + 테트리스 AI 작성입니다^^.

  6. 현젱 2008/11/07 16:10  댓글주소  수정/삭제  댓글쓰기

    스코어 함수를 좀 더 잘 작성해보지?!

    생각보다 삽질하는 부분이 좀 있네~ㅋ

    수를 6수나 볼 수 있으면 Optimal 하게 갈 거 같은데..

    Gaming Tree쪽으로 계속 살펴보삼ㅋㅋ

    • 귀차니스트 2008/11/08 11:55  댓글주소  수정/삭제

      ㅋㅋ 이거 대충 맹글어서 공격하거나 할 때 블럭이 좀 늦게 나오면 키가 먹어 ㅋㅋ 스코어는 조금 갱신해서 삽질은 안하지만.. 키 먹는게 젤 문제다 ㅋㅋ

  7. ddd 2008/11/08 17:36  댓글주소  수정/삭제  댓글쓰기

    다운받을수잇게해주셈

    • 귀차니스트 2008/11/13 14:31  댓글주소  수정/삭제

      공개에 대한 여부는 첫번째 댓글의 답변이나 본문에 명시 되어있습니다^^.

  8. 비밀방문자 2008/11/15 00:22  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 귀차니스트 2008/11/15 00:29  댓글주소  수정/삭제

      이 부분은 본문에 명시되어 있습니다^^.
      이를 벗어나질 않을 생각입니다.

  9. 뉴올리언스 2008/11/16 11:26  댓글주소  수정/삭제  댓글쓰기

    고생은하셨다만..
    벌써 프로그램 만들어져서 배포시작 되었답니다.
    조만간 엄청 퍼질듯-_-;;
    여튼 개나소나 이젠 누구나가 다만들어서 배포하는구나 에휴..

    • 귀차니스트 2008/11/16 13:31  댓글주소  수정/삭제

      .. 그렇군요;;..
      사실 뭐 저 혼자만 이런 것을 만들 수 있는 것은 아니고..
      그런 부분은 개인적인 판단에 맡기는 부분이라서 다른 분을 강제하거나 그럴 수는 없습니다..

      다만 그런 현실이 안타깝기는 하네요..

  10. 부탁이오 2008/12/03 16:23  댓글주소  수정/삭제  댓글쓰기

    하는방법좀 가르쳐주세요 혹시 엔프로텍트 뚫는방법아시나요?
    밑에 붙어주삼
    그리고 그런핵이나 오토는 어케만드는거임?
    답변 부탇~~

    • 귀차니스트 2008/12/05 19:56  댓글주소  수정/삭제

      엔플텍은 현재 뚫지 않았습니다.
      플레이 안한지 한 2~3주가 되어가는데.. 엔플텍이 붙는것으로 바뀌었나보군요.. 핵은 주로 메모리 조작으로 제작하고 오토는 사용자의 입력을 프로그램적으로 조건에 의한 판단을 결정하여 입력을 자동으로 내리는 것입니다.

  11. 비밀방문자 2008/12/18 12:15  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

    • 귀차니스트 2008/12/18 12:58  댓글주소  수정/삭제

      무슨목적인지 알려주셨다면 고려해봤겠으나 그냥 그러기엔 무리가 있군요^^. 아니면 목적에 대해서 설명 부탁 드리겠습니다.

  12. 비밀방문자 2008/12/19 13:34  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

  13. difl 2008/12/28 20:14  댓글주소  수정/삭제  댓글쓰기

    다운어덯게 받아요

    • 귀차니스트 2009/01/07 09:44  댓글주소  수정/삭제

      본문에 배포는 하지 않는다고 적어놓았습니다^^.

  14. 비밀방문자 2009/01/13 22:26  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

  15. 비밀방문자 2009/01/25 18:23  댓글주소  수정/삭제  댓글쓰기

    관리자만 볼 수 있는 댓글입니다.

Read Sector From Floppy

Programming 2008/07/17 22:53 귀차니스트
  음 일단 진행 됬던건.. BIOS가 처음 POST 과정을 끝내고 BIOS에서 지정된 순서로 부팅 디스크를 검색하여 Magic Sign에 해당하는 첫 번째 디스크의 첫 번째 섹터를 7C00h 번지로 올려준다는 것을 전제로 간단한 Hellow World 출력까지 진행했었기에, 어제 자기전까지 섹터 읽는 것을 구현을 해봤죠. 뭐 그다지 복잡한 것은 아니지만 괜히 삽질하고 있었더군요.

Sector.asm (Language : asm)
  1. [org 7C00h]
  2.  
  3. EntryPoint:
  4.     mov ax, 0000h
  5.     mov es, ax
  6.     mov ax, 0201h
  7.     mov cx, 0002h
  8.     mov dx, 0000h
  9.     mov bx, 7E00h
  10.     int 13h
  11.  
  12.     jmp PrintPoint
  13.  
  14. times 510-($-$$)    db 0
  15.     dw 0AA55h
  16.  
  17. %macro PRINT 1
  18.     pop dx
  19.     mov di, %1
  20.  
  21.     mov ah, 0Eh
  22.     xor bx, bx
  23.     mov cx, 14
  24.  
  25. printloop:
  26.     mov al, byte[di]
  27.     int 10h
  28.     inc di
  29.     loop printloop
  30. %endmacro
  31.  
  32. PrintPoint:
  33.     mov ax, 1301h
  34.     mov bx, 0007h
  35.     mov cx, 21
  36.     mov dh, 0
  37.     mov dl, 0
  38.     mov bp, MSGLOAD
  39.     int 10h
  40.  
  41.     ;PRINT MSGLOAD
  42.  
  43. Loading:
  44.     jmp Loading
  45.  
  46. MSGLOAD equ $
  47.     db "Message from Sector 2"

  일단 예전과는 다르게 PrintPoint로 EntryPoint를 변경한 뒤, 512바이트 뒤로 명령어 데이터를 옮겼습니다. 왜 이렇게 했냐하면 플로피디스크에서야 잘 모르겠지만 나중에 하드디스크 MBR에 이미지를 Write하여 부팅을 하려고 할 때, 파티션 데이터에 대한 처리를 쉽게 허용하기 위해서 였죠.
  기본적으로 한 섹터는 512바이트이기 때문에, 첫 번째 512바이트는 7C00h번지로 올라가게 되고, 512 바이트 뒤의 데이터는 플로피 같은 디스크 매체에 그대로 남아있게 됩니다. 별도의 로딩과정이 존재하지 않게 되죠. 하지만 512바이트로는 뭐 콩을 구워먹을래도 할 수 있는 일이 없기 때문에 디스크 매체에서 데이터를 읽어들여야 합니다.
  그래서 INT13H의 02H인터럽트를 통하여 2번째 섹터를 읽어 7C00h + 512바이트 주소인 7E00h번지로 로딩을 하게 설정합니다. 기본적인 인자값은 위키피디아에 존재하므로 그 부분을 감안하여 본 뒤 작성하시면 됩니다. 맨 처음 [ORG 7C00h]라는 Directive로 해당 명령어의 시작 지점이 7C00h라는 것을 알려주었기 때문에 생성되는 Label 및 변수에 대해서 주소값은 7C00h를 상대값으로 가지게 됩니다.
  결국 컨트롤이 쉽게 된달까요. 뭐 어찌되었던 512바이트 이후에 예전에 작성했던 코드를 밀어넣고 INT13H를 호출한 후 해당 메모리 주소로 점프를 합니다. 그럼 섹터가 로딩되기 전엔 쓰레기 값이 들어있었을 메모리에 제대로 된 명령어들이 들어있게 되고, 출력 명령어를 잘 수행하게 되죠. 다만 여기서 중요한 것은 02H에 해당하는 Sector Address는 1이 MBR이고 2가 두 번째 섹터더군요. 너무나 인덱스에서 0에 익숙해져 있는 관계로 1을 적었다가 왜 안되지 했었습니다.

Trash.asm (Language : asm)
  1. [org 7C00h]
  2.  
  3. EntryPoint:
  4.     mov ax, 0000h
  5.     mov ds, ax
  6.     mov si, DAPStruture
  7.     mov ah, 42h
  8.     mov dl, 00h
  9.     int 13h
  10.  
  11.     jmp PrintPoint
  12.  
  13. DAPStruture:
  14.     db 10h      ;sizeof(DAP)
  15.     db 00h      ;zero
  16.     db 01h      ;read sector count
  17.     db 00h      ;zero
  18.     dw 0000h        ;segment
  19.     dw 7E00h        ;offset
  20.     dq 0000000000000001h    ;number of sector
  21.  
  22. times 510-($-$$)    db 0
  23.     dw 0AA55h
  24.  
  25. %macro PRINT 1
  26.     pop dx
  27.     mov di, %1
  28.  
  29.     mov ah, 0Eh
  30.     xor bx, bx
  31.     mov cx, 14
  32.  
  33. printloop:
  34.     mov al, byte[di]
  35.     int 10h
  36.     inc di
  37.     loop printloop
  38. %endmacro
  39.  
  40. PrintPoint:
  41.     mov ax, 1301h
  42.     mov bx, 0007h
  43.     mov cx, 21
  44.     mov dh, 0
  45.     mov dl, 0
  46.     mov bp, MSGLOAD
  47.     int 10h
  48.  
  49.     ;PRINT MSGLOAD
  50.  
  51. Loading:
  52.     jmp Loading
  53.  
  54. MSGLOAD equ $
  55.     db "Message from Sector 2"

  별개로 이 것은 위키피디아를 읽다가 42H에 해당하는 기능이 읽어보니 훨씬 좋은 기능을 지원하길래 혹시나 하고 작성해봤던 코드입니다. 액세스할 수 있는 주소가 엄청 크기 때문에 원하는 곳을 모두 액세스 할 수 있었는데, 어제 테스트해본 결과론 죽어라 해도 안되더군요. 결국 오늘 까마구 횽님과 대화하다가 다른 문서에서도 플로피에 대한 언급이 없었다고, 이 것은 아무래도 하드디스크에서만 지원하는 것 같다는 결론을 얻게 되었습니다.
  그럼 오늘은 시간이 될 지는 모르겠습니다만 GDT, IDT, LDT에 대해서 자료를 보고 한 번 설정을 해봐야 겠군요^^. 뭐 어떻게 될지는 잘 모르겠지만 잘 되리라 믿습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Programming" 분류의 다른 글

Script Interpreter - boost::spirit (0)2010/03/09
Gradient에 대한 정리 (2)2009/01/07
한게임 자동테트리스 Ver 0.6 (40)2008/11/15
한게임 자동테트리스 Ver 0.2 (27)2008/11/03
어제 무작정 맹글어봤던 것입니다.. (2)2008/07/16
2008/07/17 22:53 2008/07/17 22:53
TAG Sector
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/93

댓글을 달아 주세요

◀ 이전페이지 1 2 3 4 5 다음페이지 ▶

블로그 이미지
First Sensation 귀차니스트
rss
  • 관리자
  • 글쓰기

카테고리

  • 전체 (118)
    • Computer (3)
    • Language (14)
    • Reverse Engineering (1)
    • Algorithm (9)
    • TopCoder (3)
    • Library (2)
    • Programming (21)
    • Programming Tip (9)
    • PSP-Programming (10)
    • Program (5)
    • Small Talk (33)
    • Document (4)
    • OS Develope (4)

최근에 올라온 글

  • Script Interpreter - b....
  • VirtualHttpServer - 가.... (2)
  • 음.. 여러가지 일이 있.... (2)
  • 어후.. 드디어 인터럽트....
  • Kernel Image에 어이없....

최근에 달린 댓글

  • 헠 ㅋ 다음에도 들러주세용 ㅋㅋ. 귀차니스트 03/09
  • ㅎㅎ RSS로 첨 온 글이네.ㅋ. 당구리 02/22
  • 음.. 한글화 파일 0.5 버젼은.... 귀차니스트 02/22
  • 관리자만 볼 수 있는 댓글입.... 비밀방문자 01/30
  • 어떤 의미이신지 잘 모르겠네.... 귀차니스트 01/23

달력

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

링크

  • kkamagui 프로그래밍 세상.
  • runner님의 이글루.
  • 당구리의 마굿간.
  • 동우fly.
  • 류광의 번역 이야기.
  • 서광열의 프로그래밍 언....
  • 준호씨의 블로그.
  • 최익필의 이름없는 블로그.
  • 위키는 귀차니즘.

최근에 받은 트랙백

  • 한게임 테트리스 인공지.... 고니's Life 2009
  • ACM 706 (Uva ID) : LCD.... 알고리즘 트레이닝 : Oh... 2009
  • 문제 4 : LCD 디스플레.... 최익필의 이름없는 블로그 2009
  • 궁극의 예외처리. 이름없는 블로그 2008
  • Maximum sum. 티스토리 지점 2008

글 보관함

  • 2010/03 (1)
  • 2010/02 (1)
  • 2010/01 (1)
  • 2009/12 (3)
  • 2009/08 (1)

태그목록

  • 어쌔신 크리드
  • 인코딩
  • Chaos
  • Array
  • 개발
  • C#
  • 후위연산
  • OpenMP
  • 64bit
  • 디자인
  • 쉘
  • TShell
  • Reference
  • 멀티맵
  • multimap
  • FTP
  • 계발
  • 타이틀
  • 파티션
  • Textcube
  • 플러그인
  • RCW
  • HDTV
  • 수학
  • 키보드
  • GDI+
  • TTF
  • 클라리넷
  • istream_iterator
  • 재귀적합성

지역로그 : 태그 : 방명록 : 관리자 : 글쓰기
귀차니스트’s Blog is powered by Textcube 1.7.5 : Risoluto / Designed by DesignNia.net