1.2) 프로젝트/테트리스
테트리스 ver 0.3 (8) - 소스코드 구현 (Main)
kkikkodev
2015. 8. 21. 02:02
마지막으로, 전체적으로 테트리스를 실행시키는, Main.c 를 분석하겠습니다. 먼저, 추가, 삭제, 변경 내역을 살펴보겠습니다.
[Main.c 버전 비교]
13 라인 (변경)
17 라인 (삭제)
21 라인 (추가)
36 라인 (추가)
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 = GetTickCount(); while (True){ processType = AUTO; direction = DOWN; while (True){ if (GetTickCount() - tickCount > TetrisView_GetDownMilliSecond(&tetrisView)){ processType = AUTO; direction = DOWN; tickCount = GetTickCount(); 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; tickCount = GetTickCount(); 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; tickCount = GetTickCount(); break; } } } } TetrisView_ProcessGame(&tetrisView, processType, direction); } return 0; }
13 라인 (변경)
while 문 들어가기 전에 GetTickCount 를 호출하여 현재 틱 카운트를 가져와서 tickCount 변수에 저장합니다.
17 라인 (삭제)
21, 36, 53 라인의 추가를 통해서, while 문 초반에 GetTickCount 를 세는 부분은 필요 없어서 삭제했습니다.
21 라인 (추가)
적절한 시간 간격이 되어서, 블럭이 자동으로 밑으로 떨어지게 되면, 다시 GetTickCount 를 세서 tickCount 에 저장합니다. (새로 세기 시작)
36 라인 (추가)
사용자의 아래 키를 입력 받았을 때에도, 다시 GetTickCount 를 세서 tickCount 에 저장합니다. (새로 세기 시작)
53 라인 (추가)
사용자의 스페이스바 키를 입력 받았을 때에도, 다시 GetTickCount 를 세서 tickCount 에 저장합니다. (새로 세기 시작)
결국, 블럭이 아래로 내려가는 경우 (자동으로 내려갈 때, 아래 키를 눌렀을 때, 스페이스 바 키를 눌렀을 때) 에는, 틱 카운트를 초기화하여 다시 세는 방식으로 변경한 것입니다.