마지막으로, 전체적으로 테트리스를 실행시키는, 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 에 저장합니다. (새로 세기 시작)

결국, 블럭이 아래로 내려가는 경우 (자동으로 내려갈 때, 아래 키를 눌렀을 때, 스페이스 바 키를 눌렀을 때) 에는, 틱 카운트를 초기화하여 다시 세는 방식으로 변경한 것입니다.


by kkikkodev 2015. 8. 21. 02:02