digg에서 맥과 PC를 비교한 재미있는 이미지를 보았습니다. 역시나 끝없이 반복되는 민감한 주제라 해당 글타래에선 열띤 논쟁이 벌어지고 있습니다.
사용자 삽입 이미지
(출처:duodito.se)

몇달전 워런티 기간이 지난 맥미니가 고장이 나서 수리를 맡겼습니다. 비용이 많이 들더군요. 파워 아니면 보드 쪽 문제인 것 같은데 위 이미지와 같은 맥미니의 하드웨어 때문에 주위에 교체해서 테스트할 수 있는 하드웨어도 없고 저 혼자서는 어떻게 해볼 수가 없었습니다. 하지만 PC가 문제가 있을 때는 대부분 저 스스로 해결합니다. 이런 점도 PC의 장점이겠죠. 그러나 저 같은 경우에는 맥쪽의 장점이 더 끌리기 때문에 여러 단점을 감수하고 맥을 사용하는 것 같습니다.

위의 이미지가 등장하고 OS에 관해서는 맥 사용자 만큼 열성적인 우분투 사용자들이 가만히 있지는 않았습니다. 곧이어 아래의 이미지의 패러디 버젼이 등장했습니다. 일단 크기에서도 PC와 맥을 합친 것 만큼 자리를 차지하고 있습니다. 그리고 저런 트럭을 뭐라 부르는지는 잘 모르겠지만 역시 Geek스럽다는 생각이 드네요. ^^;;

사용자 삽입 이미지
(출처: ralree.com)

사실 안티 애플, 안티 우분투가 아닌 이상에는 대부분의 PC 사용자들은 이런 공방전에 별 관심이 없는 것 같습니다. 상대적으로 극소수의 OS X와 우분투 사용자들은 항상 관심에 목말라 하는 것 같습니다. ^^
AND

오늘 모바일미를 신청하고 가입했습니다. 어제 가입할려고 했는데 아래와 같은 메시지가 출력되면서 가입을 할 수 없었습니다. 가는 날이 장날이라고 정기점검 시간이었나 봅니다. 메시지가 영어, 독일어, 스페인어, 일어인 것 같은데 맞는지는 모르겠습니다. 늘 느끼는 것이지만 아시아에서는 역시 일본이 애플로 부터 대접을 받네요.

사용자 삽입 이미지

현재 모바일미는 60일 무료 트라이얼로 사용할 수 있습니다. 이 기간내에 서비스 해지를 하지 않으면, 가입시에 입력한 신용카드로 매년 미화로 99달러를 지불하는 것 같습니다. 99달러의 기본 서비스는 총 20GB의 용량하며 메일저장 공간으로 10GB, iDsik에서 10GB의 공간을 사용할 수 있습니다.
사용자 삽입 이미지
149달러의 Family Pack은 20GB의 저장공간에 네명까지 아이디를 제공 받아 사용할 수 있습니다. 각자 5GB씩 사용할 수 있는데 용량이 조금 부족해 보입니다. 기본 용량에서 49달러를 내면 20GB를 99달러는 40GB를 추가로 구입할 수 있습니다.

입력정보와 신용카드 정보를 입력하고 가입을 완료하면 아래와 같은 메시지가 출력됩니다.
사용자 삽입 이미지

맥과 아이폰/터치는 당연한 것이고, 간단한 설명을 보니 아마 PC의 아웃룩과도 동기화가 되는 것 같습니다. 'Mac setup'을 클릭해서 들어가 설명대로 시스템 환경설정으로 가보니 닷맥 아이콘이 있었습니다. 혹시나 해서 소프트웨어 업데이트를 해보니 아래와 같은 업데이트 내역이 있었습니다.

사용자 삽입 이미지

사용자 삽입 이미지
제가 업데이트 주기를 너무 길게 해놔서 그런 것 같습니다. '매일' 확인으로 변경했습니다.

