두달 전, 집에 있는 맥미니가 고장이나 수리를 맡겼습니다. 그래서 집에는 고령의 맥들 밖에 없어 레퍼드도 써볼 겸 겸사겸사 맥북을 구입하였습니다. 하지만 얼마 후에 맥미니가 돌아와 회사에서는 아이맥을 집에선 다시 맥미니를 쓰면서 여전히 OS X 10.4 타이거에 머무르고 있었습니다. 그동안 맥북은 아들녀석의 장난감으로만 사용되고 있었습니다.

몇일 전 이제 레퍼드로 옮겨야 될 것 같아서 제가 사용했던 아이맥을 아들에게 주고, 전 사무실로 맥북을 가지고 왔습니다. 노트북을 데스크탑으로 사용할려니 모니터, 입력장비등 살 것이 한두가지가 아니였습니다. 아래는 제가 구입 또는 예정인 하드웨어입니다.

* 모니터 - BTC ZEUS 5000 220 MVFR
사용자 삽입 이미지
맥북과 듀얼로 쓰기 위해 22인치 LCD를 구입했습니다. 코딩과 웹문서를 보기 위해서는 가로로 긴 것이 더 좋기 때문에 '피벗' 기능이 있는 것으로 선택했습니다.

1050X1680으로 쓰고 있는데 확실히 가로가 길어서 작업할 때 매우 좋습니다. 왠만한 문서나 사이트는 종스크롤을 얼마 하지 않아도 다 볼 수 있습니다.

화질은 그다지 감동은 없는데 제가 설정을 잘 못해서인지는 모르겠습니다. 다 괜찮은데 너무 길어서 위쪽을 한참 응시하고 있으면 목이 아프네요.


* 노트북 받침대 - 액토 노트북 쿨링 스탠드
사용자 삽입 이미지
노트북을 거치할 받침대 입니다. 쿨링은 그다지 신경 쓰지 않는데 모양과 기능이 마음에 들어서 선택했습니다. 튼튼하고 원하는 대로 높이와 각도를 조절할 수 있어 좋습니다.

조용한 곳에선 팬소리가 조금 들리는데 역시 성격상 별로 신경 안쓰고 있습니다. 우측에 네개의 USB 허브가 있어 마우스와 키보드를 연결해서 사용하고 있습니다.

모양도 그럭저럭 봐줄만 하고 가격대비 괜찮은 것 같습니다.


 
* 마우스 - 로지텍 MX 레볼루션
사용자 삽입 이미지
몇년을 휠이 고장난 마이티 마우스만 쓰다 이 마우스를 사용하니 좋을 수 밖에 없는 것 같습니다. 단점은 딱 하나인데 제가 손이 작아 마우스가 다소 크게 느껴진다는 것입니다.

일단 충전식이라 베터리를 구입할 필요가 없습니다. 그외에 맥용 드라이버도 있고 많은 버튼이 있어 필요한 기능을 할당해서 사용할 수 있습니다. 

'탭닫기', '앞/뒤로 가기'등 거의 키보드를 사용하지 않고 웹브라우져의 사용이 가능합니다. 그외에 휠이 굉장히 편합니다. 두가지 모드가 있는데 하나는 '딸칵' 걸리는 느낌으로 정확히 스크롤 할 수가 있고, 또 하나는 걸리는 느낌이 없이 빠르게 스크롤할 수 있습니다. 휠을 클릭하면 두가지 모드가 전환됩니다. 걸리는 느낌의 모드에서도 빠르게 계속해서 휠을 돌리면 다른 모드로 자동으로 전환되어 긴문서를 볼 때 편리합니다. 휠을 좌우로 누르면 횡스크롤이 됩니다.


* 마우스 패드 - xray pad Thunder8
사용자 삽입 이미지
사실 이 제품은 굉장히 오래전 부터 구매버튼을 여러번 눌렀다가 포기한 제품입니다. 구매를 포기한 이유는 단 한가지입니다. 마우스 패드는 남아 도는데 3만원에 가까운 비용을 들여서 구입하는 것이 아까워서 였습니다.

