2010. 1. 4. 02:01


 *실행파일 재 업로드.(소스도 재 업로드)
게임 쪽 버그와 한/영 자동 변경 부분을 수정하였습니다.
압축 푸실 때 반드시 \settings 폴더와 \wav 폴더도 실행파일과 같은 폴더에
압축풀어주셔야 원활하게 실행됩니다. (Window XP가 아닌 경우 .NET Framework이 설치되어 있어야 정상적으로 동작합니다.)
 
*버그 수정사항
아이템 상태변화 체크해서 작동 안 하게(done)
Bomb Item(반경 변경, done)
타자게임 GameOver 시 textBox enable false(done)
단문연습, 장문연습, 타자게임 한/영 모드 변환(done)
게임 중 메뉴 전환시 timer 중지(done)
게임 다시 하기. (done)
게임 중 포즈 기능(done)

------------------------------------------------------------------------------------

장장 6개월이 걸렸다. ㅠ.ㅠ
C#을 공부하면서 처음으로 프로그램 다운 프로그램을 만들어 보겠다고 시작한 것이 타자 프로그램이었다.

처음은 단문연습을 위한 기본이 되는 TextBox를 만들어 입력을 받아서 Keyboard Event 들을 처리하는 함수들을
Test하는데 많은 시간을 들였다. 영문은 쉬웠는데 문제는 역시나 한글이었다. 조합형이 뭔지 완성형이 뭔지도 모르는
상황에서 한글입력을 원활히 받기 위한 무언가가 필요했다.

기본적으로 영문은 치는대로 입력을 받을 수 있는데 반해 한글은 조합되기를 기다려 다음글자로 넘어가는지라 Event 를
처리하기 위해서는 KeyUp/KeyDown으로는 안 되고 KeyPressed Event를 써야 한다. 이것을 확인하는데 2주가 걸렸다.
(띄엄띄엄 만지다 보니 막히면 덮어놓고 생각날때 꺼내보느라 더 시간이 오래 걸린 듯 하다.)

어느덧 2개월이 지나고 그 간에 샛길로 새서 한글 자, 모 분리하는 방법에 대한 것도 실험에 들어가고 소스보고 테스트하고 하는데 시간이 지나갔다.

글쇠연습부분을 만지기 시작했다. 자판을 LeftTop, MiddleTop, RightTop 이런 식으로 9개로 분리를 하고,
각 KeyBlock에 대해 한 글자 반복, 순차반복, 조합반복 등의 내용으로 구성을 했다. 나중에 마무리단계에서 밝혀졌지만
영문에선 별 중요하지도 않던 것이 또 한글에서 발목을 잡았다.

예를 들면, 'ㅅ'과 'ㅛ'는 같은 KeyBlock에 속해있지만, TextBox에서 입력은 '쇼'로 입력되기 때문에 ㅅㅛ 를 연습하려면
따로 분리시켜서 입력받을 수 있어야 한다는 것. 약간 다른 문제로 'ㄱㅅ'를 'ㄳ'로 입력받으면 안된다는 것 등의 문제가
나를 괴롭혔다. 결국 마무리 단계에서 이를 지원하지 말자는 황당한 결론을 내 버리고 한 문자 글쇠연습만 하는 것으로 합리화를 시켜버렸다. (이 걸 놓고 계속 씨름하다가는 프로그램이 네버엔딩이 될 것 같았고, 무엇보다 새해가 되기전에
마무리해야 된다는 압박감이 들었다.)

기본적인 타자연습 부분이 한 축이었다면, 또 한가지 큰 축은 타자게임이었다.
게임이랄 것도 없지만 너무나 밋밋하지 않기 위해서 약간의 애니메이션 다운 모습을 보이려니 시간이 괘 걸린거 같다.

먼저 워드리스트 만들기.
단어 리스트로부터 화면에 배치시키는 작업에 Collision Detection 따위가 들어갈 줄은 미처 생각지 못한 부분이었다.
첨에 단어들을 Random으로 발생시키니 마구 겹쳐버리지 않았던가!
단어들을 순차적으로 나오게 하고 해당 단어를 Typing하면 사라지게 한 다음에는 무언가 Effect가 필요했다.
단어를 치면 바로 없어지는게 아니라 별이 발사되고, 반짝이 단어는 폭탄이 되거나 독약이 되거나 하는 등의 Effect를
구현하는 부분이 처음인지라 시간이 걸렸다.