업데이트가 되고 맥이 리부팅 된 후에 다시보니 이쁜 'MobileMe' 아이콘으로 변경되어 있었습니다. (이 부분은 제가 착각한 것 같습니다. 집에 와서 해보니 시스템 설정에서 닷맥을 클릭하고 로그인 하니 업데이트가 진행되었습니다.)

아래와 같이 집에 있는 맥과 동기화할 항목을 설정하고 '지금 동기화'를 클릭했습니다. 이제 양쪽에서 '캘린더'와 '연락처'가 동기화 해서 사용할 수 있다는 것이 가장 편리한 것 같습니다.
사용자 삽입 이미지
맥에서 설정을 완료하고 www.me.com 사이트로 갔습니다. 역시 애플의 제품들과 일괄적인 사이트의 디자인이 이쁘네요.
사용자 삽입 이미지

사용자 삽입 이미지
로그인을 하면 좌측 상단에 모바일미의 기능을 요약해 주는 아이콘들을 볼 수 있습니다. 좌측부터 차례대로 메일, 주소록, 일정, 겔러리, iDisk, 계정설정 아이콘입니다. 각각의 기능들은 아래와 같습니다.


1. 메일
메일로 가보니 환영메일이 한통 와 있었습니다. 각 폴더로 항목들의 드래그엔드랍이 가능하기 때문에 웹상에서의 사용도 그다지 불편한 점이 없습니다. 첨부파일은 20MB까지 가능하며, 기본으로 10GB의 메일 저장 공간이 할당됩니다. 메일 주소는 '[아이디]@me.com'으로 사용할 수 있습니다.

지인에게만 주는 개인명함이 있는데 지메일 주소를 넣었습니다. 미리 나왔다면 모바일미 주소를 사용하였을텐데 아쉽습니다.
사용자 삽입 이미지

한글이 깨지는 것을 방지하기 위해 아래와 같이 'Encode outgoing messages using Unicode (UTF-8)' 항목에 체크를 해주셔야 합니다.
사용자 삽입 이미지

2. 연락처
사용자 삽입 이미지
좌측은 제 맥과 동기화가 된 연락처의 화면입니다. 웹에서도 설정에서 성과 이름의 순서를 변경 옵션이 있어 우리나라의 '성 이름'과 같은 순으로 출력할 수 있습니다.

아주 잠깐 써보았지만 속도이외에는 웹 플랫폼이란 불편함이 그다지 느껴지지 않았습니다. 항목을 드래그앤드랍으로 해당 분류에 저장할 수 있고, 분류에서 클릭이나 엔터를 치면 바로 이름을 변경할 수 있습니다.

아래가 연락처 입력화면입니다. 맥에서와 같이 연락처의 종류도 설정할 수 있고, 입력 필드도 화면에서 바로 추가할 수 있습니다.
사용자 삽입 이미지

3. iCal - 일정관리
사용자 삽입 이미지
역시 웹상에서도 맥과 거의 동일한 인터페이스를 제공합니다. 시간대와 날짜에서 더블클릭을 하면 맥과 동일하게 바로 입력이 가능합니다. 키보드의 delete키로 바로 삭제도 가능하고, 역시 드래그엔드랍으로 원하는 위치로 이동이 가능합니다. 웹상에서 이렇게 자연스럽고 부드럽게 맥과 비슷한 인터페이스를 제공하는 것이 놀랍습니다.

4. 겔러리
사용자 삽입 이미지
겔러리에서 직접 이미지를 선택해서 올리거나 iPhoto 하단에서 업로드 할 이미지를 선택하고 '웹 겔러리' 버튼을 클릭하면 자동으로 겔러리에 선택한 이미지들이 등록 됩니다.

이미지가 등록되면 리로드 없이 바로 모바일미의 겔러리에 반영이 됩니다. 이미지를 회전하거나 크기를 조절할 수 있는 슬라이더등이 있습니다.
사용자 삽입 이미지

위 이미지의 우측의 URL은 해당 앨범의 URL이며 브라우져에서 주소를 직접 입력하면 아래와 같이 보여집니다. 동호회 모임등의 사진들은 앨범을 따로 만들어 참가자들에게 주소를 알려 주면 편리하게 사진을 감상할 수 있을 것 같습니다.
사용자 삽입 이미지

