글
테트리스 ver 0.2 의 요구사항은 다음과 같습니다.
-> 블럭 내려오는 딜레이 방식을 프레임 단위로 쪼개는 방식으로 변경
-> 연속으로 키 누르고 있는 경우 버그 수정
먼저, 프로젝트 설계에 앞서, 위의 요구사항들을 해결하기 위한 방안을 생각해 보겠습니다.
[요구사항 1. 블럭 내려오는 딜레이 방식을 프레임 단위로 쪼개는 방식으로 변경]
기존버전인 ver 0.1 에서는, Sleep 함수를 통해서, 프로그램을 지연시키고 나서, 블럭을 내리기 때문에, Sleep 함수가 진행되는 동안에는, 프로그램 자체가 멈추기 때문에, 사용자의 키 입력 또한 바로 받아서 처리를 할 수가 없었습니다.
따라서, 이번 버전 ver 0.2 에서는, Sleep 함수를 사용하지 않고, 단순히 GetTickCount 함수를 호출하여, 현재 틱 카운트를 확인하여 경과된 시간을 계산하여, 블럭을 내리기 때문에, 틱 카운트를 확인하는 동안에도 (프로그램을 멈추는 것이 아니기 때문에), 계속해서 사용자의 키 입력을 받아서 처리를 할 수가 있게 되었습니다.
보통, 사용자의 키 입력 처리와 동시에, 자동 화면 갱신을 해야하는 경우에, 위와 같은 구조를 사용하여, 처리를 하면 되는데, 일반적으로, 이러한 형태를 "프레임 단위로 잘게 쪼개서 처리를 한다" 라고 하기도 합니다. 저도, 이와 같은 구조로 코드를 변경하여, 사용자 키 입력 처리에 대한 기존의 버벅거림을 없앨 수 있었습니다.
[요구사항 2. 연속으로 키 누르고 있는 경우 버그 수정]
[ver 0.1 에서 위 방향키 계속 누르는 경우 버그 발생]
위 영상과 같이, ver 0.1 에서의 문제점은 위 방향키를 계속 누르고 있는 경우에, 블럭이 회전은 하되, 자동으로 시간이 되면, 밑으로 내려오지 않고, 계속 그 자리에서 회전만 하는 것입니다.
[ver 0.2 에서 위 방향키 계속 누르는 경우 버그 수정]
위 영상처럼, 위 방향키가 들어오면, 일정 딜레이를 주고, 밑으로 한 칸 블럭을 내리는 식으로 하여 ver 0.1 에서의 문제점을 해결하였습니다.
UP 키가 들어오면 프로그램을 일정 시간만큼 Sleep 시키고, Sleep 이 끝나면 블럭을 자동으로 한 칸 밑으로 내리는 형태로 처리됩니다. 이 방법은 완벽한 해결방안은 아니지만, 일단, 연속적으로 UP 키가 들어왔을 때, 회전만 하고, 블럭이 같은 위치에 계속해서 머무는 현상 자체는 피할 수 있기 때문에, 이번 버전에서는 이 방식을 사용하기로 결정하였습니다. 버전 업을 하면서 향후에, 좀 더 효과적인 방법으로 개선해 보도록 하겠습니다.
'1.2) 프로젝트 > 테트리스' 카테고리의 다른 글
테트리스 ver 0.2 (7) - 소스코드 구현 (Main) (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 (1) - 실행 결과 & 프로젝트 개요 (0) | 2015.06.12 |
테트리스 ver 0.1 (10) - 개발 완료 / 후기 (0) | 2015.06.12 |
테트리스 ver 0.1 (9) - 소스코드 구현 (Main) (0) | 2015.06.12 |
테트리스 ver 0.1 (8) - 소스코드 구현 (TetrisView) (0) | 2015.06.12 |
테트리스 ver 0.1 (7) - 소스코드 구현 (TetrisManager) (0) | 2015.06.12 |
RECENT COMMENT