테트리스 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 키가 들어왔을 때, 회전만 하고, 블럭이 같은 위치에 계속해서 머무는 현상 자체는 피할 수 있기 때문에, 이번 버전에서는 이 방식을 사용하기로 결정하였습니다. 버전 업을 하면서 향후에, 좀 더 효과적인 방법으로 개선해 보도록 하겠습니다.

by kkikkodev 2015. 6. 12. 13:48