5. iDisk

iDisk는 기본 10GB를 사용할 수 있는 웹하드입니다. 집과 사무실에서 작업하기 위해 파일을 메일로 보내거나 USB메모리를 이용했는데, 이제는 간단하게 파일을 공유하여 사용할 수 있을 것 같습니다. 아래는 테스트로 제 맥에 있는 파일 하나를 업로드한 후의 모습입니다.
사용자 삽입 이미지

파인더에서도 내장된 하드와 동일하게 사용할 수 있습니다.
사용자 삽입 이미지

또한 주소는 idisk.ma.com/[아이디]-Public의 주소로 웹을 통해 다른사람들과 공유도 가능합니다.
사용자 삽입 이미지

신청하고 잠깐 살펴 보았는데 1년에 12만원 정도를 투자하는 것이 아깝지 않을 만큼 멋진 기능이 많은 것 같습니다. 아쉬운 것은 모바일미라는 이름답게 아이폰이 있어야만 모바일미를 진정으로 이용할 수 있다는 것입니다. 아이폰에서 모바일미의 사용은 생각만 해도 기대가 부풀어 오릅니다. 제발 좀 빨리 나와주었으면 하는 바램입니다.

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

레밍스와 유사한 게임 - Pingus  (6) 2008.07.23
PC vs 맥 vs 우분투의 재미있는 이미지  (10) 2008.07.22
스크래치 사이트 한글화  (0) 2008.07.02
각 언어별 Hello World 출력  (0) 2008.05.08
OS X 코드명과 동물이름  (10) 2008.04.22
AND

이번 장에서는 범고래가 자신보다 작은 물고기들을 잡아 먹으면서 점점 성장함에 따라 더 큰 물고기를 잡아 먹는 게임을 만들어 보겠습니다. 이런 방식의 게임은 많이 있어서 아마 해 보셨을 것입니다. 스크래치의 예제에도 이와 유사한 게임이 있습니다.

게임 방법은 방향키를 이용하여 자신보다 크기가 작은 물고기들을 잡아 먹습니다. 큰 물고기와 충돌하면 Live가 감소되며 0 이하가 되면 게임이 종료 됩니다. 일정 점수 이상이 되면  레벨업이 되어 크기가 한단계 커지게 되며, Live가 다시 100으로 충전됩니다. 마지막의 상어 두마리를 잡으면 게임이 클리어 되며 종료됩니다.

게임중에는 아래의 3종류의 아이템이 나옵니다.

사용자 삽입 이미지
화면에 나와 있는 모든 물고기들이 사라지며, 해당 점수가 추가됩니다. 최종 보스인 상어는 영향이 없습니다.
사용자 삽입 이미지
물고기들이 잠시 정지해 있습니다. 역시 최종 보스인 상어는 영향이 없습니다.

사용자 삽입 이미지
보너스 점수가 500점 추가되며 Live가 100으로 올라갑니다.


자바 VM이 설치된 컴퓨터에서는 아래의 게임을 바로 실행해 보실 수 있습니다.

게임의 실행 화면은 아래와 같습니다.
사용자 삽입 이미지 사용자 삽입 이미지


1. 스프라이트 생성
1) 스프라이트
사용자 삽입 이미지


KillerWhale, fish1_1, fish2_1, fish3_1, fish4_1, Shark_1, item1, item2, item3, button, Message 스프라이트를 먼저 생성합니다.

그외의 물고기 스프라이트들은 위의 스크립트를 먼저 작성 후에 'duplicate'를 이용하여 복사해서 사용합니다. 각 물고기들의 복사되는 갯수로 난이도를 조절할 수 있습니다.

이미지와 추가 커스튬들은 좌측의 파일을 다운로드 받으셔서 사용하시면 됩니다.

2) 배경화면
사용자 삽입 이미지
좌측과 같이 처음 시작화면과 게임화면을 추가합니다.

사용된 이미지는 위의 압축 파일에 포함되어 있습니다.






