두달 전, 집에 있는 맥미니가 고장이나 수리를 맡겼습니다. 그래서 집에는 고령의 맥들 밖에 없어 레퍼드도 써볼 겸 겸사겸사 맥북을 구입하였습니다. 하지만 얼마 후에 맥미니가 돌아와 회사에서는 아이맥을 집에선 다시 맥미니를 쓰면서 여전히 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

이번 장에서는 마우스를 이용해 원반을 조준하여 맞추는 클레이 사격 게임을 만들어 보겠습니다. 게임 시작, 게임, 게임종료 화면을 추가하고 각각 시작과 다시시작 버튼을 클릭하여 게임을 시작할 수 있습니다. 5 스테이지까지 나오는 원반을 마우스를 조준하고 클릭하여 최대한 많이 맞추는 게임입니다.

사용자 삽입 이미지

1. 변수 생성
Variables에서 make a variable 버튼을 클릭하여 아래와 같은 변수들을 생성합니다.

  • gameStep - 0은, 12는 게임중, 2는 게임 종료 상태를 의미합니다.
  • stage - 1부터 5까지 현재 스테이지를 나타냅니다.
  • point - 플레이어가 맞춘 원반 수입니다.
  • count - 현재까지 발사 된 원반 수입니다.
  • thick - 프레임 카운터 입니다.
  • targetLive1 - 원반1의 상태이며 0은 대기, 1은 발사 중, -값은 파괴중입니다.
  • targetLive2 - 원반2의 상태입니다.
  • targetLive3 - 원반3의 상태입니다.
  • targetLive4 - 원반4의 상태입니다.
  • targetLive5 - 원반5의 상태입니다.
  • targetLive6 - 원반6의 상태입니다.

사용자 삽입 이미지
플레이어에게는 state와 point만 보여줍니다. 두 변수를 제외하고 나머지 변수의 출력선택의 체크를 해제합니다.


2. 스프라이트 생성
1) 커스튬 등록
좌측의 압축된 이미지 파일을 다운로드 받으신 후에 아래와 같이 스프라이트를 등록합니다. 

사용자 삽입 이미지

배경 이미지는 좌측과 같이 open, close, bg 세개의 이미지를 추가합니다. 원반 스프라이트들(sprite4~sprite9)은 우측과 같이 t1(t2, t3)의 깨지는 원반이 커스튬을 추가합니다.

사용자 삽입 이미지

2) 배경음/효과음 설정
사용자 삽입 이미지
배경의 Sounds 탭을 클릭하여 아래와 같이 대기, 게임, 종료 화면에서 배경음악으로 사용될 음악 파일을 등록합니다.

여기서 사용된 배경음악은 스크래치가 있는 폴더의 Media/Sounds/Music Loops에 있는 음악파일을 사용했습니다.

각자 취향에 맞는 음악 파일을 넣으셔도 됩니다.





접시가 깨질 때 사용되는 효과음은 스크래치에서 스프라이트 생성시 기본으로 등록되는 pop 사운드를 사용합니다. 다른 효과음을 원할 경우에는 하드디스크에 있는 음악 파일을 등록(Import)하거나 새로 녹음(Record)하여 사용하실 수 있습니다.

3. 배경화면 스크립트
1) 게임 초기화
사용자 삽입 이미지
플레이어가 '시작' 또는 '다시시작' 버튼을 클릭하였을 때 발생되는 'initGame' 메시지에 응답하는 스크립트 입니다.

각종 필요한 변수들을 초기화하고 배경음을 중단합니다. 그리고 현재 배경 이미지를 게임실행 화면(bg)으로 변경합니다.





2) 게임 종료
사용자 삽입 이미지
5 스테이지가 끝나고 게임이 완료되었을 경우 발생되는 closeGame 메시지에 응답하는 스크립트 입니다.

배경 이미지를 게임종료(close) 이미지로 변경하고 배경음을 중단합니다.

3) 배경음 출력
사용자 삽입 이미지
사용자가 시작버튼을 클릭하면 실행되는 스크립트 입니다. gameStep을 0(대기화면)으로 설정하고 이전에 플레이되는 배경음이 있다면 중지합니다. 그리고 배경 이미지를 게임대기(open) 이미지로 변경합니다.

forever내부의 스크립트는 무한루프로 반복되면서 각각의 gameStep에 맞는 배경음을 출력합니다.

* jungle - 게임중(gameStep=1) 배경음악
* Xylo1 - 게임종료(gameStep=2) 배경음악
* Cave - 게임대기(gameStep=0) 배경음악







4) 게임 제어
게임 진행 시(gameStep=1)에 실행되는 스크립트들입니다. 무한루프를 반복하면서 thick을 1씩 증가시킵니다.

사용자 삽입 이미지

[if <[[thick] mod [(10) + [[(5) - [stage]]*(3)]]]=(0)>]
원반이 발사될 시점을 검사하는 스크립트 입니다.

  • thick mod (식): 증가되는 thick과 (식) 값의 나머지를 구해 그 값이 0일 경우에만 원반을 발사 합니다. (식) 값이 작을 수록 원반이 자주 나타납니다.
  • 10+(5-stage)*3: stage는 1 부터 시작되며 1씩 증가됩니다. 1 스테이지에서는 22의 값을 가지며 점점 감소되어 최종 5 스테이지에서는 13의 값을 갖습니다.

사용자 삽입 이미지
좌측은 위의 스크립트에서 원반을 발사하는 검사가 참(1)일 경우에 실행되는 스크립트입니다.

