Sablog Models/자작자작 9

Notepad2 패치에 발을 담그다 - (2) Mark Occurrences, anywhere for non-ASCII

Notepad2 패치에 발을 담그다 - (1) Mark Occurrences, Case insensitively http://un-i.tistory.com/entry/Notepad2-Custom-Patch-1-Mark-Occurrences-Case-insensitively 위 링크에 이어지는 글. 위의 패치가 적용되었다고 가정한다. 주의: 이 방법은 ANSI나 UTF-8 인코딩에서만 정상적으로 작동하는 것으로 확인되었다. UCS-16에서도 한글이나 가나 문자에는 잘 적용되지만, 특정 한자에는 적용되지 않을 수 있다. Mark Occurrences 기능은 원래 대소문자가 일치하는 전체 단어에 대해서만 강조하게 되어 있다. 이 중 대소문자 일치 여부를 메뉴에서 선택하게 한 것이 패치 (1)이다. 메뉴를 이용..

Notepad2 패치에 발을 담그다 - (1) Mark Occurrences, Case insensitively

블루앤라이브 님의 Notepad2 4.2.25 패치 중 Notepad2-mod에서 차용된 것이 있으니, Notepad2 4.2.25 패치 준비#4: Mark Occurrences 기능 추가 링크된 블로그 글에도 있다시피, 다음과 같이 선택된 부분과 일치하는 단어를 강조해 주는 기능이다. (Notepad2 4,2,25 original w/ Scintilla 2.25 + 'Mark Occurrences' original) 이 기능을 조금 바꾸어, 아래와 같이 대소문자에 무관하게 동작할 수 있도록 했다. 어셈블리어 소스 코드라든지, 같은 단어가 대소문자를 달리해 나타나는 보통의 글 등에서 쓸 수 있다.물론 메뉴에서 적용 여부를 선택 가능하며, 기본값은 대소문자 구분이다. 참고로, 대부분의 언어에서 식별자는 대..

환타 오목 게임 재구성: 최종본.

지환태 님의 오목 게임 소스를 처음 접한 것은 올해 중순이었을 겁니다. 오목을 만들어 보겠다는 생각 자체를 하지 않았기 때문에 당연히 소스에 관심이 갔고, 소스 자체가 그다지 깔끔하지 못해서 리팩토링(refactoring)을 해 보고 싶었습니다. (환타[지환태] 님께서도 C언어를 배운지 얼마 안 되었을 때 만들었다고 고백하셨습니다.) 처음엔 허락도 받지 않고 시작한 재구성인데 환타 님께서 관심을 가져 주셨으며, 다섯 번에 걸친 재구성(R1, R2, R3, R4, R5)과 추가 수정으로, 나름 깔끔한 코드를 만들어 봤습니다. 아래가 드디어 최종본입니다. 제가 만든 코드는 하나의 메인 C 파일과 두 헤더 H 파일로 이루어져 있습니다. 지난번 재구성에 비해 소스와 파일명이 아주 약간 달라졌습니다. #inclu..

환타 오목 게임 재구성. (5)