2. 변수
  • Game - 0이면 대기중, 1이면 게임중을 나타냅니다.
  • Live - 플레이어의 생명입니다. 100부터 시작되며 0이면 게임이 종료됩니다.
  • Score - 점수 입니다. 점수에 따라 레벨이 올라 갑니다.
  • State - 현재 레벨 상태이며, 1부터 시작해 5까지 올라 갑니다.
  • addValue - 추가될 점수 또는 감소될 Live 값을 설정합니다.
  • isMove - 1이면 물고기들이 움직이고 0일 경우에는 움직이지 않습니다.
  • shark1 - 1로 설정되며 상어1이 죽으면 0으로 설정됩니다.
  • shark2 - 2로 설정되며 상어2가 죽으면 0으로 설정됩니다.

그 외 플레이어와 각 물고기들은 isLive란 지역변수를 가지고 있습니다. 이 변수는 자신의 상태를 나타내며 1이면 살아있음을 0이면 죽어있음을 의미합니다.


3. 배경 스크립트
1) 초기화
사용자 삽입 이미지
관련 변수들을 기본값인 0으로 설정 합니다. 이전의 효과를 초기화 하고 배경 그림을 'start'로 설정합니다.

그 후에 계속 반복해서 배경음인 'Bubbles'을 출력합니다.
 








2) 게임 시작
사용자 삽입 이미지
플레이어가 화면내의 START 버튼을 클릭하면 전달되는 'start' 메시지를 받았을 때 실행되는 스크립트 입니다.

게임에 필요한 각종 변수들을 초기화한 후에 배경을 게임 배경인 'back1'으로 변경합니다.

그 후에 다른 스프라이트들에게 게임이 시작되어 초기화되어야 함을 알리기 위해 'init' 메시지를 전달합니다.




3) 아이템 1 처리
사용자 삽입 이미지
사용자가 아이템 1을 먹었을 때 실행되는 메시지 입니다.

'isMove'를 0으로 하여 모든 물고기들의 움직임을 정지합니다. 그 후 'color 효과'를 이용하여 화면에 효과를 준 후에, 'item1a' 메시지를 전달합니다. 이 메시지는 화면의 모든 물고기들에게 자신이 소멸되어야 함을 알립니다.

그 후에 'isMove'를 1로 다시 설정하고 화면 효과를 위와 반대(-25)로 주어 원래의 화면으로 돌아 오도록 합니다.







4) 아이템 2 처리
사용자 삽입 이미지
사용자가 아이템 2를 먹었을 때 실행되는 메시지 입니다.

위와 같이 'isMove'를 0으로 하여 모든 물고기들의 움직임을 정지합니다. 그 후 'ghost 효과'로 배경을 변경하여 물고기들이 3초간 정지된 상태임을 플레이어가 알 수 있도록 합니다.

3초가 지난 후에는 'isMove'를 1로 설정하여 다시 물고기들이 움직이게 하고 화면을 이전으로 돌립니다.

5) 게임 종료
사용자 삽입 이미지
플레이어가 보스 상어 2마리를 모두 처리하였을 경우에는 'end' 메시지를 발송합니다. 그리고 Live가 1 보다 작을 경우에는  'close' 메시지를 발송합니다.

두 경우 모두 'Game' 변수를 0으로 설정하여 더이상 게임이 진행되지 않도록 합니다.






4. 플레이어 스크립트
1) 이동
사용자 삽입 이미지
게임이 시작되면 스프라이트를 감추고 게임 중(Game=1)일 경우에만 움직이도록 합니다.

각각의 키값을 검사해서 플레이어가 동시에 두키를 누르더라도 반응을 하도록 합니다.

좌우키를 누를 경우에는 이미지의 좌우를 변경하도록 각각 direction을 왼쪽(-90), 오른쪽(180)으로 설정합니다.

사용자 삽입 이미지
direction 변경시 이미지가 회전하지 않고 거울처럼 좌우가 바뀌도록 좌측과 같이 '<-->'로 회전을 설정합니다.










2) 초기화
사용자 삽입 이미지
게임 시작을 알리는 'init' 메시지를 수신할 때 실행되는 스크립트입니다.