하지만 이왕 마우스도 무리한거, 제 성능을 발휘할려면 패드도 투자하자라고 마음 먹고 드디어 구매를 하였습니다. 사용해 보니 마우스가 거의 미끄러지듯이 움직여 훨씬 힘이 덜 들어 갑니다. 월등히 마우스가 좋아 지는 것은 아니지만 쓸만한 것 같습니다.

양면을 사용할 수 있는데 한쪽 면은 거칠고 다른쪽 면은 매끄럽습니다. 쓸 때는 그냥 괜찮다 했는데, 옆자리에서 잠시 써본다고 해서 빌려주고 이전 마우스 패드를 쓸려니 못 쓰겠네요.


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

아래는 구매 예정 품목입니다. 위의 맥북에 추가한 것 이외에 PC도 업그레이드 하여 총알을 너무 많이 썼고, 제 컴퓨터 주변에만 뭔가 변하는 것이 자꾸 생겨 집사람과 아이의 눈치가 보이기 때문입니다. 그리고 현재 잘 쓰고 있는 것이기에 제 자신에게도 합당한 구매 이유를 납득시켜야 되기 때문에 숨을 고르고 있습니다.


* OS - OS X 10.5
사용자 삽입 이미지
사용한지 2년도 안된 집 맥미니의 OS X를 업그레이드 시키기 위해 구입을 할려고 합니다.

사실 Xcode 3.X대를 사용할 수 없다는 점을 제외하면 타이거에서도 그다지 큰 불편함은 없습니다. 하지만 대부분 집에서 Xcode도 사용해 보고 블로그에 관련된 포스팅도 하기 때문에 필요할 것 같습니다.

Xcode 3.X에 관련되 포스팅들이 시작되면 집의 맥미니에 레퍼드가 깔린 것입니다.




* 키보드 - 리얼포스 86
사용자 삽입 이미지
MS의 무선 엘리트 키보드/마우스가 지금까지 제가 사용해 본 키보드중 가장 고가의 키보드였습니다. 그동안 수많은 유혹을 받아온 리얼포스와 해피해킹 프로는 20만원이 훌쩍 넘는 가격에 구입의사를 깨끗하게 포기하고 있었습니다.

하지만 요새는 '넌 매일 키보드를 많이 사용하잖아? 저 돈을 투자해서 생산성이 향상된다면 절대 많은 돈이 아니야!'라고 최면을 계속 걸면서 슬슬 넘어 가고 있는 중입니다. 더 작은 HHK2도 강력히 끌리지만 정통 VI 유저도 아니고 방향키가 따로 없으면 불편할 것 같아 이놈으로 정했습니다. 여유가 된다면 집의 맥미니에는 HHK2를 지르고 싶네요.


* 스피커 - Harman Kardon SoundSticks II
사용자 삽입 이미지
오래전 코액스에서 실물을 한번 본 뒤로 늘 찍어만 놓고 있는 물건입니다. 스피커는 3만원 이상이면 음질의 차이를 구별할 수 없는 막귀이기 때문에 별로 효율성은 없을 것 같습니다. 다만 소리도 좋을 것 같고 디자인이 마음에 들어 책상위에 두면 좋겠다라는 생각에 미련은 끊지 못하고 있습니다.

 

이외에도 '아이팟 나노+나이키 스포츠 Kit', '블루투스 헤드폰', '산요 작티' 자잘하게 밑도 끝도 없네요. 그동안 아이맥을 쓰면서 하드웨어에 대한 관심이나 필요성을 못 느꼈는데, 환경이 바뀌니 다시 지름신이 오고 있습니다.

사실 지금쯤이면 아이폰이 들어 올 줄 알고 준비하고 있었는데 무산이 되니, 다른 하드웨어에 살풀이를 하고 있는지도 모르겠습니다.

'이야기들 > 소소한 이야기' 카테고리의 다른 글

WWDC 2009  (4) 2009.06.11
스크래치 강좌 끝~  (8) 2008.07.28
Tumblebugs 드디어 클리어!  (2) 2008.06.18
맥북 DVI 어댑터  (2) 2008.06.16
휴~ 아이폰 3G  (4) 2008.06.10
AND