마지막으로 색깔을 입히는 부분에서 또 한 달 가량이 소요됐다.
각 화면을 정리하고 메인화면부터 각각의 화면에 어울리는 이미지를 입히고 아이콘을 배치하는 부분은 내가 잘 할수 있는 부분도 아닌지라 노가다성 작업이 주를 이뤘다. 특히 게임과 문장을 Clear했을 때 나는 Wav 파일을 찾기 위해서 내가
한 노력을 내가 생각해도 눈물겨울 정도다. 구글링으로 공짜 wav file들을 찾아서 하나하나 들어보고 다음까페에 가입하여 wav file set을 받아서 천가지 사운드를 일일히 확인해 보고 선별하고(마음에 드는 효과음을 찾는 것이 이렇게 힘든
줄 몰랐다.)하는 작업이 필요했다.

아이콘은 iconspedia 에서 꽤 근사하고 멋진 아이콘들을 찾을 수 있었다. 메인 화면 디자인도 처음에는 아이스링크였으나 아이콘들을 배치하다가 깔끔한 방향으로 변경되었다. 머리 속에 처음에 그린 것을 표현하는 것이 상당히 힘들다.;;
또 한가지 어려웠던 것은 사운드를 비동기적으로 재생하는 것이었다. c#에서 재공하는 함수들로는 구현이 잘 안되어서
WinAPI 제공함수를 사용했다.

어찌됐든 c#으로 만든 첫번재 프로그램은 이렇게 탄생됐다. 아직 beta 버전으로 밖에 소개할 수 없지만,
나중에 ? 시간이 허락한다면 정식 버전으로 만들어 보고 싶다.

첨부로 실행 프로그램과 소스파일을 올린다.
날카로운 지적 대 환영이다.









Posted by Actruce
Cocoa Programming for MAC OS X 라는 책으로 문법 사항을 공부중입니다.
진도가 팍팍 나가지는 못하고;; 찔끔찔끔 이런 것도 있네 하면서 나가고 있습니다.

먼저 이번 장의 주제는 alloc 과 init 입니다. 그리고 NSObject의 isa에 관한 것입니다.
XCode의 방대한 메뉴얼에 금새 질려 버렸는데, 마음을 다 잡고 모르는 것이 있으면 성급하지 않게 익히며 나가
보려고 하고 있습니다.

초기화하는 거겠지라고 생각했는데 역시 C에 대해서 잘 모르니 개념적으로 헷갈리는 부분이 많아서 한번 정리하고
넘어가는 것이 좋을 거 같습니다.

1. alloc : 어느 레퍼런스에서  malloc 기능을 수행한다고 나와있는데  malloc 이라기 보단 생성자에 가깝습니다.
Objective-C 문법은

Object *obj;
obj = [Object alloc];
형태입니다.

2. init : XCode Help를 찾아보면 alloc과 같이 쓰이며, alloc 대신 자식 클래스에서 override 해서 사용하는 용도로
쓰이며, 단순히 init을 사용할 경우, self를 리턴한다고 되어 있습니다. 제가 이해하기로는 alloc과 달리 객체 instance를
초기화하기 위한 용도로 Open해 놓은 기능이라고 생각합니다.

alloc과 init을 보통은 같은 줄에 사용하여,

Object *obj = [[Object alloc] init];
과 같이 사용한다고 합니다.

초기화 관련해서는 추후 사례들이 생기면 덧 붙이도록 하겠습니다.

3. isa
XCode Help의 정의를 그대로 인용하면

The isa pointer, as the name suggests, points to the object’s class, which is an object in its own right (see Figure 2-1) and is compiled from the class definition. The class object maintains a dispatch table consisting essentially of pointers to the methods it implements; it also holds a pointer to its superclass, which has its own dispatch table and superclass pointer. Through this chain of references, an object has access to the method implementations of its class and all its superclasses (as well as all inherited public and protected instance variables). The isa pointer is critical to the message-dispatch mechanism and to the dynamism of Cocoa objects.