현재 상태(State)를 1로 설정하고 범고래를 중간에 위치시킨 후에 출력합니다.



3) 충돌 처리
사용자 삽입 이미지
자신보다 더 큰 물고기와 충돌을 알리는 'touch' 메시지가 수신되었을 때 실행되는 스크립트 입니다.

효과음(ouch)를 출력하고 'addValue' 변수에 설정된 값만큼 Live를 감소 시킵니다. 'addValue' 값은 물고기들의 크기에 다릅니다. 충돌을 시각화 하기 위해 'color 효과'를 0.1초간 적용한 후 효과를 초기화 합니다.

'Live'의 감소로 인해 1보다 작을 경우에는 게임 종료를 알리는 'close' 메시지를 전송합니다.




4) Item3 처리
사용자 삽입 이미지
Item3을 획득했을 때 실행되는 스크립트 입니다. 점수를 500 증가하고 Live를 100으로 만듭니다. 그후에 점수 처리를 위해 'point' 메시지를 발송합니다.




5) 점수처리
사용자 삽입 이미지
점수(Score)가 변동되어야 함을 알리는 'point' 메시지를 수신했을 때 실행되는 스크립트 입니다.

'addValue' 만큼 점수를 증가 시킵니다. 'isChange' 변수는 로컬변수로 점수 변경 후에 플레이어의 레벨업 여부를 설정합니다.

간 단계(State)에 맞는 레벨이 점수가 되는지를 확인하 후에 조건에 맞으면 'isChange'를 1로 설정합니다.

레벨업이 되어야 하면 [next costume] 을 두번 실행하여 다음 커스튬으로 설정합니다. 두번 하는 이유는 같은 레벨에 일반 커스튬과 먹이를 먹는 커스튬, 2개의 커스튬이 있기 때문에 다음 커스튬으로 변경하기 위해서는 2번 [ndex costume]이 실행되어야 하기 때문입니다.

레벨업이 되면 현재 레벨(State)을 1 증가 시키고 Live를 100으로 설정합니다.






6) 에니메이션
사용자 삽입 이미지
먹은 물고기로 부터 'eat' 메시지를 수신하면 실행되는 스크립트 입니다.

효과음(WaterDrop)을 출력하고 각 단계를 검사하여 그에 맞는 커스튬을 출력합니다.

뒤에 'a'가 붙는 커스튬은 범고래가 입을 벌린 커스튬입니다. 입을 벌린 상태를 0.2초간 보여주고 원래의 커스튬으로 다시 설정합니다.

에니메이션 효과가 끝나면 'point' 메시지를 발송하여 점수를 처리하도록 합니다.

그 후에 shark1, shark2 변수가 0이 되었는지 검사 합니다. 각각 두마리 보스 상어의 상태를 나타내며, 둘 다 0이면 게임 종료를 알리기 위해 'end' 메시지를 전송합니다.

























5. 물고기 스크립트
모든 물고기 스크립트는 점수, 공격력, 생성조건등을 제외하고는 거의 동일합니다. 이곳에서는 fish2_1의 두번째로 작은 물고기의 스크립트만 예를 들어 설명하겠습니다. 각각의 물고기 스크립트들의 차이점은 아래의 소스를 다운로드 받아 확인하시기를 바랍니다.

그리고 'duplicate'를 이용한 복사만으로 물고기를 추가 할 수 있도록 생성에 관련된 스크립트도 물고기의 스프라이트에 포함합니다.

1) 초기화
사용자 삽입 이미지
게임이 시작되면 스프라이트를 숨기고, 'isLive' 변수를 0으로 설정합니다.




2) 메인 스크립트
게인 중(Game=1)일 때만 실행되는 스크립트 입니다. 'isLive' 변수가 1로 살아 있을 경우에는 이동하면서 범고래와 충돌했는지를 검사합니다. 살아 있지 않고 생성 조건에 일치 한다면, 위치를 설정하고 'isLive'를 1로 설정하여 물고기가 화면에 출력되도록 합니다. 

