글
[TetrisView 클래스의 Class Diagram]
테트리스의 화면 처리 및 프로그램의 큰 흐름을 담당하는 클래스인 TetrisView 에 대해 살펴보겠습니다. TetrisView.h 와 TetrisView.c 에서 변경된 부분 위주로 설명드리겠습니다. 먼저, 추가, 삭제, 변경 이력에 대해 언급드리겠습니다.
[TetrisView.h 버전 비교]
13 라인 (추가)
[TetrisView.c 버전 비교]
45 라인 (삭제)
58 ~ 59 라인 (추가)
이제는 위에서 언급한 부분들을 분석해 보겠습니다.
[TetrisView.h]
#ifndef _TETRIS_VIEW_H #define _TETRIS_VIEW_H #include "TetrisManager.h" typedef struct _tetrisView{ TetrisManager tetrisManager; }TetrisView; void TetrisView_StartGame(TetrisView* tetrisView); void TetrisView_ProcessGame(TetrisView* tetrisView, int processType, int direction); void TetrisView_EndGame(TetrisView* tetrisView); DWORD TetrisView_GetDownMilliSecond(TetrisView* tetrisView); //make temporarily for calling from main function #endif
13 라인 (추가)
TetrisView_GetDownMilliSecond 함수의 선언부입니다.
[TetrisView.c]
#include <stdio.h> #include <windows.h> #include <mmsystem.h> #include "TetrisView.h" #include "TetrisManager.h" #include "Constant.h" #pragma comment(lib, "winmm.lib") #define TETRIS_BACKGROUND_MUSIC_FILE_NAME "..\\res\\tetris_background_music.wav" void TetrisView_StartGame(TetrisView* tetrisView){ int speedLevel; PlaySound(TEXT(TETRIS_BACKGROUND_MUSIC_FILE_NAME), NULL, SND_ASYNC | SND_LOOP); printf("***** Tetris *****\nSpeed level (1 ~ 10) : "); scanf_s("%d", &speedLevel); if (speedLevel > MAX_SPEED_LEVEL || speedLevel < MIN_SPEED_LEVEL){ speedLevel = MIN_SPEED_LEVEL; } TetrisManager_Init(&tetrisView->tetrisManager, speedLevel); TetrisManager_Print(&tetrisView->tetrisManager); } void TetrisView_ProcessGame(TetrisView* tetrisView, int processType, int direction){ if (processType == DIRECTION){ TetrisManager_ChangeBoardByDirection(&tetrisView->tetrisManager, direction); } else if (processType == DIRECT_DOWN){ TetrisManager_ProcessDirectDown(&tetrisView->tetrisManager); } else if (processType == AUTO){ TetrisManager_ChangeBoardByAuto(&tetrisView->tetrisManager); } if (TetrisManager_IsReachedToBottom(&tetrisView->tetrisManager)){ //if you are going to move the block which has bottom wall or bottom fixed block, permit the block to move the direction if (processType == DIRECTION && direction == LEFT && (TetrisManager_CheckValidPosition(&tetrisView->tetrisManager, LEFT) == EMPTY) || processType == DIRECTION && direction == RIGHT && (TetrisManager_CheckValidPosition(&tetrisView->tetrisManager, RIGHT) == EMPTY)){ TetrisManager_ChangeBoardByDirection(&tetrisView->tetrisManager, direction); } if (TetrisManager_ProcessReachedCase(&tetrisView->tetrisManager) == END){ TetrisView_EndGame(tetrisView); } } TetrisManager_ProcessDeletingLines(&tetrisView->tetrisManager); TetrisManager_Print(&tetrisView->tetrisManager); } void TetrisView_EndGame(TetrisView* tetrisView){ PlaySound(NULL, 0, 0); system("cls"); printf("***** End *****\n%d level / %d lines deleted\n", tetrisView->tetrisManager.speedLevel, tetrisView->tetrisManager.deletedLineCount); system("pause"); exit(-1); } DWORD TetrisView_GetDownMilliSecond(TetrisView* tetrisView){ return TetrisManager_GetDownMilliSecond(&tetrisView->tetrisManager); }
45 라인 (삭제)
기존 버전에서 processType 이 AUTO 일 경우에 TetrisManager_Sleep 함수를 호출하던 부분을 제거하였습니다.
58 라인 (추가)
TetrisView_GetDownMilliSecond 함수의 정의부입니다. 이 함수에서는, TetrisManager_GetDownMilliSecond 함수를 호출하여 얻은 반환값을 다시 반환합니다.
59 라인 (추가)
TetrisManager_GetDownMilliSecond 함수를 호출하여, 게임에서 현재 블럭을 얼마만큼 지연시킨 후 밑으로 이동시켜야 하는지를 밀리세컨드로 계산하여 반환합니다.
'1.2) 프로젝트 > 테트리스' 카테고리의 다른 글
테트리스 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 (7) - 소스코드 구현 (Main) (0) | 2015.06.14 |
테트리스 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 |
테트리스 ver 0.2 (1) - 실행 결과 & 프로젝트 개요 (0) | 2015.06.12 |
RECENT COMMENT