이 스크립트는 6개의 원반들의 상태를 검사하여 현재 발사되지 않은 원반(targetLive#번호 == 0)이 있으면 initTarget#번호 메시지를 보내 해당 원반이 발사되도록 합니다.

원반이 발사되었을 경우에는 현재 발사된 원반수를 나타내는 count 값을 1 증가 시킵니다.






















사용자 삽입 이미지
현재 발사된 원반 수를 검사하여 스테이지를 증가 시키거나 게임의 종료를 검사하는 스크립트 입니다.

발사된 원반수에 따라 아래와 같이 설정합니다.

* 11~25: 2 스테이지로 설정
* 26~45: 3 스테이지로 설정
* 46~70: 4 스테이지로 설정
* 71~100: 5 스테이지로 설정
* 100이상: 게임 종료(gameStep=2)














4. 표적 스크립트
표적은 게임 진행중에만 출력됩니다. 현재 마우스의 위치를 따라 이동하며, 플레이어가 마우스 버튼을 클릭하였을 경우에 원반들과 충돌을 검사합니다.

사용자 삽입 이미지
게임시작(initGame) 메시지를 받았을 경우에는 show로 표적을 출력합니다. 게임종료 메시지(closeGame)를 받았을 경우에는 hide로 표적을 출력하지 않습니다.





게임이 시작되면 아래의 스크립트가 실행됩니다.

[go to [mouse-pointer]]
사용자의 마우스 포인터의 움직임에 따라 표적을 이동합니다.

[if <mouse down?>]
마우스가 클릭되면 표적의 위치가 해당 원반과 충돌하고 원반이 발사되었을 경우(targetLive#번호=1)에는 해당 원반에게 격추되었다는 hitTarget#번호 메시지를 발송합니다.

사용자 삽입 이미지

5. 원반 스크립트
원반 스프라이트는 3가지 각도로 이동하며 좌측, 우측에서 나타나는 총 6개의 종류가 있습니다. 원반의 위치와 이동경로를 제외하고는 대부분 동일하기 때문에 여기서는 하나의 스크립트만 설명하겠습니다. (각각의 구현 예는 아래의 소스를 다운 받아 스크래치에서 직접 확인해 주세요)

사용자 삽입 이미지
게임 초기화 메시지를 받았을 경우에는 해당 원반을 숨기고 'targetLive#번호' 변수를 발사 대기중임을 나타내는 0으로 설정합니다.



사용자 삽입 이미지
원반이 격추당했을 경우에 발생되는 메시지(hitTarget#번호)를 받았을 경우에 실행되는 스크립트 입니다.

효과음(pop)을 출력하고 'targetLive#번호' 변수를 파괴중임을 나타내는 -1로 설정합니다. 그리고 점수(point)를 1증가합니다.


사용자 삽입 이미지
발사 준비 메시지(intTarget#번호)를 받았을 경우에 실행되는 스크립트 입니다.

'targetLive#번호' 변수를 발사중(1)로 설정하고 출발위치를 설정합니다. (출발 위치는 원반 종류에 따라 조금씩 차이가 있습니다)

'target#번호' 로 커스튬을 원반 기본 이미지로 설정합니다. 원반 파괴 효과를 위해 설정된 효과(effects)를 초기화한 후에 원반을 보이도록 합니다.

다음은 실제 원반을 움직이는 스크립트입니다.
사용자 삽입 이미지

[change x by [(2)+[[stage] * (0.3)]]
[change y by [(1)+[[stage] * (0.3)]]
발사 중(targetLive#번호=1)일 때aㅏㄴ 원반을 이동합니다. 원반을 이동시키는 방법은 각각의 원반에 따라 조금씩 틀립니다. 이 스크립트의 원반은 x 축으로 2 이동할 때 y 축으로는 1 이동합니다. stage * 0.3으로 스테이지가 증가함에 따라 원반의 이동속도가 증가되도록 합니다.

[change taregetLive#번호 by (-1)]
폭파중일 때(targetLive#번호<0)는 targetLive#번호를 -1씩 감소 시킵니다. -30이 되면 사라집니다.

[switch to costume [t1]]
'targetLive#번호'가 -3 보다 큰 3 프레임 동안에는 파괴된 이미지로 변경합니다. 그 후에는 -30이 될 때까지 [change [ghost] effect by (25)]로 파괴된 이미지가 서서히 사라지는 효과가 나타나게 합니다.

[if <<<[x position] > (265)> or <[y position] > (180)>> or <[targetLive#번호] < (-30)>>]
x, y가 화면의 범위를 벗어 났거나 'targetLive#번호'가 -30이 넘어 30 프레임 동안 원반이 파괴되는 효과를 보여 주었으면 'targetLive#번호'를 0으로 대기상태로 만들고 hide로 원반을 출력하지 않습니다.

6. 버튼 스크립트
1) 시작 버튼
사용자 삽입 이미지
시작 시에는 show로  버튼을 보여 줍니다.

현재 게임상태가 대기(gameStep=0)이고 버튼 이미지가 클릭되면 gameStep을 1(게임 모드)로 설정하고 initGame 메시지를 발송한 다음 버튼 이미지를 감춥니다.






2) 다시시작 버튼
사용자 삽입 이미지
게임이 종료되었음을 알리는 closeGame 메시지를 받았을 때에 show로 버튼을 출력합니다.


사용자 삽입 이미지
시작 시에는 hide로 보여 주지 않습니다.

현재 게임상태가 종료(gameStep=2)이고 버튼 이미지가 클릭되면 gameStep을 1(게임 모드)로 설정하고 initGame 메시지를 발송한 다음 버튼 이미지를 감춥니다.






이상으로 게임을 완성하였습니다. 시작버튼을 클릭하여 스크립트를 실행합니다. 초기 화면에서 '시작' 버튼을 클릭하면 게임이 시작됩니다. 5 스테이지까지 100개의 원반이 발사되면 게임이 종료됩니다. '다시 시작' 버튼을 클릭하여 게임을 다시 시작할 수 있습니다.

전체 구조와 스크립트는 아래의 파일을 다운로드 받으셔서 확인해 보세요

'프로그래밍 강좌 > 스크래치' 카테고리의 다른 글

5.3 [고급] 범고래 봉봉 게임  (10) 2008.07.18
5.2 [고급] 벽돌깨기 게임  (0) 2008.07.13
4.7 [중급] 묵찌빠 게임  (0) 2008.06.16
4.6 [중급] 카드 맞추기  (0) 2008.06.11
4.5 [중급] 숫자야구 게임  (0) 2008.05.20
AND

작년 여름에 마지막 12 스테이지로 들어 간지 10여개월만에 드디어 클리어 했습니다(작년 포스팅). 매일 점심먹거나 머리아플 때등 보통 서너판씩 꾸준히 했는데 오늘 드디어 감격적인 엔딩을 보았습니다.

사용자 삽입 이미지

한 일년을 이 녀석과 함께 재미있게 보냈으니 기쁘기도 하고 섭섭하기도 하네요. 이제 슬슬 다른 게임을 찾아 보아야 할 것 같습니다. 요런 아기자기하고 재미있는 맥용 게임 추천해 주실 분 안계신가요?

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

스크래치 강좌 끝~  (8) 2008.07.28
5년만에 강림하신 지름신  (16) 2008.07.15
맥북 DVI 어댑터  (2) 2008.06.16
휴~ 아이폰 3G  (4) 2008.06.10
맥세이프 전원 아답터  (6) 2008.05.20
AND

이번 장에서는 묵찌빠 게임을 만들어 보겠습니다. 가위바위보를 하는 시점이 사용자가 키를 누르는 시점이라는 것만 제외하면 게임규칙은 우리가 흔히 하는 묵찌빠 게임과 같습니다. 사용되는 키는 키보드 좌측 하단의 z(묵), x(찌), c(빠) 입니다.


사용자 삽입 이미지


1. 변수 생성
Variables의 [Make a variable]을 클릭하여 아래의 변수들을 생성합니다.
  • state - 게임 상태입니다. 0은 가위바위보로 공격을 정하는 상태고 1은 사용자가 공격중인 상태, 2는 컴퓨터가 공격중인 상태입니다.
  • computer - 컴퓨터가 이긴 횟수입니다.
  • player - 사용자가 이긴 횟수입니다.
  • computerChoice - 현재 컴퓨터가 선택한 값(묵:1, 찌:2, 빠:3)입니다.
  • playerChoice - 현재 사용자가 선택한 값입니다.
  • winner - 승자를 나타내며 1은 사용자가 이겼을 경우, 2는 컴퓨터가 이겼을 경우입니다.

2. 스프라이트

1) 스프라이트 생성
이번장에서 사용하는 스프라이트는 4가지 입니다. Sprite1은 사용자 이미지, Sprite2는 컴퓨터 이미지, Sprite3은 현재 공격 차례를 나타내는 화살표이며 Sprite4는 각종 안내 문구를 출력합니다. 

사용자 삽입 이미지

Sprite1과 Sprite2는 '바위' 이미지외에 '가위', '보' 커스튬을 추가합니다. 좌측은 Sprite1, 우측은 Sprite2입니다.
사용자 삽입 이미지

Sprite4에도 s1, s2 이미지를 커스튬에 추가합니다. 아래의 압축파일을 다운로드 받아서 사용하시면 됩니다.

2) 효과음 생성
* 효과음을 녹음 할려면 헤드셋 또는 웹켐과 같이 마이크가 연결되어 있어야 합니다. 없으신 분들은 다음 장으로 바로 넘어 갑니다.

사용자 삽입 이미지
공격시 '묵, 찌, 빠'의 효과음 출력을 위해 Sprite1에서 Sounds 탭을 선택한 후에 녹음을을 위해 [Record] 버튼을 클릭합니다.


아래와 같이 녹음창이 뜨면 붉은색 녹음 버튼을 클릭한 후 '묵'을 녹음 하고 OK 버튼을 눌러 저장합니다. 같은 방법으로 '찌', '빠'도 추가하며 각각의 이름을 'muk', 'ji', 'pa'로 변경합니다.
사용자 삽입 이미지


사용자 삽입 이미지
Sprite1의 Sounds 탭에 좌측과 같이 녹음된 음성들이 저장 되어 있음을 확인합니다.

Sprite2에도 같은 방법으로 효과음을 추가합니다. 컴퓨터에서 사용하는 목소리기 때문에 Sprite1과 다른 목소리로 녹음하시는 것이 좋습니다.








3. 사용자(Sprite1) 스크립트
1) 초기화
사용자 삽입 이미지

게임이 시작되면 initPlayer 메시지를 발송하고 player, computer의 점수를 0으로 설정합니다.

initPlayer 메시지를 받으면 현재의 커스튬을 묵(bw)으로 설정한 후에 winner, state 변수를 0으로 설정합니다.

2) 입력 처리
사용자 삽입 이미지
사용자 입력을 처리하는 스크립트 입니다. z는 묵, x는 찌, c는 빠를 선택한 경우입니다.

[if <[state]=(1)>]
현재 상태가 사용자가 공격일 경우에만 사용자의 입력에 따라 '묵', '찌', '빠' 음성을 출력합니다.

[set playerChoice to (값)]
사용자의 선택을 저장합니다. 값은 묵은 1, 찌는 2, 빠는 3입니다.

[swtich to costume [custume]]
사용자가 선택한 값에 따라 커스튬을 변경합니다.

[broadcast [setComputer] and wait]
컴퓨터의 처리를 위해 setComputer 메시지를 발송합니다.














4. 컴퓨터(Sprite2) 스크립트
1) 초기화
사용자 삽입 이미지
시작시에는 기본으로 묵(bw2) 커스튬을 출력합니다.




2) 컴퓨터 순서 처리
사용자 삽입 이미지

[set computerChoice [ping random (1) to (3)]]
1에서 3까지 임의의 수를 선택합니다.

[if <[computerChoice]=(값)>]
선택된 값을 묵(1), 찌(2), 빠(3)인지 검사합니다.

[swtich to costume [custume]]
선택된 값에 따라 커스튬을 출력합니다.

[if <[state]=(2)>]
state가 2인 컴퓨터의 공격순서일 경우에는 효과음을 출력합니다.

[broadcast [decision] and wait]
사용자 입력과 컴퓨터의 선택된 값에 따른 처리를 위해 decision 메시지를 발송합니다.

3) 승부 처리
사용자 삽입 이미지

[if <<[playerChoice]-[computerChoice]>=(0)>]
사용자와 컴퓨터가 같은 선택을 하였는지를 검사합니다.

[if <not <[state]=(1)>>]
state가 0이 아닐 경우, 즉 공격우선권을 위해 가위바위보를 하는 경우가 아닐 경우를 의미합니다. 같은 선택을 하였기 때문에 사용자가 공격중일 경우(state=1)에는 plyaer 우승횟수를 1 증가하고 winner를 1(사용자)로 설정합니다. 컴퓨터가 공격중일 경우에는 computer 우승횟수를 1 증가하고 winner를 2(컴퓨터)로 설정합니다.

[broadcast [showMessage] and wait]
결과 출력을 위해 showMessage 메시지를 발송합니다.

[broadcast [initPlayer] and wait]
[swtich to costume [bw2]]
다시 게임을 시작하기 위하여 initPlayer 메시지를 발송하고 커스툼을 '주먹'으로 변경합니다.

playerChoice-computerChoice가 -1 또는 2일 경우에는 사용자가 이긴 경우입니다. 이때는 [set state to (1)]로 사용자에게 공격권을 설정하고, 아니면 컴퓨터에게 공격권(state=2)을 설정합니다.

[broadcast [setArrow] and wait]
화살표 아이콘이 현재 공격권을 가지고 있는 쪽에 출력되도록 합니다.

[broadcast [showMessage] and wait]
안내문 출력을 위해 showMessage 메시지를 발송합니다.

5. 화살표 스프라이트
사용자 삽입 이미지
시작되면 아이콘을 숨기고 Y위치를 40으로 설정한 후 무한반복 되면서 아래, 위로 0.2초의 간격을 두고 움직입니다.

사용자에게 공격권이 있을 경우(state=1)에는 X 위치를 사용자 쪽으로 이동(-177)하고 출력합니다. 컴퓨터에게 공격권이 있을 경우(state=2)에는 컴퓨터 쪽으로 이동(00)하고 출력합니다. 그외 공격권을 위해 가위바위보 중(state=0)일때는 아이콘을 숨깁니다.


6. 메시지 스프라이트
1) 초기화
사용자 삽입 이미지
초기 커스튬을 s0으로 설정합니다. s0은 "가위, 바위, 보"란 커스튬을 출력합니다.



2) 메시지 출력
사용자 삽입 이미지
showMessage를 처리하는 스크립트 입니다. state가 0일 경우(공격권 선택중)일 때는 "가위, 바위, 보"란 메시지를 출력합니다.