이번 장에서는 고전 게임인 브레이크아웃과 유사한 벽돌깨기 게임을 만들어 보겠습니다. 처음 스테이지는 7개의 블록으로 이루어진 한줄로 시작되며, 스테이지가 증가될 수록 블록의 줄이 하나씩 늘어 나며 공의 속도가빨라 집니다. 총 4개의 스테이지로 되어 있으며 플레이어는 3번의 기회를 가집니다.

이번장에서는 이전과는 달리 블록의 모든 스프라이트를 생성하지 않고 Stamp를 이용하여 블록들을 출력할 것 입니다. 그렇기 때문에 공과 충돌한 블록의 삭제도 흰색 블록 스프라이트의 Stamp를 사용합니다. 그외 충돌 체크도 좌표방식이 아닌 색을 이용한 충돌 검사를 하고, 공의 진행도 Direction을 이용하여 결정합니다.

사용자 삽입 이미지

"여담이지만 '스티브 워즈니악'이란 책에서는 아타리의 잡스로 부터 의뢰를 받은 워즈니악이 블레이크아웃 게임을 4일만에 만들었다고 합니다. 잡스는 몇천달러를 받았지만 워즈니악에게는 700달러를 받았다고 거짓말을하고 그 반만 주었다고 하네요."

1. 변수 생성
게임에 필요한 아래의 변수들을 생성합니다.
  • BlockX - 파괴되는 블록의 X 위치 입니다.
  • BlockY - 파괴되는 블록의 Y 위칭 입니다.
  • Live - 플레이어의 남은 생명입니다.
  • Score - 현재 점수를 나타냅니다.
  • Speed - 공의 속도를 설정합니다.
  • Stage - 현재 스테이지 입니다. 1~4까지 스테이지가 있습니다.
  • State - 상태입니다. 0은 대기중 1은 게임중입니다.
  • resBlock - 남은 블록입니다. 남은 블록이 0이되면 다음 스테이지로 넘어 갑니다.

* Local 변수 생성
변수를 생성 할 때에는 입력창 아래에 'For all sprites'와 'For this sprite only'를 선택하는 버튼이 있습니다. 'For all sprites'는 모든 스프라이트에서 사용할 수 있는 변수이며, 'For this sprite only'는 현재 선택된 스프라이트에서만 사용할 수 있는 변수 입니다.
 
사용자 삽입 이미지

좌측의 resBlock은 모든 스프라이트에서 사용할 수 있는 변수이고, 그 밑의 idx는 현재 스프라이트에서만 사용할 수 있는 변수 입니다.

idx는 해당 스프라이트가 선택되었을 때에만 보여지며, 다른 변수들에 비해 색이 짙어 구분이 가능합니다. Block 스프라이트에서는 idx를 Ball 스프라이트에서는 isTouch 변수를 'For this sprite only'를 선택하여 생성합니다.




2. 스프라이트 생성
스프라이트에 사용된 이미지는 좌측의 파일을 다운로드 받고 압축을 푸신 후에 사용하시면 됩니다.

사용자 삽입 이미지

다운로드 받은 이미지로 위와 같이 스프라이트를 생성합니다. 이미지는 페인트 에디터로 직접 그리거나 기존의 다른 이미지를 사용하셔도 됩니다.

Blcok 스프라이트에는 block1을 기본으로 block2, block3, block4 이미지로 커스튬을 추가 합니다. bottom 스프라이트에는 bottom1을 기본으로 bottom2 커스튬을 추가합니다.

사용자 삽입 이미지
Button 스프라이트는 페인트 에디터를 사용하여 직접 그려서 추가합니다.

'Click to start'와 'End...' 커스튬을 추가합니다.







3. 블록 스크립트
1) 초기화
사용자 삽입 이미지
블록들은 실제 스프라이트가 아닌 Stamp로 복제된 이미지를 사용하기 때문에 스크립트가 시작되면 먼저 블록을 감춥니다.

점수(Score)를 0, 현재 스테이지(Stage)를 1, 플레이어 생명(Live)을 3, 현재 상태(State)를 대기(0)로 초기화합니다.

'initStage' 메시지를 발송하여 스테이지를 준비 하도록 합니다.



2) 스테이지 설정
사용자 삽입 이미지
[clear]
이전에 stamp로 찍어 놓은 이미지들을 삭제합니다.