일단  isa는  pointer다. is a 라고 생각하면, 객체를 정의하는 pointer?
아직 개념이 잡히질 않는다.

naver 를 검색해봤다.

http://blog.naver.com/semigifn?Redirect=Log&logNo=10627140

에서 다음과 같은 해설을 찾을 수 있었다.

"모든 사용가능한 오브젝트는 isa라는 인스턴스 변수를 가지는데 이것은 오브젝트의 클래스(클래스 오브젝트 또는 그냥 클래스라고 지칭한다. - 소스코드에서의 클래스를 말한는것과는 조금 다르다)를 알려준다. 이것은 런타임 시스템에서 각각의 오브젝트가 무엇으로부터 인스턴스화 되었는지 알려주는 역할을 한다. 이것으로 실행시간에 다이나믹 타이핑을 지원한다."
[출처] Objective-C 기초|작성자 semigifn

Cocoa Programming 책에서는 
"isa는 객제를 생성하는 클래스 구조체를 가리키는 포인터로, ...
 isa가 가리키는 클래스 구조체에는 클래스의 인스턴스 변수 유형과 이름, 그리고 클래스 메서드들의 구현이 들어있으며,
 또한 수퍼클래스의 클래스 구조체를 가리키는 포인터도 있다. "

라고 되어 있다. 내가 해석하기로 NSObject를 상속받는 서브 클래스는 isa 를 인스턴스 변수로 가지고 isa 가 이 객체의 Type를 표현하는 클래스 구조체를 포인트 한다. 이 클래스 구조체를 통해서 인스턴스 변수 유형과 이름 클래스 메서드의
구현, 그리고 수퍼클래스를 지칭하는 포인터에 접근할 수 있다고 생각한다.

*여기서 잠깐.
클래스 메서드는 무엇이고, 인스턴스 메서드는 무엇인가?
일단 이렇게 이해 하겠다.

클래스 메서드 : 클래스의 인스턴스화 없이 실행되는 메서드
인스턴스 메서드 : 반드시 인스턴스화된 객체에서 실행되는 메서드

이건 뭐  Static 이냐 Non-Static 과 차이가 없지 않은가? 흠흠...;;

Posted by Actruce
Screen Shot 기능을 알고 난 뒤 넘 재밌어서, 마구 찍어본 Austin Power Gold Member Intro 사진들입니다.
정말 영국식 섹스 코미디의 전형인 그래도 재밌는 영화로 기억됩니다. ㅋㅋ 비욘세도 나오죠.


Posted by Actruce
스크린 샷 기능이 신기해서 divX로 "Austin Power Gold Member" 를 재생하면서, 스크린샷을 막 찍어뒀습니다.
스크린 샷이 기본으로 DeskTop에 저장되어 바탕화면이 지저분 해  지는 줄도 모르고 말이죠;;
(참고로 스크린 샷은 Shift + Command + 3 입니다.)

오늘까지 신나게 스크린샷을 찍어봤는데,  데스크 탑이 스크린 샷으로 꽉차서 다른 폴더로 이미지를 이동하든지
해야겠더군요;;


Finder를 실행시키고, 해당 이미지 파일을 Scan Image 폴더 안의 Austin Power 폴더에 담으려 잘라내기를 시도 ㅠ.ㅠ
했습니다. 어떻게 됐냐구요? Cut menu가 활성화 되지 않았습니다.

 <Cut 이 비활성화 상태>



무슨 이유에서 일까 맥쓰사에 검색을 해 보았습니다. Command 버튼을 누르고 Drag and Drop을 하랍니다.
근데 Drag and Drop을 시도하고 싶은데, Finder 창 두개를 열거나 윈도우 처럼 폴더 트리 형태로 여는 방법을
모르겠습니다. 그래도 다시 시도해 봤습니다.

ㅎㅎ 두 손가락 다 사용해서 간신히 MyFolder >> Picture >> Scan Image >> DivX(Austin Power)
폴더에 Drag and Drop에 성공하였습니다. 휴.~~