누군가 공격중일 때는 사용자가 이겼을 경우(winner=1)에는 s1 커스튬(플레이어 승!!)을 출력하고, 컴퓨터가 이겼을 경우에는 s2 커스튬(컴퓨터 승!!)을 출력합니다.

[wait (3) secs]
[hide]
메시지를 3초간 출력하고 감춥니다.















이제 완료하였습니다. 시작버튼을 클릭하여 플레이 해 봅니다. 처음엔 z, x, c로 가위바위보를 하여 공격권자를 선택합니다. 사용자는 공격시에도 방어시에도 z, x, c중 하나를 선택하여 키보드로 입력하여야만 게임이 계속 진행됩니다.

전체소스는 아래의 파일을 다운로드 받아 확인해 보시기 바랍니다.
AND

사용자 삽입 이미지
몇일 전 맥북을 외부 모니터와 연결하기 위해 Apple Mini-DVI to DVI Adapter를 구입했습니다.

(사진 출처: 애플)


이전 맥미니를 연결해서 사용하던 집에 있던 LCD 모니터에 연결을 할려고 했습니다. 그런데 DVD 어댑터가 맞지가 않는 것이었습니다. 왼쪽이 구입한 DVI to DVI 아답터이며 오른쪽이 맥미니에서 제공되는 DVI to VGA 어댑터입니다. 모니터쪽에서 나오는 케이블도 우측과 같습니다.

사용자 삽입 이미지

자세히 보시면 좌측에는 한일(-)자 모양의 홈만 있지만 우측은 일(-) 아래위로 두개씩 핀이 더 있습니다. 그래서 서로 맞지 않는 것이었습니다. 당황해서 인터넷을 검색해 보니 좌측의 어댑터는 DVI-D방식(디지털)이고 우측은 DVI-I(디지털+아날로그)라는 것을 알았습니다.

사용자 삽입 이미지
그래서 아이코다에서 좌측과 같은 DVI-D 케이블을 구입했습니다. 당연한 이야기겠지만 다행히 잘 되더군요. 25,000원 주고 산 어댑터를 사용하지 못할까봐 추가로 7,000원 들여 케이블까지 샀는데 안나오면 눈물 날뻔 했습니다.

대부분 모니터에서 제공하는 케이블이 DVI-I인 것 같은데 왜 맥북은 DVI-D도 포함하는 DVI-I 방식이 아닌지 의문이 드네요. 하드웨어적으로 문제가 있는 것인지, 미국에선 DVI-D를 주로 사용해서 인지는 잘 모르겠습니다. 확실한 것은 나이가 들수록 점점 더 모르는 것이 많아 진다는 것입니다.

이전에 후지쯔의 노트북을 구입하면서 각종 어댑터, 보조 밧데리, LCD 모니터, 무선 키보드/마우스등을 줄줄이 구입한 적이 있습니다. 요즘도 그동안 봉인되어 있던 컴퓨터 쇼핑몰들을 들락날락 거리고 있습니다. DVD 어댑터가 도화선이 되지 않을지 두렵습니다.

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

5년만에 강림하신 지름신  (16) 2008.07.15
Tumblebugs 드디어 클리어!  (2) 2008.06.18
휴~ 아이폰 3G  (4) 2008.06.10
맥세이프 전원 아답터  (6) 2008.05.20
요즘 근황...  (2) 2008.05.19
AND

이번장에서는 카드를 알아 맞추는 게임을 만들어 보겠습니다. 좌측 상단에 나와 있는 카드 중 가장 오른쪽에 나와 있는 모양을 아래에 뒤집혀진 4개의 카드 중에 찾아 내는 게임입니다. 예상되는 위치의 카드를 클릭하면 정답일 경우에는 다음 카드로 넘어 가고 틀렸을 경우에는 1초간 카드를 보여준 후 다시 게임이 진행됩니다. 3번의 기회가 있습니다. 

사용자 삽입 이미지

1. 변수 만들기
Varaiables의 [Make a variable] 버튼을 클릭하여 아래와 같이 변수를 만듭니다.

1) card1, card2, card3, card4
4개의 카드(스페이드-card1, 클로버-card2, 스타-card3, 하트-card4)들의 위치를 나타냅니다. 1~4의 값을 가지며 각각 첫번째, 두번째, 세번째, 네번째 위치에 있음을 의미합니다. 

2) live
남은 기회를 의미합니다. 3에서 부터 시작해서 틀릴 경우에 1씩 감소되며, 0이 되면 게임이 종료됩니다.

3) step
현재 맞출 카드의 순서를 나타냅니다. 1~4의 값을 갖습니다.

4) curMessage
화면에 보여줄 메시지를 의미합니다. 1~4의 값에 따라 'Correct!', 'Wrong!', 'You Win!!", 'You loose!!'를 출력합니다.


2. 스프라이트 생성

아래와 같이 각각 4개씩 아이콘, 카드, 뒷면 스프라이트를 생성합니다. 카드 뒷면 스프라이트는 먼저 하나만 만들고 스크립트를 작성 후에 'duplicate'로 복사하여 변경하여 사용하는 것이 편리합니다. (아래의 압축파일을 다운로드 받으시면 사용된 이미지들이 있습니다)


사용자 삽입 이미지

사용자 삽입 이미지
위의 이미지에서 Sprite13인 Wrong!! 스프라이트는 페인트 에디터를 이용해 직접 작성합니다. 그 뒤에 커스튬에서 'Wrong!', 'You win!!', 'You loose' 를 순서대로 추가 합니다.






3. 배경 스크립트 생성

배경에서 초기화 및 사용자 선택 시 처리에 관한 스크립트를 처리 합니다. 스프라이트 목록에서 좌측에 있는 배경을 선택한 후에 아래와 같이 스크립트를 추가합니다.

1) 초기화
사용자 삽입 이미지
[set step to (1)]

현재 단계를 1로 설정합니다.

[set live to (3)]
남은 기회를 3으로 설정합니다.

[set card1 to (0)]
[set card2 to (0)]
[set card3 to (0)]
[set card4 to (0)]
네개의 카드 위치를 모두 0으로 초기화 합니다.

[broadcast [setCard_1] and wait]
[broadcast [setCard_2] and wait]
[broadcast [setCard_3] and wait]
[broadcast [setCard_4] and wait]
순서를 정하도록 각각의 카드에 메시지를 보냅니다.



[broadcast [setPos_1] and wait]
[broadcast [setPos_2] and wait]
[broadcast [setPos_3] and wait]
[broadcast [setPos_4] and wait]
순서에 맞추어 카드가 위치하도록 메시지를 보냅니다.

2) 정답 처리
사용자 삽입 이미지
[change step by (1)]

단계를 1 증가합니다.

[set curMessage to (1)]
'Correct!' 란 메시지를 출력하도록 1로 설정합니다.

[broadcast [showCard_카드번호]]
각 단계에 맞추어 아이콘을 출력하도록 합니다.

[if <[step]=(5)>]
모든 단계가 종료되었을 경우에는 'You win!!'을 출력하도록 curMessage를 3으로 설정합니다.

[broadcast [showMessage] and wait]
설정된 curMessage에 맞추어 메시지를 출력하도록 합니다.





3) 오답 처리
사용자 삽입 이미지
[change live by (-1)]
기회를 1 감소합니다.

[if <[live] < (1)>]
기회가 1보다 작을 경우에는 curMessage를 4(You loose!!)로 아닐 경우에는 2(Wrong!)으로 설정합니다.

[broadcast [showMessage] and wait]
설정된 curMessage에 맞추어 메시지를 출력하도록 합니다.


4. 아이콘 스프라이트
 
첫번째 아이콘은 [show]로 시작시 보여 주며 나머지 아이콘들은 [hide]로 출력하지 않습니다. 아래는 각각의 아이콘 스프라이트에 따른 스크립트 입니다. 

사용자 삽입 이미지

[when I receive [showCard_카드번호]]
각 단계가 지날 때 마다 'showCard_카드번호' 메시지를 받게 되며 해당 카드는 [show]로 출력되게 합니다.


5. 앞면 카드 스프라이트

1) 초기화 및 좌표 설정
사용자 삽입 이미지

[go back (1) layers]
각 카드들은 카드 뒷면(?)과 겹쳐서 출력됩니다. 카드 뒷면이 먼저 보이도록 앞면카드들은 출력순서를 뒤로 보냅니다.

[set y to (-20)]
Y 좌표는 모든 카드가 같습니다.

[if <[card1]=(1)>]
자신의 위치에 따라 x 좌표를 결정합니다.  현재 스크립트는 첫번째 카드이기 때문에 card1을 비교하며 카드에 따라 각각 cad2, card3, card4를 비교합니다.

2) 위치 설정

사용자 삽입 이미지
첫번째 카드는 1~4중 임의의 위치로 설정합니다.



사용자 삽입 이미지
두번째 카드도 1~4중 임의의 위치로 설정합니다. 하지만 첫번째 카드와 중복된 위치가 되면 안되므로 card1과 검사하여 중복되지 않게 설정하도록 합니다.