물고기가 범고래와 충돌하였을 경우에는 범고래의 현재 레벨(state)를 확인하여 잡아 먹힐지 범고래의 생명을 줄일지 여부를 검사합니다. 잡아 먹힐 경우에는 'eat' 메시지를 피해를 줄 경우에는 'touch' 메시지를 발송합니다.

사용자 삽입 이미지

[if <<[isMove]=(1)> and <[pick random(1) to (200)]=(1)>>]
물고기의 'isLive'가 0일 경우에는 위의 조건에 일치하면 물고기가 출현하도록 합니다. pick random에서 200으로 설정된 값을 크게 하면 물고기가 출현하는 횟수가 줄어 듭니다. 이를 변경하여 게임의 난이도를 조절할 수 있습니다.

[point in direction [pick random(-180) to (90)]]
물고기가 왼쪽에서 나타날지 오른쪽에서 나타날지 무작위로 선택하게 합니다.

3) 아이템 1 처리
사용자 삽입 이미지
플레이어가 아이템 1을 획득하여 모든 물고기가 죽어야 할 경우에 발송되는 'item1a' 메시지를 처리합니다. 'item1' 메시지는 배경 스크립트에서 처리한 후에 'item1a' 메시지가 발송됩니다.

'addValue'를 10으로 설정한 후, 'point' 메시지를 전송하여 점수가 10 증가 되도록 합니다.

'isLive'를 0으로 죽은 상태로 설정한 후에 'ghost 효과'를 10회 반복한 후에 스프라이트를 숨깁니다.




6. 아이템 스크립트
아이템도 3개의 종류가 있지만 플레이어와 충돌시에 전달하는 메시지의 종류를 제외하고는 기본적으로 서로 같습니다. 이곳에서는 item1에 대해서만 설명하겠습니다. item1의 스크립트를 완성하고 'duplicate'로 복사를 한 후에 커스튬의 이미지를 각 아이콘에 맞는 것으로 교체합니다.

1) 초기화
사용자 삽입 이미지
게임이 시작되어 'init' 메시지를 수신하면 스프라이트를 숨기고 'isLive'를 0으로 설정합니다.




2) 이동
생성 및 이동은 기존 물고기 스크립트와 유사합니다. 플레이어와 충돌하였을 경우에는 각각의 아이템에 맞는 메시지(item1, item2, item3)를 발송합니다.

사용자 삽입 이미지

[if <[pick random (1) to (3000) = (1)>]
아이템이 생성 여부를 결정합니다. pick random에 설정된 3000의 값을 줄이면 아이템이 자주 나오고 증가할수록 드물게 나옵니다.

[if <[pick random (1) to (2) = (1)>]
아이템이 왼쪽에서 나올지(1) 오른쪽에서 나올지(2) 결정합니다.


7. 버튼 스크립트

1) 효과처리
사용자 삽입 이미지
시작되면 show로 버튼을 출력합니다. 사용자가 버튼위로 마우스를 가져갈 때에는 'color 효과'가 적용되도록 합니다.










2) 클릭 처리
사용자 삽입 이미지
사용자가 버튼을 클릭하면 버튼 스프라이트를 감추고 'start' 메시지를 보내 게임시작을 알립니다.





3) 버튼 보이기
사용자 삽입 이미지
'close'나 'end' 메시지 수신으로 게임이 종료되었을 때는 플레이어가 다시 시작할 수 있도록 버튼을 출력합니다.







8. 메시지 스크립트

1) 메시지 출력
사용자 삽입 이미지
'close'로 플레이어의 생명이 종료되어 끝났을 경우에는 'game over' 커스튬을 출력합니다.

'end'로 사용자가 게임을 완료하여 끝났을 경우에는 'clear' 커스튬을 출력합니다. 






2) 게임 시작
사용자 삽입 이미지
스크래치가 시작되거나 게임이 시작되었을 경우에는 메시지 스크립트를 감춥니다.








모든 스프라이트의 스크립트는 아래의 파일을 다운로드 받아서 확인해 보세요.


AND