하학;;
근데 복사 + 이동 이었습니다. 잘라내기는 여전히 안 되는 걸까요?
제가 실수를 했나 봅니다. Command버튼을 제대로 안 누르고 Drag and Drop 을 해 버렸네요;;

다시 Folder 를 만들고 시도해 보았습니다. 이번엔 성공했네요. ^^
창 최대화를 안 하니 다른 Finder창으로 좀 쉽게 드래그 할 수 있었습니다. 짝짝...




이제야 파일 옮기기를 조금 더 사람답게^^ 사용할 수 있겠네요...
근데 스크린 샷이란 놈이 항상 DeskTop 폴더 말고 다른 지정된 폴더에 떨어지게 하는 방법은 없을까요?
다시 방법을 찾아봅니다. ㅠ.ㅠ

맥쓰사 hax4n 님에 따르면

"터미널에서
defaults write com.apple.screencapture location /Users/Kim/Downloads/Snapshot
굵은 부분을 원하는 위치로 바꾸시면 됩니다."

라고 합니다. 근데 터미널이라는 건 또 어떻게 여나요?

일단 터미널이 먼가 하고 봤더니, 예전 잡스 형님이 nextstep을 만들 때 썼던 unit shell 환경이란다. 먼지 잘 모르면서
말하기에 여기서 접고, 터미널 실행은 spotlight에서 terminal이라고 치면 telnet 화면 같은 것이 떴다.
위에 까페 글처럼 굷은 부분만 폴더 Path로 바꾸고, 엔터!

제글쓴, 바뀌긴 멀... 혹시 몰라서 로그 오프하고 다시 들어가 본다. 임시저장!
이런, 매직이 일어났다 봅니다. 설정 적용 성공!


Finder 에서 잘라내기 기능과 스크린 샷 폴더 변경까지, 많은 것을 배웠습니다.^^









'Mac' 카테고리의 다른 글

MacBook 과 친해지길 바래!~~  (3) 2009.12.19
MacBook White 개봉기  (0) 2009.12.19
Posted by Actruce
맥북이 도착해서 좋아라 하고 있었다. 근데 화면만 덩그러니 있는데, 폴더 탐색도 어떻게 하는지 모르겠고,
어떻게 활용할 줄 모르는 어린아이가 된 기분이었다.

아침에 결혼식 간다고 머리 만지고 맥북 앞에 앉았다. 할 줄 아는게 없으니 PhotoBooth에 가서 셀카찍기 놀이나
실컷했다. 거울 샷도 있는데 차마 올리지는 못하겠다.;; 기회가 되면 올리리...

인터넷에라도 좀 물어가면서 쓰고 싶어서 인터넷 연결을 하려는데 이런 ㅆ... 못 잡는데 황당한건 네트웍 설정엘
들어가도 DHCP, BootP, PPPoE설정 중 선택하라는데 찍감으로 BootP 는 아닌거 같고;; PPPoE도 암호 물어보는 걸로
봐서 아닌거 같다. 그럼 DHCP 밖에 없다는 결론?

DHCP사용으로 해 놓고 상세메뉴 들어가면 절대 자동으로 IP할당 따위의 선택이 없다. 무조건 IP를 입력해야 하는데
유동 IP라 대략 난감한 상황이다. ;; 인터넷 사업자에게 전화를 하는 짓은 의미없을 것만 같았고, 그냥 모뎀을 껐다 켜
보기로 했다. 녹색, 파란색 열심히 왔다갔다를 했다. 5분 정도를 눈 빠지게 기다렸는데, 갑자기 메시지가 뜬다.

"네트워크 설정이 변경되었습니다."

짜잔~. 자동으로 잡히는 거다. 어렵게 설정할 것은 없었다. 어려울 수록 먼산을 돌아가는 길이거늘. 엄청난 삽질을 각오
했는데, 다행히 금방? 잡혔다. (데탑이랑 같이 사용하려면, 이렇게는 못 쓸거 같고 결국은 무선 공유기를 달아와야겠다.
어쨌거나 추가 지출 흑;;)

사파리가 접속되고 맥쓰사 까페에도 접속이 되었다. 여기서 1편에서 6편까지 맥OS 기본 강좌를 읽고, 하나씩 따라해 보면서 이건 왜 이랬을까? 이건 와~ 반응 여러가지가 나왔다. 몇 가지 생각해 보면,