[if <[card2]=[card1]>]
card1과 같은 번호일 때는 card2를 0으로 만들어 계속 루프를 돌도록 합니다.

[if <not<[card2]=(0)>>]
card2가 0이 아닐때는 스크립트를 중지합니다.


사용자 삽입 이미지
세번째 카드도 위와 동일한 방법으로 card1, card2와 중복되지 않도록 설정합니다.

위와 바뀐점은 card2와의 검사가 추가되었습니다.












사용자 삽입 이미지
네번째 카드도 위와 동일한 방법으로 card1, card2, card3와 중복되지 않도록 설정합니다.

위와 바뀐점은 card3과의 검사가 추가되었습니다.

















6. 뒷면 카드 스크립트

사용자 삽입 이미지
좌측은 첫번째 뒷면 카드의 예입니다. 다른 세장의 뒷면 카드들도 이와 동일 하면 x좌표만 각각 -50, 50, 150으로 바뀝니다.

[go to front]
같은 위치의 앞면 카드를 가리기 위해 가장 앞쪽에 출력되도록 합니다.

사용자 삽입 이미지
카드가 클릭되면 1초간 감추어서 아래장에 있는 앞면 카드가 출력되도록 한다음 다시 출력합니다.

각 단계(step)에 맞추어 각각의 카드를 검사합니다. step이 1일 경우에는 card1, 2일 경우에는 card2, 3일 경우에는 card3, 4일 경우에는 card4의 위치가 1인지 확인합니다. 여기서는 첫번째 뒷면 카드이기 때문에 1과 비교하고 뒷면 카드에 따라 각각 2, 3, 4와 비교합니다.

[if <[card1]=(1)>]
단계가 1이고 card1의 위치가 1일 경우에는 맞는 카드를 고른 경우입니다.

맞는 카드를 선택하였을 경우에는 [hide]로 뒷면 카드를 감추고 correct 메시지를 보냅니다. 이 메시지는 이전에 작성하였던 배경 스크립트에서 처리됩니다.

틀린 카드를 선택하였을 경우에는 wrong 메시지를 보냅니다.
























이제 완료되었습니다. 시작버튼을 클릭하여 플레이를 해봅니다. 아이콘에 나타난 카드를 네개의 뒤집어진 카드에서 마우스로 선택을 하여 3번의 기회동안에 4개의 카드를 모두 찾아 내면 'You win!!'과 함께 게임이 종료됩니다.

전체 소스는 아래의 파일을 다운로드 받아서 참고하세요.
AND

인터넷에서 새로나온 아이폰 3G가 우리나라에서도 시판된다는 소문을 듣고 이번 WWDC에 많은 기대를 하고 있었습니다. 하지만 오늘 아침 소식을 들으니 아직 한국에서 판매는 결정되지 않았더군요. 애플 사이트에 키노트가 올라와서 슥슥 넘겨가면서 대충 보았습니다. 아래의 화면에서 경쾌한 음악과 함께 아이폰이 출시되는 70여개의 국가들이 하나하나 소개되었는데 한국은 없었습니다.

사용자 삽입 이미지

너무나 기대하고 있던 제품이기에 실망스럽고 허탈하고 화가 나네요. 애플에 실망해야 할지, 위피를 의무화한 정부에 실망 해야 할지, 이동통신사에 실망해야 할지 모르겠습니다. 오늘 새벽 WWDC를 지켜보지 않고 과음으로 잠들어 버린 제 죄입니다. 하지만 언젠가는 출시될 것으로 기대하고 있습니다. 차기 3G 아이폰중 가장 궁금했던 것은 가격이었는데 199달러라니 다소 의외면서도 그나마 반가운 소식입니다.

사용자 삽입 이미지
이전 포스트
에서 OS X 차기 버젼의 코드명이 궁금하다는 이야기를 한적이 있었는데, 애플 사이트를 가보니 'Snow Leopard'인 것 같습니다. 번역하면 설표인가요? Snow가 들어 가니 내년 겨울에 나오는 것이 어울릴 것 같습니다.

아직 개발중이라 그런지 배경화면도 레오퍼드와 같고, 사용자 입장에서는 눈에뛰는 커다란 변화는 없는 것 같습니다. 'Core innovation'을 내세우는 것을 보니 이번 버젼에서는 성능, 안정성등 눈에 보이지 않는 부분에 주력하는 것 같기도 합니다.

아이폰으로 맥라이프의 화룡점정을 찍을려고 하는데 기다리는 시간이 너무 기네요. 조만간 한국에서도 아이폰이 출시된다는 좋은 소식이 들리기를 바랍니다. 수입하지 않았으면 하는 것은 잘도 수입되는데 간절히 바라는 것은 수입이 안되네요. ^^;

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

Tumblebugs 드디어 클리어!  (2) 2008.06.18
맥북 DVI 어댑터  (2) 2008.06.16
맥세이프 전원 아답터  (6) 2008.05.20
요즘 근황...  (2) 2008.05.19
맥북을 구입했습니다  (8) 2008.05.14
AND

iOS 2008. 5. 26. 14:05
사용자 삽입 이미지
어제 iPhone SDK를 다운로드 받고 설치를 해보았습니다. SDK는 애플의 다운로드 페이지에서 받으실 수 있습니다. 실행환경은 OS X 10.5.2 이상의 인텔맥에서만 사용할 수 있습니다. 최신 버젼은 2008년 5월 8일에 올라 왔으며 파일크기가 1GB가 조금 넘었습니다.

 Xcode 3과 레오퍼드의 개발툴들을 잘 몰라서 설치 후 무엇이 추가되고 변경되었는지는 잘 모르겠습니다. 다만 Xcode와 Dashcode에서 차이점을 발견할 수 있었습니다.

1. Xcode
그러고 보니 아직 Xcode 3에서 한번도 New Project를 실행해 본적이 없었습니다. 그렇지만 아래의 iPhone OS란 메뉴가 SDK 설치로 새로 생겼을 것으로 짐작은 됩니다.

사용자 삽입 이미지

이름을 보니까 아이폰 SDK에서 사용하는 Cocoa는 'Cocoa Touch'로 부르는 것 같습니다. 일단 'Cocoa Touch Application'을 선택하고 프로젝트를 만들어 보았습니다.

사용자 삽입 이미지
프로젝트 명을 'iPhoneSDK'로 하였더니 좌측과 같은 파일들이 기본적으로 생성되었습니다.
 
기존 Cocoa 프로젝트에서 볼 수 있었던 파일들도 보이고 iPhoneSDKAppDelegate 클래스와 MainWindow.xib와 몇개의 프레임워크등 새로 추가된 부분들도 보입니다.

NIB Files가 비어 있어 순간 인터페이스빌더를 지원하지 않는가 생각했는데 MainWindow.xib를 더블클릭하니 인터페이스 빌더를 볼 수 있었습니다. nib의 n이 NeXTSTEP을 의미하는 것으로 알고 있는데 xib의 x가 OS X를 의미하는지는 모르겠습니다. (나중에 OS X 어플리케이션으로 만들어 봐도 nib 파일 대신 xib가 생겼습니다. 이 부분은 Xcode 3에서 변경된 것 같습니다.)

사용자 삽입 이미지
   
우측에 생략된 전체 이름은 'I PhoneSDK App Delegate' 입니다. 

사용자 삽입 이미지
라이브러리 팔레트에서는 좌측과 같이 사용할 수 있는 오브젝트나 컨트롤들의 목록이 있습니다. 이전에 아이폰의 사진에서 보았던 버튼이나 UI들도 보입니다.

몇개 끌고 와서 윈도우에 배치를 해 보았습니다. 실제 구현은 아직 모르기 때문에 무조건 빌드를 하고 실행을 해 보았습니다.





사용자 삽입 이미지
특이하게 애플은 일반적으로 사용하는 에뮬레이터가 아니라 시뮬레이터라고 이름을 붙였습니다. 아이폰 시뮬레이터를 살펴 보는데 아직 베타 버젼이라 그런지 제가 잘 못 해서 그런지 실행된 어플리케이션의 입력란에 포커스가 갈 경우에는 시뮬레이터가 다운되었습니다. 


아래의  좌측은 인터페이스 빌더에서 작업한 모습이고 우측은 빌드 후에 아이폰 시뮬레이터에서 실행된 모습니다.

사용자 삽입 이미지

자동으로 생성된 코드들은 아래와 같습니다. main에 추가 된것은 UIApplicationMain에 대한 호출입니다. 실제 작업은 그 이름과 같이 AppDelegate 클래스에서 수행해야 하는 것 같습니다. 아마 UIKit이 아이폰의 핵심 프래임워크 같습니다.

main.m
#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {
   
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

iPhoneSDKAppDelegate.h
#import <UIKit/UIKit.h>

@interface iPhoneSDKAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UIWindow *window;
}

@property (nonatomic, retain) UIWindow *window;

@end

iPhoneSDKAppDelegate.m
#import "iPhoneSDKAppDelegate.h"

@implementation iPhoneSDKAppDelegate
@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {   
    // Override point for customization after app launch
}

- (void)dealloc {
    [window release];
    [super dealloc];
}

@end


2. Dashcode
혹시나 하는 마음에 Dashcode도 실행해 보았습니다. 아래와 같이 New Project에서 Web Application이란 추가된 항목이 있었습니다.

사용자 삽입 이미지

이전 포스팅에서 한번 보았던 RSS를 선택하고 새 프로젝트를 만들었습니다. 이전과 동일하게 속성의 Feed URL에 올블로그 주소만 입력하고 실행해 보았습니다. 아래와 같이 시뮬레이터가 실행되었습니다.