드디어 check()를 줄일 아이디어를 구체화시켰습니다.-_- 현재 방식 그대로라면 모듈로 분리한다 해도 거의 아무런 차이가 없으므로, 아예 검사 방식 자체를 바꾸려고 했습니다만 그게 잘 안 되고 있었습니다. 뻘소리를 좀 하자면 오늘은 2010 수능 D-day이면서 2011 수능 D-364 즉 52주... 어차피 블로깅이 많이 줄었지만 앞으로 1년간 거의 잠수 탈 것 같습니다. 새로운 검사 방식을 소개합니다. 1. 검사 방식에 있어서 생긴 차이는 아닙니다만, 일단 check()는 x와 y 인자만 받습니다. turn 인자가 필요한데, (x, y) 인자를 정상적으로 받았다고 가정하면, board[x][y]가 turn 인자와 같습니다. 즉, int check(int x, int y, int turn) { in..

C 언어로 .cdic 파일을 xml로 만드는 프로그램 만드는 중.

제가 스텔로라는 카페에서 활동 중인데, 쉽게 말해서(?) 언어를 창작하는 곳입니다. 제가 사실상 (매니저 빼면) 최초 멤버인데다 가장 꾸준해서-_- 활동 회원들을 주도하고 있습니다. 그곳에 최근에 전파되어 온 프로그램 중에서 ConlangDictionary(0.2)라는 게 있는데, 처음에 Zompist.com의 한 사용자가 만들어 올렸다고 하며 소스도 공개되어 있습니다. 굳이 인공 언어(Conlang, Constructed Language)를 위한 사전은 아니지만... 언어의 바닥이라고 할 수 있는 음성과 어휘를 파일에 관리해 주는 어플리케이션입니다. 인코딩 포맷을 자동으로(윈도는 US-ASCII 소위 ANSI로..-_-) 결정해 버려서, 덕분에 몇 가지 발음 기호들(가장 기본적인 ɸ나 ŋ마저도!!)이 ..

환타 오목 게임 재구성. (4)

이 코드를 리팩토링하기 시작한 후로 상당히 많은 시간이 흘렀는데.... 제대로 된 개선은 한 적이 없다. 미쳤구나. 시간이 많던 방학 동안에는 아예 안 건드렸다. 원래 check()를 바꿔 보려고 했습니다만 더 최적화시키기는 어려워 보입니다.-_-;; 대신에 move()의 길이를 좀 더 줄여 보도록 하겠습니다. /* five_in_a_row.h * by ZFanta & UNique */ #ifndef FIVE_IN_A_ROW #define FIVE_IN_A_ROW #include "tool.h" #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #define ENTER 13 #define ESC 27 #define BOARD_SIZE 19 i..

환타 오목 게임 재구성. (3)

일단 지난 번에 제가 바꿔 놓은 코드에 좀 문제가 있습니다. 누가 이겼는지 안 나오더군요.. 잘 되더니 왜 그러지;; 뭐 좀 바꿨더니 다시 됩니다만. /* five_in_a_row.h * by ZFanta & UNique */ #ifndef FIVE_IN_A_ROW #define FIVE_IN_A_ROW #include "tool.h" #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #define ENTER 13 #define ESC 27 #define BOARD_SIZE 19 int x = 0, y = 0; int oldx = 0, oldy = 0; int board[BOARD_SIZE][BOARD_SIZE]; int turn = 1; c..

환타 오목 게임 재구성. (2)

지난번 글에서는 move() 함수는 'move'답게 만들고 다른 함수가 move()를 반복하여 한 판을 조정하여, main()에서는 판을 반복하게 했습니다. 물론 제가 five_in_a_row()에 단 주석과 약간 다릅니다. 제 주석에 따르면 플레이어가 재경기를 원할 때 재경기를 시켜 줘야 합니다. 게다가 원래 게임과도 약간 달라져 버렸지요. 그.러.나. 그 점은 미뤄 두고, 일단 다른 부분을 시작하도록 하죠. (-_-ㅗ;;) 이번에는 판을 그리는 부분을 바꾸어 보겠습니다. switch-case 부분이 너무 길어서 저 내부를 한 함수로 빼낼 수 있으면 좋겠군요. #define BOARD_SIZE 19 void board_write(int x, int y) { x *= 2; gotoxy(x, y); if ..

환타 오목 게임 재구성. (1)

지환태 님의 미니홈피에서 가져온 오목 게임입니다. 상당히 끌려서 말입니다-_-; 도와드리지 않고는 못 배기겠더군요.(?) 일단 아래는 원본. /* http://zfanta.com/entry/C언어로-오목만들기-5-마지막 * 이 오픈 소스 코드의 저작권은 지환태 님에게 있습니다. */ #include #include #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #define ENTER 13 int x=0,y=0; int oldx=0,oldy=0; int board[38][19]; int turn=1; char who[3][3]={"","흑","백"}; char stone[3][3]={"","○","●"}; void gotoxy(int, i..