목차
1부 게임과 DirectX의 개요
   1. 게임의 역사와 종류 ... 27
      1-1 게임의 역사 ... 27
      1-2 게임의 종류 ... 32
        아케이드(Arcade) ... 32
        어드벤처(Adventure) ... 32
        롤플레잉(Role Playing) ... 33
        시뮬레이션(Simulation) ... 34
   2. DirectX의 개요 ... 35
      2-1 DirectX의 소개 ... 35
      2-2 DirectX의 구조 ... 36
        DirectDraw ... 37
        Direct3D ... 37
        DirectSound ... 37
        DirectInput ... 37
        DirectPlay ... 37
        DirectSetup ... 37
      2-3 DirectX 설치하기 ... 38
2부 DirectDraw 익히기
   1. DirectDraw 맛보기 ... 45
      1-1 프로그램 따라하기 ... 45
      1-2 프로그램 설명 ... 59
      [1]void CChap1View::OnInitialUpdate() ... 60
        변수 선언 ... 60
        변수 초기화 ... 60
        DirectDraw 객체 생성 ... 61
        Window 모드 설정 ... 61
        Display 모드 설정 ... 62
        Surface 생성 ... 63
        BackBuffer 내용 저장 ... 63
        Flipping ... 63
      [2]BOOL CChap1View::CreateSurfaces() ... 64
        변수 선언 ... 64
        DDSURFACEDESC 구조 초기화 ... 65
        Primary Surface와 BackBuffer 생성 ... 67
      [3]BOOL CChap1View::ClearSurface(LPDIRECTDRAWSURFACE pSurface) ... 68
        변수 선언 및 초기화 ... 68
        Surface에 대한 Lock() 함수 실행 ... 69
        잠긴 면 지우기 및 unlock()을 이용한 잠김 해제 ... 70
      [4]void CChap1View::UpdateSurface() ... 71
        변수 선언 ... 71
        첫 번째 화면과 두 번째 화면 생성 ... 71
        화면 가운데에 문장 표시 ... 74
      [5]void CChap1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlag) ... 75
        Flipping(surface 전환) ... 75
        프로그램 종료 ... 76
      1-3 프로그램 전체 소스 코드 ... 77
      〈Chap1.h〉 ... 77
      〈Chap1.cpp〉 ... 78
      〈stdafx.h〉 ... 82
      〈stdafx.cpp〉 ... 83
      〈Resource.h〉 ... 83
      〈MainFrm.h〉 ... 84
      〈MainFrm.cpp〉 ... 85
      〈Chap1Doc.h〉 ... 87
      〈Chap1Doc.cpp〉 ... 89
      〈Chap1View.h〉 ... 91
      〈Chap1View.cpp〉 ... 93
   2. BMP(Bitmap) File 출력 ... 101
      2-1 프로그램 따라하기 ... 101
      2-2 프로그램 설명 ... 112
      [1]void CChap2View::OnInitialUpdate() ... 113
        변수 선언 ... 113
        변수 초기화 ... 114
        DirectDraw 객체 생성 ... 114
        Window 모드 및 Display 모드 설정 ... 115
        Surface 생성 및 BackBuffer 초기화 ... 116
        Flipping ... 116
      [2]void CChap2View::OnKeyDown(UNIT nChar, UINT nRepCnt, nFlag) ... 117
        화면 Update 및 Flipping ... 117
        프로그램 종료 ... 117
      [3]void CChap2View::UpdateSurface() ... 118
        BackBuffer Clear ... 118
        Image 객체 생성 ... 118
        팔레트 생성 ... 127
        Surface에 이미지 Data 로드 ... 128
        다음 그림을 위한 변수 증가 ... 128
      [4]LPDIRECTDRAWPALETTE CChap2View::CreateDDPalette(LPDIRECTDRAW7 pDDObj, CDi<?import namespace ... m ur
        변수 선언 ... 129
        이미지의 컬러 수 확인 ... 130
        팔레트 얻기 ... 131
        팔레트 생성 ... 131
      [5]void CChap2View::LoadBMP(LPDIRECTDRAWSURFACE7 pSurface, CDi<m:math xmlns ... '"htt
        변수 선언 ... 132
        Surface 잠그기 ... 133
        변수 초기화 ... 133
        이미지의 가로 길이 확인 ... 134
        Surface와 이미지의 포인터 위치 설정 ... 134
        이미지 로드 및 Surface 잠금 해제 ... 136
      [6]BOOL CChap2View::OnSetCursor(CWn<m:math xmlns ... '"htt
        화면에서 마우스 제거 ... 137
      2-3 프로그램 전체 소스 코드 ... 138
      〈Chap2.h〉 ... 138
      〈Chap2.cpp〉 ... 139
      〈StdAfx.h〉 ... 143
      〈StdAfx.cpp〉 ... 144
      〈MainFrm.h〉 ... 144
      〈MainFrm.cpp〉 ... 145
      〈Chap2Doc.h〉 ... 147
      〈Chap2Doc.cpp〉 ... 149
      〈Chap2View.h〉 ... 151
      〈Chap2View.cpp〉 ... 153
   3. Animation 제작하기 ... 163
      3-1 프로그램 따라하기 ... 163
      3-2 프로그램 설명 ... 179
      [1]void CChap3View::OnInitialUpdate() ... 181
        변수 선언 ... 181
        변수 초기화 ... 181
        DirectDraw 초기화 ... 182
        Multimedia Timer 설정 ... 183
      [2]BOOL CChap3View::CreateSurfaces() ... 186
        변수 선언 ... 186
        Primary Surface와 BackBuffer 생성 ... 187
        배경 및 캐릭터 이미지 객체 생성 ... 187
        배경 및 캐릭터를 위한 Surface 생성 ... 188
        투명색 지정 ... 192
      [3]void CChap3View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) ... 194
        프로그램 종료 ... 194
        캐릭터의 위치 이동 ... 194
      [4]void CChap3View::UpdateSurface() ... 195
        변수 선언 ... 195
        배경 Surface로부터 BackBuffer로 이미지 로드 ... 195
        캐릭터 Surface로부터 BackBuffer로 이미지 로드 ... 200
        화면 Flipping ... 203
      [5]void CChap3View::OnMMTimer() ... 204
        UpdateSurface() 함수 호출 ... 204
      3-3 프로그램 전체 소스 코드 ... 205
      〈StdAfx.h〉 ... 205
      〈StdAfx.cpp〉 ... 206
      〈Chap3.h〉 ... 206
      〈Chap3.cpp〉 ... 207
      〈MainFrm.h〉 ... 211
      〈MainFrm.cpp〉 ... 213
      〈Chap3Doc.h〉 ... 214
      〈Chap3Doc.cpp〉 ... 216
      〈Chap3View.h〉 ... 218
      〈Chap3View.cpp〉 ... 220
3부 DirectSound 익히기
   1. Wave File의 구조와 DirectSound의 사용 ... 235
      1-1 프로그램 따라하기 ... 235
      1-2 프로그램 설명 ... 243
      [1]void CChap1View::OnInitialUpdate() ... 244
        DirectSound 객체 생성 및 독점 모드 설정 ... 244
        Wave File reading ... 245
        LoadWaveFile(CString strFilename) ... 249
        WaveOpenFile(CString strFileName, HMMI<m:math xmlns ... '"htt
        ReadMMIO(HMMIO hmmioh, MMCKINF<m:math xmlns ... '"htt
        WaveStartDataRead(HMMI<m:math xmlns ... '"htt
        WaveReadFile(HMMIO hmmioln, UINT cbRead, BYT<m:math xmlns ... '"htt
      [2]HRESULT CChap1View::CreateSoundBuffer() ... 257
        변수 선언 및 초기화 ... 257
        2차 버퍼 생성 ... 260
        2차 버퍼로 Wave data의 로드 ... 260
      [3]void CChap1View::OnLButtonDown(UINT nFlags, CPoint point) ... 262
        배경 음악 출력 ... 262
      [4]void CChap1View::OnLButtonDown(UINT nFlags, CPoint point) ... 263
        효과음 출력 ... 263
      1-3 프로그램 전체 소스 코드 ... 265
      〈StdAfx.h〉 ... 265
      〈StdAfx.cpp〉 ... 265
      〈mainFrm.h〉 ... 266
      〈mainFrm.cpp〉 ... 267
      〈Chap1.h〉 ... 269
      〈Chap1.cpp〉 ... 270
      〈Chap1Doc.h〉 ... 274
      〈Chap1Doc.cpp〉 ... 276
      〈Chap1View.h〉 ... 278
      〈Chap1View.cpp〉 ... 280
      〈WaveFile.h〉 ... 286
      〈WaveFile.cpp〉 ... 287
4부 DirectInput 익히기
   1. KeyBoard 입력하기 ... 293
      1-1 프로그램 따라하기 ... 293
      1-2 프로그램 설명 ... 302
      [1]BOOL CKeyDlg::OnInitDialog() ... 303
      [2]HRESULT CKeyDlg::InitDirectInput() ... 303
        DirectInput 객체 생성 ... 303
        장치 설정 ... 304
        Data 포맷 설정 ... 304
        Windows 모드 설정 ... 305
      [3]HRESULT CKeyDlg::UpdateInputState() ... 306
        변수 선언 ... 306
        키보드 상태 정보 가져오기 ... 307
        키의 값을 16진수로 변환 ... 308
        Edit box에 출력 ... 314
      [4]void CKeyDlg::OnMMTimer() ... 314
        UpdateInputState() 함수 호출 ... 314
      [5]BOOL CKeyDlg::DestroyWindow() ... 315
        객체 제거 ... 315
      1-3 프로그램 전체 소스 코드 ... 316
      〈StdAfx.h〉 ... 316
      〈StdAfx.cpp〉 ... 316
      〈Key.h〉 ... 317
      〈Key.cpp〉 ... 318
      〈KeyDlg.h〉 ... 320
      〈KeyDlg.cpp〉 ... 322
      2. Mouse 입력하기 ... 329
        2-1 프로그램 따라하기 ... 329
        2-2 프로그램 설명 ... 338
        [1]BOOL CMouseDlg::OnInitDialog() ... 338
        [2]HRESULT CMouseDlg::InitDirectInput() ... 339
        DirectInput 객체 생성 ... 339
        장치 설정 ... 340
        Data 포맷 설정 ... 340
        WIndows 모드 설정 ... 341
        [3]HRESULT CMouseDlg::UpdateInputState() ... 342
        마우스 상태 정보 얻기 ... 342
        마우스 위치 출력 ... 343
        마우스 버튼 정보 출력 ... 345
        [4]void CMouseDlg::OnMMTimer() ... 346
        UpdateInputState() 함수 호출 ... 346
        [5]BOOL CMouseDlg::DestroyWindow() ... 347
        객체 제거 ... 347
      2-3 프로그램 전체 소스 코드 ... 348
      〈StdAfx.h〉 ... 348
      〈StdAfx.cpp〉 ... 348
      〈Mouse.h〉 ... 349
      〈Mouse.cpp〉 ... 350
      〈MouseDlg.h〉 ... 352
      〈MouseDlg.cpp〉 ... 354
   3. 조이스틱 입력하기 ... 361
      3-1 프로그램 따라하기 ... 361
      3-2 프로그램 설명 ... 374
      [1]BOOL CJoyDlg::OnInitDialog() ... 375
      [2]HRESULT CJoyDlg::InitDirectInput() ... 376
        DirectInput 객체 생성 ... 376
        장치 열거 ... 377
        Data 포맷, windows 모드 설정 ... 378
        장치 세부 정보 열거 ... 379
      [3]BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANC<m:math xmlns ... '"htt
        장치 생성 ... 380
      [4]BOOL CALLBACK EnumAxesCallback(const DIDEVICEOBJECTINSTANC<m:math xmlns ... '"htt
      [5]HRESULT CJoyDlg:UpdateInputState() ... 385
        변수 선언 ... 385
        장치 획득 및 장치 상태 얻기 ... 386
        조이스틱의 위치 출력을 위한 변수 초기화 ... 387
        조이스틱의 위치 출력 ... 387
        버튼 상태 출력 ... 388
      [6]void CJoyDlg::OnMMTimer() ... 389
      [7]BOOL CJoyDlg::DestroyWindow() ... 390
      3-3 프로그램 전체 소스 코드 ... 391
      〈StdAfx.h〉 ... 391
      〈StdAfx.h〉 ... 391
      〈Joy.h〉 ... 392
      〈Joy.cpp〉 ... 393
      〈JoyDlg.h〉 ... 395
      〈JoyDlg.cpp〉 ... 397
5부 Class Library 제작하기
   1. DirectDraw Class Library 제작하기 ... 409
      1-1 프로그램 따라하기 ... 409
      1-2 CDD Class 설명 ... 421
      [1]dd.h ... 421
        Include 및 Class 정의 ... 421
        멤버 변수 선언 ... 422
        멤버 함수 선언 ... 423
      [2]dd.cpp ... 425
"stdafx.h", "dd.h" include 및 생성자 소멸자 정의 ... 425
        BOOL CDD::InitDD() ... 426
        BOOL CDD::CreatePrimarySurface() ... 427
        BOOL CDD::ClearSurface(LPDIRECTDRAWSURFACE7 pSurface) ... 428
        BOOL CDD::CreateDDPalette(Cdi<m:math xmlns ... '"htt
        BOOL CDD::LoadBMP(LPDIRECTDRAWSURFACE7 pSurface, CDi<m:math xmlns ... '"htt
        BOOL CDD::CreateOffScreen(UINT SurfaceNum, CString BMPName) ... 431
????????????????? ... 432
        BOOL CDD:BitBMP(UINT SurfaceNum, int x, int y, REC<m:math xmlns ... '"htt
        void CDD:Flipping() ... 433
      1-3 CDD Class의 사용 ... 434
      1-4 CDD Class 예제 설명 ... 441
        void CDDTestView:OnInitialUpdate() ... 441
        void CDDTestView:UpdateSurface() ... 441
      1-5 프로그램 전체 소스 코드 ... 446
      〈StdAfx.h〉 ... 446
      〈StdAfx.cpp〉 ... 446
      〈MainFrm.h〉 ... 447
      〈MainFrm.cpp〉 ... 448
      〈DDTest.h〉 ... 450
      〈DDTest.CPP〉 ... 451
      〈DDTestDoc.h〉 ... 455
      〈DDTestDoc.cpp〉 ... 457
      〈DDTestView.h〉 ... 459
      〈DDTestView.cpp〉 ... 461
      〈dd.h〉 ... 467
      〈dd.cpp〉 ... 468
   2. DirectSound Class Library 제작하기 ... 477
      2-1 프로그램 따라하기 ... 477
      2-2 CSoundBuffer Class 설명 ... 482
      [1]soundbuffer.h ... 482
        Include 및 Class 정의 ... 482
        멤버 변수 선언 ... 483
        멤버 함수 선언 ... 483
      [2]soundbuffer.cpp ... 484
"soundbuffer.h" include 및 DirectSound 객체 포인터 변수 선언 및 생성 ... 484
        DirectSound 객체 제거 ... 484
        CsoundBuffer class의 생성자와 소멸자 ... 485
        void CSoundBuffer:CreateBufferFromWaveFile(CString strFileName) ... 486
        HRESULT CSoundBuffer::CreateFromWaveFile(CWaveFileSoun<m:math xmlns ... '"htt
        HRESULT CSoundBuffer::PlaySound(BOOL blooped) ... 488
        HRESULT CSoundBuffer:StopSound() ... 488
      2-3 CSoundBuffer Class의 사용 ... 490
      2-4 CSoundBuffer Class 예제 설명 ... 494
      [1]void CDSTestView::OnInitialUpdate() ... 494
        DirectSound 객체 생성 ... 494
        2차 버퍼 생성 ... 494
      [2]void CDSTestView::OnLButtonDown(UNIT nFalags, CPoint point) ... 496
        효과음 출력 ... 496
      [3]void CDSTestView::OnRButtonDown(UNIT nFlags, CPoint point) ... 496
        배경 음악 출력 ... 496
      [4]BOOL CDTestView::DestroyWindow() ... 497
        DirectSound 객체 제거 ... 497
      2-5 프로그램 전체 소스 코드 ... 498
      〈StdAfx.h〉 ... 498
      〈StdAfx.h〉 ... 498
      〈MainFrm.h〉 ... 499
      〈MainFrm.cpp〉 ... 500
      〈DSTest.h〉 ... 502
      〈DSTest.cpp〉 ... 504
      〈DSTestDoc.h〉 ... 507
      〈DSTestDoc.cpp〉 ... 509
      〈DSTestView.h〉 ... 511
      〈DSTestView.cpp〉 ... 513
      〈soundbuffer.h〉 ... 517
      〈soundbuffer.cpp〉 ... 518
   3. DirectInput Class Library 제작하기 ... 525
      3-1 프로그램 따라하기 ... 525
      3-2 CDIKey Class에 대한 설명 ... 529
      [1]di.h ... 529
        Include 및 Class 정의 ... 529
        멤버 변수 선언 ... 530
        멤버 함수 선언 ... 530
      [2]di.cpp ... 531
"stdafx.h", "di.h" include 및 생성자 소멸자 정의 ... 531
        HRESULT CDIKey::InitDIKey() ... 532
        HRESULT CDIKey::UpdateInputState() ... 533
        HRESULT CDIKey::IsKeyDown(UINT Keyindex) ... 534
      3-3 CDIKey Class의 사용 ... 535
      3-4 CDIKey Class 예제 설명 ... 541
        BOOL CDIKeyDlg::OnInitDialog() ... 541
        void CDIKeyDlg::OnMMTimer() ... 541
        void CDIKeyDlg::ShowInputState() ... 542
      3-5 프로그램 전체 소스 코드 ... 543
      〈Stdafx.h〉 ... 543
      〈Stdafx.cpp〉 ... 543
      〈DIKey.h〉 ... 544
      〈DIKey.cpp〉 ... 545
      〈DIKeyDlg.h〉 ... 547
      〈DIKeyDlg.cpp〉 ... 549
      〈di.h〉 ... 553
      〈di.cpp〉 ... 554
6부 게임용 캐릭터 Class 추가하기
   1. 캐릭터 Class 제작하기 ... 559
      1-1 Player Class 작성하기 ... 561
        멤버 변수 ... 561
        멤버 함수 ... 562
      1-2 CPlayer class 전체 소스 코드 ... 562
      〈player.h〉 ... 562
      〈player.cpp〉 ... 563
      1-3 Enemy Class 작성하기 ... 564
        멤버 변수 ... 564
      1-4 CEnemy class 전체 소스 코드 ... 569
      〈CEnemy.h〉 ... 569
      〈CEnemy.cpp〉 ... 569
      1-5 Pok Class 작성하기 ... 572
        멤버 변수 ... 572
        멤버 함수 ... 573
      1-6 CPok class 전체 소스 코드 ... 574
      〈pok.h〉 ... 574
      〈pok.cpp〉 ... 574
7부 실전 게임 제작하기
   1. 프로그램 따라하기 ... 579
   2. 프로그램 설명하기 ... 600
   [1]void CGameView::OnInitialUpdate() ... 602
        변수 초기화 ... 602
        DirectDraw 클래스 객체 생성 ... 603
        배경 OffScreen 생성 ... 603
        아군 전투기 OffScreen 생성 ... 604
        무기 생성 ... 605
        적군 전투기 생성 ... 606
        출력할 캐릭터의 위치와 효과음 포인터 배열의 초기화 ... 607
        폭발 이미지 OffScreen Surface 생성 ... 607
        DirectInput 객체 생성 ... 608
        DirectSound 객체 생성 및 배경 음악을 위한 SoundBuffer 생성 ... 609
        Multimedia Timer 설정 및 기타 변수 초기화 ... 610
   [2]void CGameView::OnMMTimer() ... 611
   [3]void CGameView::Check_Key() ... 612
        아군 전투기의 위치 이동 ... 612
        무기 발사 ... 614
        프로그램 종료 ... 616
   [4]void CGameView::UpdateSurface() ... 616
   [5]void CGameView::Scroll_Back() ... 617
   [6]void CGameView::Show_Player() ... 617
        폭발 이미지 출력 ... 617
        출력할 아군 전투기의 영역 설정 ... 618
        게임 시작시의 아군 전투기 출력 ... 619
        아군 전투기의 충돌 체크 및 출력 ... 620
   [7]void CGameView::Show_Weapon() ... 621
        무기 출력을 위한 영역 설정 ... 621
        생성되어 있는 총알의 출력 ... 622
   [8]void CGameView::Show_Enemy() ... 623
        이동 Type에 따라 적군 전투기 위치 class 생성 ... 623
        적군 이미지 출력 ... 626
   [9]BOOL CGameView::Collision_Player(int x,int y, int width, int height) ... 627
        아군 전투기와 전군 전투기의 거리 차이 구하기 ... 627
   [10]BOOL CGameView::Collision_Enemy(int x,int y, int width, int height) ... 630
   [11]void CGameView::Del_e_Pok() ... 631
   [12]void CGameView::Del_p_Pok() ... 633
   [13]void CGameView::Show_p_Pok(int px, int py) ... 635
   [14]void CGameView::Show_e_Pok(int px, int py) ... 636
   [15]void CGameView::Del_Sound() ... 637
   3. 프로그램 전체 소스 코드 ... 638
   〈StdAfx.h〉 ... 638
   〈StdAfx.cpp〉 ... 639
   〈MainFrm.h〉 ... 639
   〈MainFrm.cpp〉 ... 640
   〈Game.h〉 ... 642
   〈Game.cpp〉 ... 644
   〈GameDoc.h〉 ... 648
   〈GameDoc.cpp〉 ... 649
   〈GameView.h〉 ... 651
   〈GameView.cpp〉 ... 654
닫기