사용자 삽입 이미지
아마 Dashcode로 만든 어플리케이션은 사파리내에서 실행되는 거 같습니다. 웹어플리케이션이니까 당연히 웹플랫폼에서 실행되겠지만 주소창이나 브라우져의 UI들은 안 보여 줄 것으로 생각했는데 아닌 것 같습니다.

아직 Xcode 3도 모르고 간만 본 상태에서 조금 이른 생각 같지만 iPhone에서의 개발은 기존의 다른 모바일 플랫폼 보다 쉬운 것 같습니다. 신경써야 될 폰이 아이폰 딱 하나인 것도 개발자 입장에선 편할 것 같고요. 개발자료들도 ADC에 충분한 것 같으니 많은 어플리케이션들이 나올 것 같습니다.
SDK와 툴들을 대충 둘러 보면서 느낀 첫번째 생각은 우리나라에 나오기만 하면 꼭 아이폰을 사야 겠다는 것이었습니다. 비록 에뮬 환경에서 일부분만 본 아이폰이지만 화면과 UI가 환상이었습니다. 에뮬레이터로 핸드폰 뽐뿌 받기는 처음이었습니다.
AND

이전에 올블로그 위젯을 올린 적이 있는데 RSS 리더기나 다른 좋은 관련 툴들이 많이 있어 업그레이드를 하지 않았습니다. 후에 Dashcode를 이용해 다시 만들어 볼려고 했는데 데모 사용기간이 지나 한동안 잊고 있다가 레오퍼드를 사용하면서 다시 Dashcode를 쓸 수 있게 되었습니다.
 
그래서 Dashcode를 사용하여 다시 만들어 볼려고 했는데, RSS 템플릿을 쓰니 다운로드 받고 설치하는 것 보다 그냥 만드는게 빠를 정도로 너무 쉽기 때문에 RSS 템플릿을 사용하여 위젯을 만든는 방법만 간단하게 설명할려고 합니다.

1. 프로젝트 생성
Dashcode를 처음 사용하시는 분들은 이전 관련 포스팅을 참조 하시면 도움이 되실 것 입니다. 먼저 Dashcode를 실행합니다. 아래와 같이 템플릿 선택화면이 나오면 'RSS 템플릿'을 선택하고 우측 하단의 'Choose' 버튼을 클릭합니다.

사용자 삽입 이미지


2. 기본 이미지/아이콘 변경
아래의 이미지를 다운로드 하여 사용하시거나 원하는 디자인으로 직접 배경과 아이콘 이미지를 사용하셔도 됩니다.

아래와 같이 좌측의 Default Image를 선택한 후에 배경파일(all.png)을 드래그 하여 가져다 놓습니다. 동일하게 하단의 Widget Icon을 선택한 후에 Icon.png 파일을 드래그 하여 놓습니다.

사용자 삽입 이미지


3. 전면(front) 설정
사용자 삽입 이미지

상단에서 front를 선택하면 좌측과 같이 front를 구성하고 있는 목록들을 볼 수 있습니다.

이중에서 fontImg, topRectangleShape, bottomRectangleShape, feedTitle을 선택한 후에 delete 키를 눌러 삭제합니다.

 







다시 배경 이미지 파일을 마우스로 드래그 해서 아래와 같이 위치 시킵니다.
사용자 삽입 이미지


4. RSS URL 설정
사용자 삽입 이미지
이제는 RSS를 가져올 주소를 설정해 보겠습니다. 위의 과정은 생략하시고 이 부분만 설정하시면 3초만에 자신만의 RSS 리더기를 만들 수 있습니다.

설정을 위해서 좌측과 같이 Provide RSS feed에서 RSS Properties 앞의 삼각형 버튼을 클릭합니다.



화면에서 Properties 하단의 Feed URL 입력 부분에 아래와 같이 올블로그의 '가장 많이 추천 받은 글'의 RSS주소를 입력합니다.
사용자 삽입 이미지


5. 실행
메뉴에서 'File/Save'를 클릭하여 프로젝트를 저장하고 'File/DeployWidget to Dashboard'를 클릭하여 제작한 위젯을 대쉬보드로 보냅니다. 이제 대쉬보드에서 아래와 같이 올블로그 위젯을 보실 수 있습니다.
사용자 삽입 이미지

사용자 삽입 이미지
하단의 설정버튼(i)을 클릭하면 좌측과 같이 출력될 내용의 길이를 설정 할 수 있습니다.

AND

이번 장에서는 제가 어렸을 적에 자주 하던 숫자 야구게임을 만들어 보겠습니다. 게임 규칙은 다음과 같습니다. 시작되면 컴퓨터는 임의의 세자리 숫자를 설정합니다. 플레이어는 연속하여 세개의 숫자를 입력합니다. 플레이어가 입력한 숫자중에 컴퓨터에 설정한 숫자와 일치하는 수가 있으면 그 갯수만큼 strike로 판정됩니다. 숫자에 따른 각각의 결과를 보고 컴퓨터가 설장한 세개의 숫자를 유추해 내어 모두 알아 맞추면 3 Stike가 되어 게임이 종료됩니다.

사용자 삽입 이미지

예를 들면 컴퓨터가 '379'를 설정하였다면, 사용자 입력에 따라 결과는 아래와 같습니다.

  • 126 - 3 ball (일치하는 숫자 없슴)
  • 589 - 1 strike 2 ball ('9' 1개 일치)
  • 389 - 2 strike 1 ball ('3', '9' 2개 일치)
  • 379 - 3 strike (3개 모두 일치, game over)

1. 변수 생성

이번 장에서는 생성하는 변수가 많습니다. 아래의 변수들을 위의 변수들을 Variables에서 [Make a variable]을 클릭하여 생성합니다. 각 변수의 사용 용도는 다음과 같습니다.
 
* inputCount : 사용자가 숫자를 입력할 때 마다 1씩 증가합니다. 3개의 숫자를 입력 받기 때문에 3까지 증가 한 후 다시 0으로 설정 됩니다.

* inputNumber: 사용자가 현재 입력한 숫자 입니다.

* number1: 컴퓨터가 설정한 첫번째 숫자 입니다.
* number2: 컴퓨터가 설정한 두번째 숫자 입니다.
* number3: 컴퓨터가 설정한 세번째 숫자 입니다.

* user1: 사용자가 입력한 첫번째 숫자 입니다.
* user2: 사용자가 입력한 두번째 숫자 입니다.
* user3: 사용자가 입력한 세번째 숫자 입니다.

* strike: 컴퓨터와 사용자 숫자의 일치하는 갯수입니다.
* try: 현재 사용자가 시도하는 횟수 입니다.

사용자 삽입 이미지
try, user1, user2, user3만 사용자에게 보여 줍니다. 위 변수들의 출력에 체크를 합니다. 캔버스에서 변수들을 더블 클릭하여 좌측과 같이 모양을 변경합니다. try 밑의 변수들은 좌측 부터 각각 [user1][user2][user3] 입니다. 


2. 스크립트 작성


1) 사용자 입력 처리
사용자 삽입 이미지

위와 같이 사용자 숫자 입력에 대응하는 모든 스프라이트들을 생성합니다. 각각의 숫자가 클릭되면 [set inputNumber to (num)]으로 현재 입력된 숫자를 inputNumber 변수에 저장합니다. 그런 후에 다른 스크립트에서 처리하기 위해 input 메시지를 보냅니다.

2) 시작 시 처리
게임이 시작될 때 각 변수들을 초기화하는 스크립트 입니다.
사용자 삽입 이미지

a. 숫자 설정
[pick random(start) to (end)] 는 start부터 end 사이에서 임의의 한 수를 생성합니다. 사용자가 맞추어야 하는 number1, number2, number3에 임의의 세개의 수를 생성하여 할당합니다.

b. 변수 초기화
사용하는 변수들을 0으로 초기화 합니다. 시도 횟수인 try만 1로 선택합니다. 초기화가 완료되면 사용자가 수를 입력 하도록 캐릭터가 "input number"를 출력합니다.

3) input 메시지 처리
위에 사용자가 숫자를 입력하였을 때 실행되는 [when [num] key pressed]에서 보내는 메시지를 처리하는 스크립트입니다.

사용자 삽입 이미지

a. 초기화
[if <(inputCount) > (2)>] 사용자가 3개의 숫자의 입력을 완료하고 다음 입력을 하는 지를 검사하고, 다음 시도이면 필요한 변수들을 0으로 초기화 합니다. 사용자의 시도 횟수를 알려주는 try만 1 증가시켜 줍니다.

b. strike 판별
[change inputCount by (1)] 먼저 현재 입력 카운트(inputCount)를 1 증가시킵니다. 위의 스크립트중 잘려진 if블럭의 전체 모습은 아래와 같습니다.

사용자 삽입 이미지

현재 입력된 inputNumber가 컴퓨터가 저장하고 있는 number1, number2, number3중 하나와 일치할 경우에는 [change strike by (1)] 로 strike를 1 증가시킵니다.

c. 입력횟수에 따른 처리
inputCount에 따라 사용자에게 보여 줄 user1, user2, user3를 설정합니다. 3번째 입력이 되어 완료되었을 경우에는 검사를 위해 [broadcast [check] and wait] 명령으로 check 메시지를 발송합니다.

4) check 메시지 처리
사용자가 세개의 숫자를 입력하였을 때 결과의 처리를 위해 실행되는 스크립트 입니다.

사용자 삽입 이미지
a) strike가 0일 경우
사용자가 입력한 세개의 숫자중에 일치하는 숫자가 하나도 없을 경우입니다. 캐릭터가 "Oops! 3ball"이란 메시지를 출력합니다.

b) strike가 1일 경우
"1 strike 2 ball"이란 메시지를 출력합니다.

c) strike가 2일 경우
"2 strike 1 ball"이란 메시지를 출력합니다.