[set Speed to [(3)+[[stage]*(0.8)]]]
공의 속도를 stage가 증가할 때 마다 기본속도(3)에서 0.8씩 증가 하도록 합니다.

[set resBlock to [(7)*[[stage]]]
블록의 수를 설정합니다. 스테이지가 증가 할 때마다 1줄(7개)씩 증가합니다.

[repeat [stage]]
stage만큼 반복하면서 블록을 생성합니다. idx는 반복될 때 마다 1씩 증가되며 한줄을 의미합니다.

[switch to cosutme [block#숫자]]
각 줄에 따라 블록의 이미지를 선택합니다.

[repeat (7)]
한줄에 7개의 블록을 생성합니다.

[stamp]
현재 커스튬의 이미지를 복사합니다. 복사한 후에 다음 블록을 생성하기 위해 우측으로 62만큼 이동합니다.

[change y by (-20)]
블록을 한줄 생성 후에 아래의 블록들을 출력하기 위해 Y 좌료를 20 감소 시킵니다.

블록 생성을 모두 끝내면 'Click to start' 버튼을 보여주도록 'waitPlay' 메시지를 발송합니다.
 



3) 다음 스테이지 처리
사용자 삽입 이미지
'nextGame' 메시지를 받으면 현재 스테이지를 1 증가 시키고 'initStage' 메시지를 발송해서 다음 스테이지를 위한 블록들을 준비하도록 합니다.




4. 공 스크립트
1) 초기화
사용자 삽입 이미지
시작되면 [go to front]로 스프라이트를 가장 앞쪽으로 가져다 놓습니다. 다른 스프라이트의 stamp로 복사된 이미지 보다 앞쪽으로 출력하기 위해서 입니다.

좌표를 초기화 하고 초기 진행방향을 150도로 설정합니다.

2) 게임 진행
사용자 삽입 이미지
게임이 진행중일 때(state=1) 실행되는 스크립트 입니다.

[if on edge, bounce]
벽면에 공이 맞으면 현재 진행되는 방향을 반대로 설정합니다.

[move [speed] steps]
공의 속도(speed)만큼 현재 설정된 각도(direction)로 진행합니다.

[set isTouch to (0)]
isTouch 변수를 0으로 초기화 합니다.

3) 충돌 체크
사용자 삽입 이미지
공과 블록과의 충돌을 체크하는 스크립트 입니다.

[if <touching color [#컬러]?>]
각 컬러의 블록들과 공이 충돌 하였는지 검사 합니다.

[set BlockY to (#열)]
충돌한 블록의 열 위치(BlockY)를 설정합니다.

[set isTouch to (1)]
충돌 여부 변수 'isTouch'를 1로 설정합니다.

[change Score By (#점수)]
각 열의 점수(10, 20, 30, 40)를 증가합니다.









4) 아웃 체크
사용자 삽입 이미지
하단과의 충돌을 검사합니다. 하단과 충돌하였을 경우에는 플레이어의 생명(Live)을 1 감소합니다.

만약 생명이 없다면(Live=0) 'endGame' 메시지를 발송하여 게임이 종료되었음을 알리고 스크립트를 중지합니다.










5) 충돌 처리
블록과 충돌되었을 경우(isTouch=1) 실행되는 스크립트 입니다.
사용자 삽입 이미지

[set BlockX to [round [[(188)+[[x position] - (7)]]/(62)]]]
충돌된 블록의 행을 구하여 BlockX에 설정합니다. 현재 행은 이전에 블록을 복사하는 공식을 역으로 활용하여 구합니다. 공의 중심값을 보정하기 위해서 현재 위치(x position)에서 7을 감소시킵니다.
 
[change resBlock by (-1)]
남은 블록의 수를 1 감소합니다. 남은 블록의 수가 0일 경우에는 'nextGame' 메시지를 발송하여 다른 스프라이트들이 다음 레벨을 준비할 수 있도록 합니다.

[if <touching[bar]?>]
공이 바와 충돌했을 경우에는 반사 되도록 'reflex' 메시지를 발송합니다.

6) 'reflex' 메시지 처리
사용자 삽입 이미지
공이 반사되야 함을 알리는 'reflex' 메시지를 수신하였을 경우에 실행됩니다.

[point in direction [(180)-[direction]]]
180에 현재 진행방향의 각도(direction)를 빼서 진행방향을 반대로 설정합니다.


[move [[speed]+(2)]steps]
reflex 메시지를 다시 받지 않기 위해 공을 진행방향으로 이동시킵니다.

7) 'nextGame' 메시지 처리
사용자 삽입 이미지
다음 스테이지를 알리는 'nextGame' 메시지를 받았을 경우에는 공의 좌표를 시작위치로 이동합니다.



5. 바 스크립트
사용자 삽입 이미지
바 스크립트는 간단합니다. 시작시에 초기 위치를 정하고 사용자가 왼쪽 방향키를 눌렀을 때는 x를 -10만큼 이동하고, 오른쪽 방향키일 경우에는 x를 10만큼 이동합니다.









6. 마킹 스크립트
1) 초기화
사용자 삽입 이미지
마킹은 흰색으로된 블록과 같은 크기의 스크립트로 파괴된 블록을 감추는 역활을 합니다. 시작되면 clear로 이전의 Stamp를 지웁니다.




2) 블록 지우기
사용자 삽입 이미지
공과 블록이 충돌했을 경우에는 블록을 지우기 위해 'markBlock' 메시지가 전송됩니다. 이 메시지르 받으면 지워야할 블록 위치로 이동한 후에 stamp로 이미지를 복사합니다.