1. Finder : 윈도가 아닌 유닉스 형태의 폴더 체계. 물론 아직 적응이 안 된다. 
                 아직 뭐 크게 다운 받아두고 자료 챙길 것이 많지 않기 때문에 대략 간단한 사용법만 익혀 보았다.
                 * 유용한 기능 : 훑어보기 기능이 유용하다는 생각이 들었다. 그냥 '스페이스' 만 살짝 눌러줘도 그림이나
                    파일 정보를 쉽게 열람이 가능하다.
                 아직도 iTunes랑 Finder화면이랑 헷갈리는데 시간이 약이 되었으면 좋겠다.
2. 윈도우 창 : 일단 최대화 기능이 없다. 창에 대한 기본 개념 자체가 다른것 같은데, 솔직히 30년간 익숙해져 있어서                        그런지 이 기능이 왜 없는지는 이해가 쉽게 가지 않는다.
                     또, 아이콘 버튼이 왼쪽에 있어서 아직 마우스가 없는 나 같은 경우 접근 하기까지 시간이 쪼께 걸린다.
                     *닫기 버튼을 눌러도 백그라운드 프로세스는 종료가 안 되어 있다.
                       이것도 아직 적응이 안 되는 부분인데, 창 닫기와 프로세스 종료를 동일시하는 윈도우에선 상상도 못할
                       일인 것이다.
3. 키보드 : 일단 없는 키도 많고, 쓸 줄 모르는 특수키가 있다. 한/영 전환 알아내는데 15분 걸렸다^_^;;
                 Option, Control, fn 키는 아직 어떻게 조합해서 써야 좋은질 잘 모르겠다.
4. 스페이스/익스포제 : 어쩌면 가장 신기하면서도 맥북의 장점이 아닐까 생각해 본다. 휙휙 윈도가 분할되고 멀티처티
                                 로는 네 손가락으로 휙 내리면 익스포제 기능이 실행된다. 인터넷 서핑용 창 하나, iTunes용
                                 하나, 기타 윈도우 하나 이렇게 3가지 스페이시즈를 실행하고 각각 여러 익스포제로 구성해서
                                 쓰면 좋을 듯 하다. Good!~~
5. Dock : Mac에 대한 환상을 어쩌면 가장 크게 심어준 기능이 아닐까 싶다. 내가 아주 잠깐 기타를 배울때, 강사가 맥
               북에서 악보 열어서 보여주는데, Dock 기능이 엄청 신기해 보였었다. 지금 사용해 보니 크게 신기한 감은 별
               로 없는데^^  Dock/Stack 기능은 화려한 요소로 인식될 것 같다.
6. 안되는 것들 : 안 되는 것들 또한 많기 때문에 뒤에 계속해서 적어보겠다.

많은 사람들이 알고 있겠지만, 이 맥이란 OS에선 안 되는 녀석들이 참 많다.
우선 ActiveX가 지원이 안된다. 따라서 인터넷 뱅킹, 아프리카 이런 녀석들은 놔 두고 서라도 네이버 음악 듣기, 파일노리 다운받기 이런 사소한 것들까지도 지원이 안 된다. ㅠ.ㅠ 지금도 음악도 없이 그냥 생 포스팅 중...

아이폰과 연결하여 음악 좀 다운 받아보려했더니, 맥에서 아이폰으로 동기화 시키면 아이폰 음악 다 날라간다. ;;
어플 다 날라간다.;; 방법을 찾고 있다. ㅋㅋ

맥북 개봉기의 사진은 사실 오늘 오전에 한번 더 똑딱이로 찍어 놓은 사진이 있다. 그 사진들을 활용하려 했는데
역시 이 마저도 여의치는 않았다. 카메라 데이터 케이블과 연결했더니 아무런 일도 발생하지 않았다. 수상쩍어서 캐논
홈페이지에 들어가 보았다. 역시나, 내 모델은 드라이버에 맥이 없었다. ㅠ.ㅠ 꽤 많은 다른 모델들도...
정중히 게시판에 문의 메일을 써 봐야겠다. 혹시라도 드라이버 설치가 되는지...
맥쓰사에 물어보니 카드 리더기로 받으라네...;; 맥과 윈도 사이 데이터 교환을 위해서라도 외장하드를 하나 사야하는
기로에 또 빠진다.

