목차 일부
1부 게임과 DirectX의 개요
1. 게임의 역사와 종류 ... 27
1-1 게임의 역사 ... 27
1-2 게임의 종류 ... 32
아케이드(Arcade) ... 32
어드벤처(Adventure) ... 32
롤플레잉(Role Playing) ... 33
시뮬레이션(Si...
더보기
목차 전체
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
더보기 닫기