d) strike가 3일 경우
사용자가 입력한 숫자가 모두 일치한 경우 입니다. 캐릭터가 "3 strike"를 1초간 출력 한 후에 "You Win!!!" 이란 메시지를 출력하고 게임을 종료 합니다.

[stop all ( )]는 사용자가 Stop 버튼을 클릭한 것과 동일하게 스크립트 실행을 중단합니다.



이제 완료되었습니다. 시작버튼을 클릭하여 테스트 해 봅니다. 세개의 숫자를 입력하면 결과가 나옵니다. 결과를 확인하고 컴퓨터가 설정한 세개의 숫자를 유추하여 다시 숫자를 입력하는 것을 반복합니다. 세 숫자를 모두 맞추면 게임이 종료 됩니다. 

'프로그래밍 강좌 > 스크래치' 카테고리의 다른 글

4.7 [중급] 묵찌빠 게임  (0) 2008.06.16
4.6 [중급] 카드 맞추기  (0) 2008.06.11
4.4 [중급] 영단어 퀴즈 게임  (0) 2008.05.19
4.3 [중급] 피아노 만들기  (6) 2008.05.18
4.2 [중급] 핑퐁 게임  (2) 2008.05.14
AND

맥북 패키지는 매우 단순하게 구성되어 있습니다. 설치 DVD, 메뉴얼, 클리닝 천 이외에 전원 아답터가 들어 있습니다. 이중 맥세이프는 이전부터 애플 홈페이지를 통해 대충 알고 있었습니다.

이전에 노트북을 구입했을 때는 아답터는 관심도 없이 바로 노트북에 연결하여 전원을 켜보았습니다. 하지만 맥북의 아답터는 빨리 전원을 연결하여 켜보고 싶은 욕망을 1분 정도 잠재울 만큼 살펴 볼만한 구석이 있었습니다. 

사용자 삽입 이미지
우선 아답터 본체의 모습입니다. 위에는 애플로고가 보일 듯 안 보일 듯 음각으로 각인되어 있습니다. 제품 사진의 좌측에 홈이 있는 곳으로 아답터나 연장선을 연결할 수 있습니다.

우측의 금속재질로 튀어 나온 부분은 컨센트 아답터 연결 시에 홈이 파인 부분에 고정되어 안정적으로 연결되도록 해줍니다.


사용자 삽입 이미지
노트북과 연결되는 부분 입니다. 처음 연결할 때 자석에 의해서 '톡' 소리와 함께 쏙 달라 붙는 손맛이 신선했던 기억이 납니다. 재미있어서 두세번 뺐다 껴보았습니다.

사용자 삽입 이미지
충전이 완료되면 우측과 같이 녹색 빛이 나옵니다. 실제로 보면 이쁘더군요.


사용자 삽입 이미지

아답터를 보다가 뒤쪽에 홈을 발견하고 양쪽을 제껴 보았더니 위의 이미지와 같이 토끼의 얼굴과 같은 모양이 되었습니다. 위치와 모양을 보면 직관적으로 이동시에 선을 감는 용도로 사용하는 것을 알 수 있습니다. 다 감은 후에는 우측의 이미지와 같이 맨 앞의 컨넥터 바로 밑에 있는 장치로 고정할 수 있습니다.

사용자 삽입 이미지

아답터를 끼워서 직접 연결할 수도 있고 거리가 멀 경우에는 연장선을 끼워 사용할 수 있습니다. 아답터 자체 선이 2m정도 되고 연장선도 2m 가량 됩니다. 합치면 4m 정도 되니 웬만한 환경에선 사용 시에 길이로 인한 불편은 없을 것 같습니다.

사용자 삽입 이미지
별도로 여행자 아답터 키트를 구입하시면 나라마다 다른 다양한 콘센트 환경에서 사용할 수 있습니다. 이 키트는 맥북 뿐만 아니라 애플의 다른 노트북과 아이팟의 독커넥터에서 사용할 수 있습니다.


사용자 삽입 이미지
노트북의 아답터는 대부분 좌측 소니 바이오의 그것과 같이 검은색 직사각형으로 동일하게 생겼습니다. 노트북의 아답터는 일단 안정성과 휴대성이 우선이고 디자인과 기능성은 차후의 문제일 것입니다.

하지만 일관적인 디자인이 적용된 맥북의 아답터는 아주 작은 부분이지만 제품에 대한 만족도를 높여 주는 것 같습니다. 작은 아답터 하나에서도 보기좋고 단순하고 실용적인 애플 하드웨어의 장점을 잘 보여 주고 있는 것 같습니다.

사실 획기적인 아이디어도 아니고 대단한 기술이 적용된 것도 아닙니다. 다만 드러나지 않는 부분에 남들 보다 신경을 조금 더 쓴 것으로 보입니다. 하지만 모두들 알고는 있지만 쉽게 실천하기는 힘든 부분 같습니다.

남들도 다 그렇게 해서, 작은 부분이라 별로 볼 사람이 없을 것 같아서, 또는 귀찮거나 시간이 없다는 핑계로 타성에 젖어 일하던 제 자신도 반성을 해야 할 것 같습니다. 누군가가 제가 만든 것을 사용하면서 제가 느꼈던 작은 감동을 받는 것처럼 기분 좋은 일은 없을 것 같습니다.

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

맥북 DVI 어댑터  (2) 2008.06.16
휴~ 아이폰 3G  (4) 2008.06.10
요즘 근황...  (2) 2008.05.19
맥북을 구입했습니다  (8) 2008.05.14
부러운 애플의 건방짐  (4) 2008.05.07
AND

맥북을 가지고 아들녀석과 이러고 놀고 있습니다. 전 사무실에서 찍은 것 밖에 없는데 이 녀석은 언제 찍었는지 할머니랑 찍은 것도 있고 다양하게 많이 찍었더군요.

사용자 삽입 이미지

몇주 전에 올초에 올린 2008년 계획이란 포스팅을 다시 읽어 보고 시간이 날 때 마다 스크래치로 달리고 있습니다. 스크래치 강좌를 빨리 끝내고 cocoa 튜토리얼 추가랑 공개 어플리케이션도 하나 만들어 년초에 세운 계획을 지켜 볼려고 생각하고 있습니다.

요새는 맥북과 레오퍼드의 매력에 흠뻑 빠져 지내고 있습니다. 레오퍼드는 겉으로 보기에는 독을 빼고  타이거에 비해 달라진게 별로 없다고 생각했었는데, 몇 일 사용해 보니 세세한 부분이 많이 바뀌고 업그레이드 된 것 같습니다. 이전에는 RSS 리더기나 이미지 편집 툴, 일정관리, ToDo 관리 등을 기본적으로 포함된 iCal, iPhoto등을 사용하지 않고 다른 프로그램을 사용했었는데 이제 mail, iCal, iPhoto에서 해결 할려고 적응 중입니다. 또한 스페이스와 스택은 효율적인 공간활용이 가능하고 정말 편리한 것 같습니다.

맥 라이프를 즐기는라 아직도 Xcode랑 Dashcode는 실행도 못해 봤네요. 아껴 놨다가 충분한 시간이 있을 때 열어 봐야 겠습니다.

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

휴~ 아이폰 3G  (4) 2008.06.10
맥세이프 전원 아답터  (6) 2008.05.20
맥북을 구입했습니다  (8) 2008.05.14
부러운 애플의 건방짐  (4) 2008.05.07
블로그 첫 돌을 넘겼습니다  (16) 2008.05.06
AND

이번 장에서는 영어 단어를 맞추는 간단한 퀴즈게임을 만들어 보겠습니다. 스크래치 케릭터가 설명하는 내용을 보고 1~4번까지의 보기중에서 정답에 해당하는 번호를 선택하는 게임입니다. 5단계까지 진행되며 정답이면 score가 1점 올라 갑니다.

사용자 삽입 이미지

1. 변수 만들기

사용자 삽입 이미지
좌측과 같이 Variables의 [Make a variable] 버튼을 클릭하여 answer, score, step 3개의 변수를 만듭니다.

answer는 사용자가 선택한 1~4의 값 중 하나를 저장하는 용도록 사용합니다.

score는 점수로 정답과 일치할 때만 1씩 증가됩니다.

step은 현재 진행 단계를 나타내며 총 5개의 문제까지 진행됩니다.

score와 step만 체크 표시를 하여 사용자가 볼 수 있도록 합니다.




2. 사용자 입력 처리

1) 초기화
현재 단계(step)를 1로 점수(score)를 0으로 설정하고, 첫번째 문제인 "A round fruit..."을 출력합니다. change 메시지를 전송하여 첫번째 답들이 출력되도록 합니다.
 
사용자 삽입 이미지


2) 사용자 입력 처리
사용자가 정답을 선택하고 1~4의 숫자를 입력하였을 때 실행되는 스크립트 입니다.

사용자 삽입 이미지

[set answer to (입력 값)]
  사용자가 현재 입력한 값을 answer 변수에 저장합니다.

[broadcast [check] and wait]
  입력한 값을 정답과 비교하고 처리하도록 check 메시지를 전달합니다.

[change step by (1)]
  현재 진행단계를 1 증가합니다.

[broadcast [change] and wait]
  다음 문제를 보여 주도록 change 메시지를 전달합니다.


3. 정답 처리
 
사용자가 정답을 입력하면 check 메시지를 받게되어 실행됩니다. 각 단계의 정답을 검사 하고 정답이면 점수를 1 증가한 후에 'Good'을 2초간 출력하고, 오답이면 'Wrong'을 2초가 출력한 후에 다음 문제를 출력합니다. 

사용자 삽입 이미지

[if <(step)=(단계)>]
  현재 단계를 검사하여 각 단계마다 다른 정답들을 검사하고 다음 문제를 출력 할 수 있도록 합니다. 위의 이미지에서는 1, 2 단계만 나오고 3, 4, 5는 생략되었습니다.