마지막 하이라이트는 영화보기!
저녁 먹으려는데 넘 심심하다. 영화나 한편 보까. 일단은 CD/DVD eject 버튼을 클릭해 보았다.
우라질네이션! 꺼내는 방법을 모르겠다. 버튼도 없는데 ㅠㅠ.
iTunes에서 신나게 메뉴들을 들락 날락 거리다 CD/DVD eject를 찾았다. 반응없다;;

무슨 조환가 싶어 어리둥절 하다가. 인터넷에서 iMac에 그냥 CD 를 집어넣는 그림을 보았다. 순간 아차 싶었다.
그냥 구멍 사이로 CD를 밀어넣는 것이었다. 이 얼마나 CD/DVD Rom Drive에 익숙해져 있었단 말인가?
이로써 첫번째로 Ray DVD재생 성공.

갑자기 구워놓은 영화가 있는 CC케이스를 가져와 오스틴파워 골드멤버를 골랐다. 넣었다. 화면이 뜨면서 QuickTime
이 실행되는가 싶었는데, 파일 Open 실패! 코덱 문젠가 싶었다. QuickTime 사이트에서 divX 재생 플레이어를 다운 받아서 실행하니 재생이 되었다! 역시 근데 한글 자막은 선택 메뉴조차 막혀있다. 자막 보기는 다음 기회에~ 아나...

맥북을 어차피 산 이유는 아이폰 개발이니까 개발만 할 수 있는 환경이라면 다른 것은 크게 문제가 되지 않을 거라고
위안을 갖고 있다. 아쉽긴 아쉽다;; 항상 쉽게 되던 건데 잘 안 되니..

오늘의 맥북과 친해지길 바래는 여기서 마치고 다음에 또 더 친해졌는지는 다음글에서 확인 부탁드린다.

이젠 개발하는거다! 

'Mac' 카테고리의 다른 글

MacBook과 친해지길 바래 -2 (파인더 및 스크린 샷)  (0) 2009.12.21
MacBook White 개봉기  (0) 2009.12.19
Posted by Actruce
2009. 12. 19. 22:06
기다리던 MabBook 이 드디어 도착하였다.
갑작스럽게 점심 시간에 전화가 왔다. 점심을 먹자마자 택배가 걱정돼 후다닥~~
그 짧은 시간 동안 개봉기 위해 아이폰으로 촬영해 두었다.

1. 포장 상자의 심플함.


2. 상자를 열어 보았더니, 노트북과 포장된 충전선이 나왔다.


3. 종이 재질의 포장 주머니에서 맥북을 꺼내 보았다. 역시 하얗다^_^
    애플 마크에 불이 들어와 주는 센스도...


4. 첫 설정에서 언어권 설치 후, 계정 설정 및 간단한 네트웍 설정을 한다.
    계정 설정을 하면서 갑자기 플래쉬가 터지면서 초췌한 내 모습을 계정 사진에 담는다.;;
    사진이 정말 이상해서 3번 다시 찍었다. ㅋㅋ
    다 끝나고 나면 인트로 동영상이 뜬다.
    


첫날 맥북과의 만남은 여기까지이다. 망년회 땜에 회사 끝나고 술 먹다가 담날 집에 들어왔다. 이런;;
덕분에 오늘에서야 맥 OSX 사용법을 조금씩 익혀 티스토리 포스팅까지 할 수 있게 되었다.
맥북과의 20분간의 짧은 개봉기는 여기서 마치고 맥북과의 반 나절간의 사투를 다룬 맥북과 친해지길 바래편으로
넘어간다.~~

'Mac' 카테고리의 다른 글

MacBook과 친해지길 바래 -2 (파인더 및 스크린 샷)  (0) 2009.12.21
MacBook 과 친해지길 바래!~~  (3) 2009.12.19
Posted by Actruce
이전버튼 1 이전버튼