글
마지막으로, 전체적으로 테트리스를 실행시키는 Main.c 를 분석해 보겠습니다. 먼저, 추가, 삭제, 변경 내역을 보여드리겠습니다.
[Main.c 버전 비교 (1)]
3 ~ 4 라인 (추가)
13 라인 (추가)
17 ~ 23 라인 (추가)
28 라인 (변경)
32 ~ 33 라인 (변경)
35 라인 (변경)
37 ~ 38 라인 (변경)
[Main.c 버전 비교 (2)]
40 라인 (변경)
42 ~ 43 라인 (변경)
45 라인 (변경)
50 라인 (변경)
52 라인 (추가)
53 라인 (변경)
이제는, 위에서 언급한 부분들을 분석할 차례입니다.
[Main.c]
#include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> #include "Constant.h" #include "TetrisView.h" int main(int argc, char* argv[]){ TetrisView tetrisView; TetrisView_StartGame(&tetrisView); int processType; int direction; DWORD tickCount; while (True){ processType = AUTO; direction = DOWN; tickCount = GetTickCount(); while (True){ if (GetTickCount() - tickCount > TetrisView_GetDownMilliSecond(&tetrisView)){ processType = AUTO; direction = DOWN; break; } if (_kbhit()){ int key = _getch(); if (_kbhit()){ key = _getch(); if (key == UP_KEY_CODE){ processType = DIRECTION; direction = UP; break; } else if (key == DOWN_KEY_CODE){ processType = DIRECTION; direction = DOWN; break; } else if (key == LEFT_KEY_CODE){ processType = DIRECTION; direction = LEFT; break; } else if (key == RIGHT_KEY_CODE){ processType = DIRECTION; direction = RIGHT; break; } } else{ if (key == SPACE_BAR_KEY_CODE){ processType = DIRECT_DOWN; break; } } } } TetrisView_ProcessGame(&tetrisView, processType, direction); } return 0; }
3 ~ 4 라인 (추가)
이번 버전의 소스 파일에서 필요한 헤더파일을 include 합니다.
13 라인 (추가)
ver 0.1 에서 블럭을 내리던 방식을 (Sleep 함수 호출) 프레임 쪼개는 방식으로 바꾸기 위해서, 0.001 초마다 틱 카운트를 가져와서 저장할 변수를 선언합니다.
17 라인 (추가)
GetTickCount 함수를 호출하여 시작 지점의 틱 카운트를 얻어옵니다.
18 라인 (추가)
내부 무한 루프를 삽입하는데, 이는 틱카운트를 계속 세서 원하는 시점이 되거나, 사용자 키를 입력받았을 때를 묶어서 처리하기 위한 루프입니다.
19 ~ 23 라인 (추가)
만약, 현재 GetTickCount 함수를 호출하여 얻어온 틱 카운트에서 시작 지점의 틱 카운트를 뺀 값이 TetrisView_GetDownMilliSecond 함수를 호출하여 얻은 게임에서 사용되는 블럭 다운용 밀리세컨드보다 크면 processType 에 AUTO 를 넣고, direction 에 DOWN 을 넣고, break 로 내부 루프를 탈출합니다. (시간이 다 되어 자동으로 블럭을 내려야 하는 경우)
28 라인 (변경)
ver 0.1 에서의 switch 문을 if 문으로 변경했습니다.
32 ~ 33 라인 (변경)
ver 0.1 에서의 switch 문을 else if 문으로 변경했고, 기존에 LEFT 키 처리 부분이었는데, DOWN 키 처리로 변경하였습니다.
35 라인 (변경)
DOWN 키 처리로 변경되었기 때문에, direction 에 DOWN 을 저장합니다.
37 ~ 38 라인 (변경)
ver 0.1 에서의 switch 문을 else if 문으로 변경했고, 기존에 RIGHT 키 처리 부분이었는데, LEFT 키 처리로 변경하였습니다.
40 라인 (변경)
LEFT 키 처리로 변경되었기 때문에, direction 에 LEFT 를 저장합니다.
42 ~ 43 라인 (변경)
ver 0.1 에서의 switch 문을 else if 문으로 변경했고, 기존에 DOWN 키 처리 부분이었는데, RIGHT 키 처리로 변경하였습니다.
45 라인 (변경)
RIGHT 키 처리로 변경되었기 때문에, direction 에 RIGHT 를 저장합니다.
50, 53 라인 (변경)
ver 0.1 에서의 switch 문을 if 문으로 변경했습니다.
52 라인 (추가)
내부 루프를 빠져 나가기 위해 break 를 추가했습니다.
'1.2) 프로젝트 > 테트리스' 카테고리의 다른 글
테트리스 ver 0.3 (4) - 소스코드 변경 내역 (0) | 2015.08.20 |
---|---|
테트리스 ver 0.3 (3) - 프로그램 설계 (Use Case, Class, Sequence) (0) | 2015.08.20 |
테트리스 ver 0.3 (2) - 요구사항 분석 (0) | 2015.08.20 |
테트리스 ver 0.3 (1) - 실행 결과 & 프로젝트 개요 (10) | 2015.06.17 |
테트리스 ver 0.2 (8) - 개발 완료 / 후기 (0) | 2015.06.14 |
테트리스 ver 0.2 (6) - 소스코드 구현 (TetrisView) (0) | 2015.06.13 |
테트리스 ver 0.2 (5) - 소스코드 구현 (TetrisManager) (0) | 2015.06.13 |
테트리스 ver 0.2 (4) - 소스코드 변경 내역 (0) | 2015.06.13 |
테트리스 ver 0.2 (3) - 프로그램 설계 (Use Case, Class, Sequence) (0) | 2015.06.12 |
테트리스 ver 0.2 (2) - 요구사항 분석 (0) | 2015.06.12 |
RECENT COMMENT