[if <(answer)=(정답)>]
  각 단계마다 정답을 비교합니다. 위의 스크립트를 보면 step이 1일 경우에는 정답은 2이며 step이 2일경우에 정답은 3입니다.
 

4. 답변 처리

1) 스프라이트 생성
페인트 에디터를 클릭하여 스프라이트를 생성합니다. 좌측 도구에서 'T'라고 되어 있는 버튼을 선택 후에 아래와 같이 4개의 답변들을 입력합니다. 이 답변은 첫번째 문제의 답변으로 사용됩니다.

사용자 삽입 이미지

2) 코스튬 추가
아래와 같이 Costumes에서 New costume: [Paint] 버튼을 클릭하여 다른 문제들의 답들을 코스튬으로 추가합니다. 답들은 각 단계에 맞추어 입력하시면 됩니다.

사용자 삽입 이미지

3) 스프라이트 작성
답변 스프라이트의 스크립트는 change 메시지를 받았을 때 현재 단계에 맞는 예문 코스튬을 출력하는 단순한 작업만 합니다. 

사용자 삽입 이미지

이제 완료되었습니다. 시작 버튼을 클릭하여 각 문제에 맞는 답을 선택하여 점수를 확인해 봅니다. 각자 질문과 답을 변경하거나 추가하여 다양한 퀴즈게임을 만들 수 있습니다.

아래의 압축파일을 다운로드 받으시면 전체 소스를 보실 수 있습니다.

AND

이번 장에서는 키보드로 연주할 수 있는 피아노를 만들어 보겠습니다. 악기와 볼륨을 선택할 수 있고 해당 건반이 선택되었을 때 음계를 보여 줍니다. 키보드는 a(도), s(레), d(미), f(파), g(솔), h(라), j(시), k(도)로 매치됩니다.

사용자 삽입 이미지


1. 스프라이트 생성

아래와 같이 피아노와 음계 스프라이트를 생성합니다. 이미지는 아래의 압축파일을 다운로드 받으신 후 사용하시면 됩니다.

사용자 삽입 이미지


각 음계 스프라이트들을 마우스로 드래그 하여 아래와 같이 해당 건반위에 위치하게 합니다.

사용자 삽입 이미지
 

2. 스크립트

1) 메시지 생성
사용자 삽입 이미지
이전 장에서 처럼 broadcast 블럭의 화살표를 클릭한 후, 'new..'를 선택하여 좌측과 같이 각 음계의 메시지를 생성합니다.

도는 높은 도와 낮은 도 두개가 있기 때문에 높은 도는 'do2'로 지정합니다.




2) 음계 스크립트
모든 음계 스크립트는 아래와 같이 동일합니다. 한가지 다른 점은  [when i receive [message]] 블럭의 메시지에 각 음계의 메시지(do, re, mi, pa...)가 들어 갑니다. 아래는 도 스크립트이며 각 음계마다 아래와 같이 스크립트를 작성하며 메시지(do, re, me..)를 음계에 맞게 수정합니다.
사용자 삽입 이미지

이 스크립트가 하는 일은 간단합니다. 시작되면 [hide]로 음계 이미지를 숨깁니다. 그런 후에 [when i receive [message]] 에서 각 건반의 메시지를 받을 경우에 0.5초간 보여 준 후 다시 숨깁니다. 위의 do 메시지는 사용자가 키보드에서 'a'를 눌렀을 경우에 발생 합니다.

3) 피아노 스크립트
a. 변수 생성
Varaibles의 [Make a variable]을 클릭하여 instrument, volume, oldInstrument, oldVolume 변수를 각각 생성합니다. instrument는 현재 선택된 악기를 저장하며, voloume은 말 그대로 현재 볼률을 저장합니다.

oldInstrument, oldVolume은 각각 이전의 볼륨과 악기를 저장합니다. 사용자에 의해 instrument, volume이 변경되었는지의 검사를 위해서 사용됩니다. 아래의 스크립트에서 forever 블럭 내부를 보시면 용도를 알 수 있습니다.

사용자 삽입 이미지

b. 시작시 초기화
[set volume to (50)] 현재 볼륨을 중간(50)으로 설정합니다.
[set instrument to (1)] 현재 악기를 1로 선택합니다.
[set oldVolume to (volume)] oldVolume을 Volume과 같게 만듭니다.
[set oldInstrument to (instrument)] oldInstrument를 Instrument와 같게 만듭니다.

사용자 삽입 이미지
[set instrument to [값]]의 입력창내의 화살표를 클릭하시면 좌측과 같이 128가지의 선택 가능한 악기들이 나옵니다. 이 악기중 하나를 선택할 수 있습니다.

이 프로그램에서는 1~100까지의 악기만 선택할 수 있습니다.


c. 무한루프
forever 내에서는 현재 볼륨(volume)과 악기(instrument)가 사용자에 의해서 변경되었을 경우 볼륨과 악기를 다시 설정합니다. 설정 후에는 변경된 값들을 다시 old 변수들에 저장하여 같은 값을 다시 지정하지 않도록 합니다.

d. 사용자 입력 처리
사용자가 건반에 해당되는 키를 눌렀을 때는 아래와 같은 명령이 실행됩니다.

[play note [값] for (0.3) beats] note 다음에 오는 값은 음의 높이를 설정합니다. 48(낮은 도)부터 반음을 포함하여 1씩 증가 됩니다. beats 앞의 값은 음의 길이를 설정합니다. 여기서는 0.3으로 설정했습니다. 더 짧게 끝낼려면 0.3보다 작은 값을 입력합니다.

그후에 [broadcast [메시지]]를 이용하여 각각의 메시지를 보냅니다. 이 메시지를 받은 각 음계의 스프라이트들은 잠시 나타났다 사라지게 됩니다.

이제 완료되었습니다. 시작버튼을 클릭하여 테스트를 하여 봅니다.
사용자 삽입 이미지
캔버스 내의 instrument와 volume값을 변경하여 실행해 봅니다. 좌측 하단의 동그란 버튼을 드래그 하면 값들이 변경됩니다.

사용자 삽입 이미지
사용자 삽입 이미지
변수를 더블클릭하면 좌측과 같이 모양이 차례대로 변경됩니다.


AND

이번 장에서는 벽에 반사되는 공을 번갈아 가며 막아 내는 간단한 2인용 핑퐁 게임을 만들어 보겠습니다. 사용되는 키는 아래와 같습니다.

  • q - 플레이어1 Up
  • a - 플레이어1 Down
  • o - 플레이어2 Up
  • l - 플레이어2 Down

q와 a는 플레이어 1이 o와 l은 플레이어 2가 사용합니다.

사용자 삽입 이미지

1. 스크립트/배경 설정
사용자 삽입 이미지
배경과 바, 공 이미지를 페인트 툴에서 직접 그리거나 아래의 압축 파일을 다운로드 받아서 사용합니다.





사용자 삽입 이미지
첫 바 이미지로 Sprite1을 생성한 후에 해당 스프라이트에 마우스 우클릭을 하면 좌측과 같은 메뉴가 나옵니다.

여기서 duplicate를 클릭하면 똑 같은 스프라이트가 Sprite2로 복사됩니다. 


2. 바 스크립트
* 브로드캐스트(broadcast)
스프라이트는 다른 스프라이트에게 동작을 지시하는 등 서로 통신을 할 필요가 있습니다. 이를 위해서 broadcast를 사용합니다. 보내는 쪽에서는 [broadcast [message]] 명령어를 이용해 특정 메시지를 보내고 받는 쪽에선 [when i receive [message]]로 메시지가 발생하였을 때의 동작을 처리할 수 있습니다. 아래의 사용 예를 보시면 이해하기가 쉬울 것입니다.
 
사용자 삽입 이미지

왼쪽은 Sprite1의 스크립트이고 오픈쪽은 Sprite2의 스크립트 입니다. 거의 동일하며 a, q를 입력받는 것과 o, ㅣ을 입력받는 차이만 있습니다.

[if <touching [Sprite3]>] Sprite3은 공 스프라이트 입니다. 공과 바가 충돌했을 경우에는 broadcast를 이용해 reflex란 메시지를 보냅니다.

사용자 삽입 이미지
'reflex'란 메시지를 만들기 위해서 좌측과 같이 broadcast 블럭의 화살표를 클릭한 후에 new 메뉴를 선택합니다. 메시지 이름을 'reflex'로 입력하고 OK버튼을 클릭합니다. 여기서는 [broadcast [message] and wait] 를 사용합니다. 'and wait'가 추가되면 메시지를 발송하고 응답을 받을 때까지 기다립니다. 'and wait' 없이 [broadcast]를 사용하면 공이 바에 충돌하는 동안 계속 메시지가 발생하게 됩니다.


3. 공 스크립트
사용자 삽입 이미지
이전 장에서 설명한 것과 같이 Variables의 [Make a variable]  버튼을 클릭하여 좌측과 같이 ball_x, ball_y, score1, score2 네개의 변수를 생성합니다.

ball_x와 ball_y는 현재 공의 방향을 나타내는 변수 입니다. ball_x가 음수(-)이면 공은 좌측으로 움직이고 양수(+)면 우측으로 움직입니다. ball_y가 음수(-)이면 공이 위쪽으로 양수(+)면 아래로 움직입니다.

score1은 플레이어1의 점수이며 score2는 플레이어2의 점수 입니다. 점수는 스테이지에 보여져야 하므로 좌측의 체크박스를 선택합니다.










스크립트는 아래와 같이 시작시 반복하면서 공을 움직이고 벽과 충돌하는지 검사하는 부분과 플레이어의 바로 부터 메시지를 받았을 경우에 공의 방향을 변경하는 2개의 부분으로 이루어져 있습니다.

사용자 삽입 이미지