7. 버튼 스크립트
1) 초기화
사용자 삽입 이미지
대기중인 'waitPlay' 메시지를 받으면 현재 게임 상태를 0으로 설정하고 "Click to start" 버튼을 출력합니다.




2) 게임종료
사용자 삽입 이미지
게임이 종료되었다는 'endGame' 메시지를 받으면 커스튬을 "End..."로 변경하여 출력합니다.




3) 클릭처리
사용자 삽입 이미지
게임이 대기중이고 버튼이 클릭되면 버튼을 감추고 state 변수를 게임중인 1로 설정합니다.


8. 하단 배경 스크립트

사용자 삽입 이미지
하단의 물결이 출렁이는 에니메이션을 보여주는 스크립트 입니다. 게임중(state=1)이면 1초 간격으로 bottom1과 bottom2 커스튬을 번갈아 가며 보여줍니다.







완료 되었습니다. 시작 버튼을 클릭한 후 좌우 방향키를 이용하여 게임을 테스트 해 봅니다. 전체 스크립트는 아래의 파일을 다운로드 받아서 확인해 보세요.

AND

오늘 스크래치 사이트를 가보니 사이트가 한글화되어 있었습니다. 오랫만에 방문이라 언제부터 한글을 지원했는지 모르겠습니다. 100% 한글화가 된 것은 아니고 영문으로 된 페이지들이 보이지만 생각지도 않았던 한글로된 스크래치 사이트를 보니 반갑네요.

사용자 삽입 이미지

사용자 삽입 이미지
하지만 사이트 상단의 언어 선택에는 좌측의 이미지와 같이 아직 한글이 없습니다. 영문으로 선택했더니 쿠키에 저장되어서인지 그뒤로 사이트를 방문할 때는 계속 영문으로 나오고 한글로 돌아 갈 방법이 없습니다. 해당 쿠키를 삭제해야 할 듯 합니다.

버젼은 같지만 혹시나 하는 마음에 스크래치를 다운로드 받아서 확인해 보았는데 스크래치 자체에서는 여전히 한글을 지원하지 않았습니다. 사실 스크래치의 메뉴나 스크립트의 한글화 보다는 한글의 입력/출력이 먼저 해결되었으면 좋겠습니다.

사이트나 스크래치의 성격상 자원하신 분이 한글화 작업을 하신 것 같은데, 누구신지 모르지만 수고에 감사 드립니다. ^^

'기타' 카테고리의 다른 글

PC vs 맥 vs 우분투의 재미있는 이미지  (10) 2008.07.22
애플 모바일미 (MobileMe) 둘러 보기  (12) 2008.07.21
각 언어별 Hello World 출력  (0) 2008.05.08
OS X 코드명과 동물이름  (10) 2008.04.22
Xcode 3 시연 동영상  (4) 2008.03.26
AND