INTRODUCTION. 서문 ... 19 Chapter 1. 마이크로 자바게임에 관해 알고 싶었지만 묻기 어려웠던 것들 ... 20 게임의 새로운 시대 ... 20 간단한 게임의 역사 ... 20 멀티플레이어 매니아 ... 21 마이크로 디바이스 마이크로 생활방식 ... 22 마이크로 자바 입문 ... 23 이 책의 임무 ... 24 게임계획 ... 24 게임 디자인에 관하여 ... 27 게임 디자인 절차 ... 27 선행작업 ... 28 프로토타이핑(Prototyping) ... 37 프로그래밍 ... 37 테스팅 ... 38 돈을 보여다오(Show Me th Money) : 마이크로 게임 사업 모델 ... 39 사업개요 ... 40 광고와 스폰서 ... 40 컨텐트 판매(Contents Deal) ... 40 회당 지불 또는 구독 ... 41 요약 ... 42 PART 1. 작은 환경 ... 43 Chapter 2. 모바일의 세계 ... 44 게임의 새로운 시대 ... 44 마이크로 디바이스 ... 44 무선 혁명이 시작된다 ... 45 고성능 자바 기기 : 셋톱 박스, 휴콘솔 ... 48 퍼스널 자바 ... 48 자바 TV ... 49 자바 폰(JavaPhone) ... 49 PingTel xpressa 폰 ... 49 샤프 NC-10 IP 폰 ... 50 휴대용 단말기(PDA) ... 50 J2ME PDA 프로파일 ... 50 PalmOS ... 51 마이크로스프트 윈도우 CE ... 52 심비안(Symbian) EPOC ... 53 샤프 Zaurus SL-5000 ... 54 다른 리눅스 기기 ... 54 마이크로 JVN(Java Virtual Machines) ... 55 모바일 폰과 페이저(Pagers) ... 58 카시오 CdmaOne C452CA ... 58 에릭슨 R380 ... 58 후지쯔 F503i ... 59 히다찌 CdmaOne C451H ... 59 엘지 텔레콤 p510(i-Book) ... 59 다른 엘지 텔레콤 전화기 ... 59 마쯔시다/파나소닉 P503i ... 60 마쯔시다/파나소닉 P503iS ... 60 마쯔시다/파나소닉 FOMA P2101V ... 60 미쯔비씨 P503i, D503iS ... 60 미쯔비씨 J-D05 ... 61 모토롤라 i85s ... 61 모토롤라 i50sx ... 62 모토롤라 Accompli 009 PIC ... 62 모토롤라, Accompli 008/6288 ... 63 다른 모토롤라 휴대전화들 ... 63 NEC N503i ... 63 NEC FOMA N2001 ... 64 Nokia 9210, 9290 Communicator ... 64 RIM/iPaq Blackberry ... 65 삼성 SCH-X130, SCH-X230, SCH-X350, SCH-X350 ... 65 샤프 J-SH07 ... 65 지멘스 SL45i(혹은 6688i) ... 66 소니 SO503i ... 66 도시바 J-T06 ... 66 저성능(Low-End) 자바 디바이스 : 스마트 카드와 임베디드 칩 ... 67 자바카드(Java Card) ... 67 임베디드자바(EmveddedJava) ... 67 요약 ... 68 Chapter 3. 큰 게임, 작은 스크린 ... 69 경쟁 ... 69 살펴 볼 점들 ... 70 가까운 미래 ... 70 왑(WAP) 게임들 ... 71 무선게임 ... 71 Jamdat ... 75 PicoFun ... 76 Handy Games ... 77 FunCaster.com ... 79 언플러그드 게임(Unplugged Games) ... 79 엔게임(nGame) ... 80 i-모드 게임 ... 82 단문전송방식(SMS) 게임 ... 83 It's Alive 사의 보트파이터(BotFighters by It's Alive) ... 84 빗자비 푸티(Vizzavi Footie)와 트리비아 ... 85 J2Me MIDP 게임 ... 85 칼 호넬의 MIDP-Man ... 86 홀리카우보이의 블록버터와 홀리 몰리 ... 86 드로우(Draw) 포커 ... 87 코코아소프트 ... 87 롬블랙의 모바일 인터넷 메이즈 게임 ... 89 스카이 아트의 큐브게임 ... 90 Jshape의 M-Type 및 MIDP 스트리트 파이터 ... 90 Spruce 팀 ... 91 레드 팀의 도프 전쟁(Dope Wars) ... 91 J2ME Palm 게임 ... 92 토룬다(Torunda)! ... 92 칼 회르넬의 아이스박스와 PalmWarp ... 93 호빗의 Let Me Alone ... 94 아이어플리 게임 ... 94 Squiral 게임 ... 94 드왕고의 사무라이 로마네스크 ... 95 드왕고의 챌린지! 비정한 방식(The Hard-Boiled Way) ... 96 세가(Sega) ... 97 남코(Namco) ... 98 캡콤 ... 98 반다이 네트워크 ... 98 사이버드의 미니 게임 텐고쿠 ... 99 허드슨 소프트 ... 100 무엇을 기다리는가? ... 101 PART 2. Before, Between 그리고 Byond J2ME ... 103 Chapter 4. 무선망 표준, 어떻게 데이터가 가고 오는가 ... 104 무선 네트워크 ... 105 제1세대(1G) ... 105 제2세대(2G) ... 105 2.5세대(2.5G) ... 106 3세대(3G) ... 106 The Wireless Application Protocol(WAP) ... 107 WAP 프로토콜 스택(Protocol Stack) ... 107 WAP Architecture ... 108 The Wireless Markup Language(WML) ... 109 앵커(Anchor) ... 112 WML 스크립트(Script) ... 122 WML Script 액세스 ... 123 서버사이드(Server-Side) WAP ... 125 서버 설정 ... 125 WAP과 자바 ... 126 개발 환경 ... 130 HDML(Handheld Device Markup Language) ... 132 HDML 문법 ... 133 디스플레이(Display) ... 133 액티비티(Activities) ... 133 액션(Actions) ... 133 하이퍼링크(Hyperlinks) ... 134 이미지(Images) ... 134 WAP 2.0과 xHTML ... 135 요약 ... 135 Chapter 5. 인스턴트 무선 메시지 ... 136 메시지 서비스와 게임 ... 137 단문 서비스(SMS) ... 137 SMS 특징 ... 138 단문 메시지 서비스 센터(SMSC, Short Message Service Centers) ... 139 무료 SMS 서비스 ... 140 SMS 메시지 실제로 보내기 ... 142 SMS 툴 ... 142 SMS와 J2ME ... 143 서버 코드 예제 ... 143 멀티미디어 메시지 서비스(MMS) ... 145 멀티미디어 메시지 서비스 센터(MMSC, Mutimidedia Message Service Centers) ... 145 SMIL ... 146 간단한 SMIL 예제 ... 146 확장 메시징 서비스(EMS, Enhanced Messaging Service) ... 147 요약 ... 148 Chapter 6. 아시아의 무선시장, I-모드와 cHTML ... 149 아이모드 사용하기 ... 149 Compact HTML(cHTML) ... 150 캐릭터 집합(Character Sets) ... 151 이모지(Emoji) ... 151 cHTML 구조 ... 152 표준 CHTML 태그 ... 153 입력 폼(Input Forms) ... 154 앵커(Anchor) 태그 ... 156 이미지 ... 157 마퀴(Marquee) ... 158 개발 툴 ... 158 테스트와 에뮬레이터 ... 159 요약 ... 160 Chapter 7. 무선의 전망 ... 161 블루투스(Bluetooth) ... 162 블루투스 프로토콜 ... 163 Bluetooth와 JAVA ... 163 다른 단거리 어플리케이션들 ... 163 Broadband's Promise ... 164 무선 위치추적(Mobile Positioning) ... 164 이 모든 것이 어떻게 동작하는가 ... 164 포럼과 협회 ... 165 개인정보 ... 166 위치추적 기술 ... 166 무선 상거래(m-Commerce) ... 168 컨텐츠에 대한 요금 징수 ... 169 마이크로 자바와 돈 ... 170 음성과 통화 ... 170 VoiceXML ... 170 VoiceXML Software ... 171 무선 전화 어플리케이션 인터페이스(WTAI, Wireless Telephony Application Interface) ... 171 통합 메시징(UM, Unified Messaging) ... 172 미래에 대한 전망 ... 172 PART 3. The Java 2 Micro Edition ... 173 Chapter 8. J2ME 개관 ... 174 자바 플랫폼의 삼위일체 ... 174 결국은 작은 세계다 ... 176 소형 기기에서 자바 사용하기 ... 176 J2ME의 탄생 ... 176 프로파일과 컨피규레이션(Profiles and Configurations) ... 177 주요 J2ME 컨피규레이션 ... 177 J2ME 프로파일 ... 178 KVM(Kilobyte Virtual Machine) ... 179 자바 애플리케이션 매니저 ... 180 JAR 파일로 묶기 ... 180 제한된 형태의 연결성 : CLDC ... 180 보안 ... 181 사전 검증 ... 181 모바일 프로파일 ... 181 MIDP 개요(MIDP in Nutshell) ... 182 초기 프로파일 ... 182 요약 ... 183 Chapter 9. 미들릿 만들기 ... 184 명령어 라인 미들릿 개발 ... 185 개발환경 ... 186 무선 툴킷(Wireless Toolkit) ... 187 무선 툴킷을 이용하여 미들릿 개발하기 ... 188 미들릿의 생존 주기 ... 190 화면 출력 ... 192 스크린으로 작업하기 ... 193 폼(Forms) ... 194 메뉴와 커맨드(Menu and Commands) ... 197 도움말과 알림(Alert)창 만들기 ... 200 Alert 클래스 ... 201 스플래시 스크린(Splash Screen) ... 204 전역 속성 ... 206 애플리케이션 속성 얻어오기 ... 206 시스템 속성 얻어오기 ... 207 전역 캐시 클래스 만들기 ... 207 요약 ... 208 Chapter 10. 제한된 자원 최대한 활용하기 ... 209 제한 ... 209 프로세서 문제 ... 210 메모리 문제 ... 210 비디오 문제 ... 210 미래의 프로세서 ... 211 메모리 한계 ... 211 작업 메모리 ... 211 저장 메모리 ... 213 디스플레이 ... 213 한계 극복하기 ... 213 최소 속도 결정하기 ... 213 프레임 레이트(Frame Rate) ... 214 다중 디스플레이 지원 ... 214 흑백의 세계 ... 215 요약 ... 215 Chapter 11. 최적화 : 최대한 활용하기 ... 216 제한된 세계 ... 216 코드 최적화하기 ... 217 코드 크기 최적 ... 217 코드를 더 빠르게 만들기 ... 217 메모리 사용량 줄이기 ... 217 장차 가용성 ... 218 네트워크 퍼포먼스 ... 218 코드 사이즈 줄이기 ... 218 오퓨스케이터(Obfuscator)와 이름 단축 ... 219 객체 지향의 딜레마 ... 220 이미지 크기 줄이기 ... 222 코드 속도 높이기 ... 222 가비지 컬렉터 다루기 ... 223 생성자 없애기 ... 224 정적 메소드 ... 225 빨리 그리기 ... 225 메모리 적게 사용하기 ... 226 String VS StringBuffer ... 227 배열과 벡터(Vector) 그리고 해시테이블(Hashtable) ... 228 전력 소비 ... 228 요약 ... 229 Chapter 12. 멀티스레드 게임 프로그래밍 ... 230 스레드 ... 230 Thread 객체 확장하기 ... 232 Runnable 인터페이스 구현하기 ... 234 스레드 속성 ... 235 스레드 상태 ... 236 동기화와 데드락 ... 236 wait()와 notify() ... 237 타이머 ... 238 스레드 개선하기 ... 240 요약 ... 242 PART 4. 게임을 시작시키자 ... 243 Chapter 13. 고수준(High-Level) 그래픽 유저 인터페이스 ... 244 Screen 클래스 ... 245 폼(Form)과 얼럿(Alert) ... 245 리스트(List) ... 245 리스트 타입(List Type) ... 246 초이스(Choice) ... 247 텍스트 박스(Text Boxes) ... 250 아이템(Items) ... 251 아이템 상태 리스닝(Item State Listening) ... 252 초이스(Choice) ... 252 데이트(Date) ... 252 진행 바(Progress Meter) ... 254 텍스트 필드(TextField) ... 258 티커(Ticker) ... 259 추가 라이브러리 ... 260 요약 ... 261 Chapter 14. 저수준(Low-Level) 그래픽 유저 인터페이스 ... 262 캔버스(Canvas) 클래스 ... 262 Canvas 이벤트 ... 263 사용자 정의 명령 ... 264 게임 키와 포인터 핸들러 만들기 ... 265 터치 스크린 다루기 ... 266 화면에 그리기 ... 267 색 작업하기 ... 269 스트로크 타입 ... 269 선 그리기 ... 269 사각형 그리기 ... 270 둥근 사각형 그리기 ... 271 호 그리기 ... 271 폰트 ... 272 문자열 그리기 ... 273 이미지 그리기 ... 274 Image 클래스 ... 274 클리핑 ... 275 변환 ... 275 더블 버퍼링 ... 276 요약 ... 277 Chapter 15. 스프라이트의 세계로 들어가기 ... 278 스프라이트 ... 278 스프라이트 속성 ... 279 프레임 움직이기 ... 279 Sprite 클래스 ... 280 이미지 파일 ... 284 포함된 이미지 읽어오기 ... 284 네트워크로부터 이미지 불러들이기 ... 284 이미지 크기 줄이기 ... 285 스프라이트 그리기 ... 286 충돌 검사 ... 286 기본적인 충돌 검출 ... 287 자식 스프라이트 만들기 ... 288 플레이어 스프라이트 만들기 ... 288 적 ... 289 투명 이미지 ... 289 픽셀 단위로 그리기 ... 290 스프라이트 덩어리 그리기 ... 292 투명 이미지의 구현 ... 292 요약 ... 293 Chapter 16. 스프라이트 다루기 ... 294 네트워크 게임 구성요소 ... 294 이미지 다운로드하기 ... 295 다른 미디어 타입 다운로드하기 ... 296 진보된 충돌 검사 ... 297 해결책 1 : 다중 레벨 ... 297 해결책 2 : 다중 영역 ... 299 스프라이트 매니저 ... 300 최적화하여 그리기 ... 302 스프라이트 충돌 개선 ... 303 요약 ... 304 Chapter 17. 스프라이트 이동 ... 305 J2ME에서의 부동소수점 ... 305 시스템 속이기 ... 306 게임 초기화 ... 312 이동 ... 314 이동 루틴 ... 315 모두 합치기 ... 317 충동 검출 다루기 ... 317 게임 종료 : 이기느냐 지느냐 ... 318 마지막 게임 쓰레드 ... 319 요약 ... 321 Chapter 18. J2ME 오디오 기초 ... 322 사운드는 가능하거나 거의 가능하지 않다 ... 322 요약 ... 324 Chapter 19. MIDP 저장장치 ... 325 RecordStore 개관 ... 325 RecordStore 실제로 사용하기 ... 327 게임의 새로운 메소드 ... 330 코드 쓰기 ... 331 마들릿의 변화 ... 335 RecordStore 더 즐기기 ... 336 요약 ... 343 Chapter 20. 외부로의 연결 : 무선네트워킹 ... 344 J2ME 네트워킹 개관 ... 344 MIDP 네트워킹 ... 347 HTTP에 관한 약간의 정보 ... 347 HTTP 예제 ... 349 HTTP 제한 상황에서 작업하기 ... 352 게임 서버 세팅하기 ... 353 데이터 포맷 ... 353 자신만의 패킹(Packing) ... 353 XML ... 355 DataOutputStream과 DataInputStream을 이용하여 인코딩하기 ... 356 멀티플레이어 레이싱 게임 만들기 ... 357 시스템 디자인하기 ... 358 특별한 고려 ... 359 메시지 ... 361 약점 ... 361 클라이언트측 ... 362 서버측 ... 377 게임 즐기기 ... 385 요약 ... 389 PART 5. J2ME Extensions ... 391 Chapter 21. 퍼스널 자바, 연결된 장치 명세 그리고 기타 마이크로 자바 블랜드 ... 392 연결 장치 명세(Connected Device Configuration, CDC) ... 393 J2ME 파운데이션 프로파일 ... 394 퍼스널 프로파일(Personal Profile) ... 394 퍼스널 자바 ... 394 퍼스널 자바 API ... 395 더블 버퍼링 ... 395 개발자 도구 ... 397 퍼스널 자바용 MIDP 플러그인 ... 400 퍼스널 자바 디자인시 고려사항 ... 400 PDA 프로파일 ... 400 자바 게임 프로파일 ... 401 J2ME 멀티미디어 프로파일 ... 402 요약 ... 402 Chapter 22. iAppli : 조금 방향이 다른 마이크로 자바 ... 403 전체의 구조 ... 403 제공 ... 405 우선순위 ... 408 iAppli : MIDP와 비슷하나 같지는 않은 ... 408 유저 인터페이스 ... 409 네트워킹과 입출력 ... 419 iAppli 개발하기 ... 422 요약 ... 425 Chapter 23. 지멘스 게임 API ... 426 셋업하기 ... 427 컴파일 ... 427 애뮬레이터에서 실행시키기 ... 427 실제 폰에서 실행하기 ... 428 무선 망을 이용하여 애플릿을 다운로드하기 ... 429 게임 SDK 개관 ... 429 이미지와 스프라이트 ... 429 확장 이미지 제작하기 ... 429 블리팅(Blitting) ... 431 그래픽 객체 ... 431 스프라이트 ... 432 스프라이트 만들고 마스킹하기 ... 433 샘플 코드 ... 434 타일형 배경 ... 435 타일 ... 436 타일 배경 ... 437 플래싱 ... 438 멋진 진동 ... 439 음악, 달콤한 음악 ... 440 멜로디 ... 440 GSM 기능 ... 443 전화 걸기 ... 443 전화번호부 접근하기 ... 444 SMS 메시지 ... 444 입·출력 ... 444 데이터 주고받기 ... 444 파일 저장하고 불러오기 ... 445 요약 ... 446 PART 6. 마이크로 레이서 ... 447 Chapter 24. 마이크로 레이서 - 모두 합치기 ... 448 나쁜 소식 ... 448 좋은 소식 ... 449 조각들을 하나로 합치기 ... 450 무기 추가하기 ... 451 적 강하게 만들기 : 인공 지능 ... 457 향상된 컨트롤 ... 459 파워 업(Power-Ups) 추가 ... 461 저장영역에 게임 데이터 저장하기 ... 464 온라인 차고와 연동하기 ... 468 남은 작업 ... 470 모든 곳에서 동작하는 하나의 게임 ... 471 인터페이스의 힘 ... 471 요약 ... 473 PART 7. APPENDIX ... 475 Appendix A. 저수준 GUI 클래스 ... 476 Appendix B. MIDP 1.1. ... 485 Appendix C. 지멘스 게임 API ... 490 Appendix D. iAppli API ... 494