1) 변수 초기화
게임이 시작될 때 변수들을 초기화 합니다.

[set ball_x to (2)], [set ball_y to (2)] 초기 공의 방향을 우상단(45도)으로 시작되도록 합니다. ball_x, ball_y에 대입되는 (-)2는 한 프레임당 움직이는 속도 입니다. 숫자가 증가되면 공의 움직임이 빨라 집니다. 그외 score1, score2 점수를 0으로 설정합니다.

2) 공 이동
그 아래있는 [chang x by (ball_x)], [chang y by (ball_y)]는 공의 좌표를 변경해 공이 이동하도록 합니다. 공의 x, y 좌표에 각각 ball_x, ball_y 만큼 더해 집니다.

3) 벽과의 충돌 검사
[if <(y position)  > (170)>] 공이 하단의 벽과 충돌하였을 경우 입니다. ball_y를 -2로 변경하여 공이 반대로 위로 움직이도록 합니다.

[if <(y position)  < (-170)>] 공이 상단의 벽과 충돌하였을 경우 입니다. ball_y를 2로 변경하여 공이 반대로 아래로 움직이도록 합니다.

4) 득점
[if <(x position)  > (220)>] 공이 우측의 벽과 충돌하였을 경우 이며, 플레이어1이 득점을 하게 됩니다. 이 경우에는 공의 위치를 중앙에서 다시 시작하도록 하면 플레이어1의 점수에 1을 증가합니다.

[go to x:(0) y:(0)] 공을 화면의 중앙에 위치하게 합니다.

[set ball_x to (-2)], [set ball_y to (2)] 플레이어1이 득점을 하였기 때문에 이긴 사람이 먼저 공격을 받도록 시작 시 ball_x를 -2로 설정하여 플레이어1쪽으로 진행되도록 합니다.

[change score1 by (1)] 플레이어1의 점수를 1 증가 시킵니다.

아래의 [if <(x position)  < (-220)>] 는 좌측의 벽에 충돌하여 플레이어2가 득점을 한 경우이며 위와 동일한 작업을 합니다.

이제 완료 되었습니다. 깃발(시작) 버튼을 눌러 플레이 해 봅니다. 플레이어 1은 q, a로 플레이어 2는 o,l로 바를 조종합니다. 갈수록 스크립트가 많아져 이전과 중복되는 설명은 생략하였습니다. 어려운 부분은 이전 포스팅을 참조 하시기 바랍니다.


AND

사용자 삽입 이미지
저번 주에 인터넷에서 구입을 하고 어제 저녁에 받았습니다. 2.4GHz 흰색으로 구입했는데 받아 보니 역시나 이쁘네요. 단아 하다는 느낌이 들었습니다.

저같은 중년 아저씨는 검은색이 더 어울릴 것 같은데 맥은 흰색이 라는 생각으로 선택했습니다.

이것 저것 만져 보고 달라진 레오퍼드를 살펴 보는라 어제는 거의 밤을 새웠습니다. 아들녀석이 포토부스를 너무 재밌어 해서 서로 해볼려고 싸웠습니다. 오늘 아침에도 눈뜨자 마자 맥북을 만지고 있더군요. 빨리 Wii를 사서 녀석의 관심을 돌려야 할 것 같습니다.

노트북을 많이 써 본 편은 아니지만 여지껏 구입한 노트북중에 가격대비 가장 만족도가 높은 것 같습니다. 다만 에이샵에서 들어 본적은 있는데 실제 들고 다녀 보니 약간 무겁게 느껴지긴 합니다. 이전 맥 미니처럼 메모리 추가하고 하드도 빠른 것으로 교체할려고 했는데 막상 써보니 그다지 업그레이드의 필요성을 못 느끼겠네요. 지금까지는 부트캠프를 사용하지 않았는데 이번엔 VS를 위해서 써볼려고 합니다. 사용해보고 별 무리 없으면 업그레이드 없이 그냥 쓰기로 했습니다.

이것저것 설치하고 설정하는라 아직 Xcode와 다른 개발툴들은 못 써봤는데 많이 기대가 됩니다. 맥북 하나로 아침부터 아이처럼 기분이 좋아 계속 싱글벙글 해서 있으니 한편으론 나이 값을 못한다는 생각도 듭니다. ^^

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

맥세이프 전원 아답터  (6) 2008.05.20
요즘 근황...  (2) 2008.05.19
부러운 애플의 건방짐  (4) 2008.05.07
블로그 첫 돌을 넘겼습니다  (16) 2008.05.06
오~ 파이어폭스3 좋네요  (16) 2008.04.04
AND

이전에 올린 베타버젼에 특별한 오류가 있다는 덧글이 없어 무소식이 희소식이란 생각으로 몇가지 수정을 하여 정식으로 업로드 합니다. (주말에 작업을 할려고 했는데 놀아야(?)될 것 같아 또 즉흥적으로 급조해서 올립니다)

사용자 삽입 이미지


* 변경내역
1) 폰트 확대
단어의 글이 작다는 분이 계셔서 폰트 크기를 키웠습니다. 글의 배경도 크기에 맞추어 3단계로 출력되도록 하였습니다.

2) 단어 추가
영문과 한글이 150개 정도 였는데 이번 정식에서는 각각 200개로 추가하였습니다.

* 실행환경
  • UB - PPC/Intel MAC
  • OS X - 10.4 타이거 이상

"배포는 자유롭게 하실 수 있습니다. 가능하면 출처를 명시해 주시면 감사하겠습니다"



2008.05.05

그동안 마음먹고 있었던 덕수리의 업그레이드를 휴일을 이용해 작업했습니다. 이미지는 몇일전 부터 준비가 되어 있었는데 미루다 보니 오늘에서야 완료하게 되었습니다.
 
사용자 삽입 이미지

변경된 내역들은 아래와 같습니다.

1. 사용자 환경 및 영문 추가
사용자 삽입 이미지
게임 시작시에 플레이어와 언어, 스테이지를 선택할 수 있습니다. 각 플레이어 별로 옵션과 상태를 저장하며, 처음 실행시에는 플레이어를 직접 입력하시면 됩니다.

스테이지 선택은 플레이어 별로 한글이나 영문에서 마지막까지 클리어한 스테이지내에서 선택할 수 있습니다. '항상 마지막에서'를 체크하시면 실행 시에 마지막 클리어된 스테이지가 자동으로 선택됩니다.

2. 스테이지 배경화면 변경
총 20개의 스테이지가 있으며 5스테이지 별로 배경화면이 변경됩니다. 스테이지가 진행될 수록 하단의 바탕이 올라와서 플레이를 어렵게 합니다.

사용자 삽입 이미지

3. 아이템
단어 앞에 아이콘이 붙어 있으면 입력이 완료 될 때, 아래와 같은 이벤트가 발생합니다.

사용자 삽입 이미지
이 단어는 2번 입력하여야 합니다.

사용자 삽입 이미지
현재 화면에 있는 모든 단어들이 사라집니다.

사용자 삽입 이미지
3초간 단어들이 정지하게 됩니다.

 
사용자 삽입 이미지

번개 모양의 구름이 나오면 화면이 2초 정도 깜빡이게 됩니다.




이외에 게임 화면을 확대하고, 난이도를 조절 하였습니다. 현재는 베타버젼입니다. 버그가 알려지면 수정하고 단어들을 더 추가하고, 기타 세세하게 다듬는 작업을 완료하여 정식으로 B를 때고 올리려고 합니다.  (정식 버젼은 이번 주말중에 작업을 하여 업로드 하겠습니다)

역시나 급조하여 버그가 있을 것으로 생각됩니다. 게임을 하다가 버그나 오류가 있으면 이곳에서 덧글로 알려 주시면 감사하겠습니다. OS X 10.4 (타이거) 이상 부터 실해 가능합니다.

시작화면에 그동안 열심히 독려해 주신 아힌님을 위한 작은 이스터에그가 있습니다. ^^

AND

프로그래밍 언어를 설명하는 대부분의 책이나 강좌에는 "Hello World"를 출력하는 간단한 소스로 시작하는 경우가 많습니다.

The Hello World Collection이란 웹페이지에 프로그래밍 언어별로 이 "Hello World"를 출력하는 소스의 목록이 있습니다. 1994년부터 시작된 이 작업은 전 세계 사람들의 도움으로 무려 366가지 언어(또는 라이브러리, 플랫폼)로 있다고 합니다.

흥미있는 몇가지를 살펴 보면 Objective-C는 아래와 같습니다.
#include <stdio.h>
#include <objpak.h>
int main(int argc,char **argv)
{
    id set = [Set new];
    argv++;while (--argc) [set add:[String str:*argv++]];
    [set do:{ :each | printf("hello, %s!\n",[each str]); }];
    return 0;
}

인자로 이름들을 주면 "hello, 이름" 이런식으로 출력되는 것 같습니다. C와의 차이점을 강조하기 위해 약간 오버한 것 같다는 생각도 들지만, 언어별로 특징을 강조하기 위한 것 같습니다.

Cocoa도 따로 있습니다.
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSLog(@"Hello, World!");
    [pool release];
    return 0;
}

목록중에서 제가 그나마 자신있는 언어인 한국어도 있습니다.
Korean  안녕 세상아   (annyeong, sesangah)

그냥 슥슥슥 내리면서 대충 보았는데 재밌는 것도 있고 생소한 것도 있고, 전혀 이해가 되지 않는 것들도 있네요.

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

애플 모바일미 (MobileMe) 둘러 보기  (12) 2008.07.21
스크래치 사이트 한글화  (0) 2008.07.02
OS X 코드명과 동물이름  (10) 2008.04.22
Xcode 3 시연 동영상  (4) 2008.03.26
구글 온라인 강좌 - Google Code University  (1) 2008.03.25
AND