programming/c , c++
[테트리스개발] 방향키클릭시 이동 느림 이슈 관련
worldint
2021. 8. 28. 19:32
해결
while (test < 10) {
int i;
for (i = 0; i < 5; i++) {
if (_kbhit()) {
key = _getch();
if (key == -32) {
key = _getch();
switch (key) {
case LEFT:
moveLeft(t);
drawBoard(); //지금은 전체 다시 다그려주는건데 나중에 바꾸자
break;
/*case RIGHT:
moveRight();
drawBoard();
break;
case UP:
rotBlock();
drawBoard();
break;
case DOWN:
break;*/
}
}
}
}
test++;
dropBlock(t);
drawBoard();
Sleep(1000);
}
}
moveLeft함수후 바로 drawBlock함수를 해줬기때문에 <-방향키를 눌렀을 때 바로 블럭이 왼쪽으로 옮겨질것으로 생각했지만 그렇게 동작하지 않음
방향키를 누른후 Sleep함수의 시간에 맞춰 왼쪽으로 이동함
방향키를 누른후 1초뒤에 왼쪽으로 이동한다는 말임
---------------------------------------------------------------------------------------------------------
해결함
일단 위와같은 현상이 발생한 이유는
프로그램을 시작하자마자 내가 방향키를 누르기전에 순식간에 dropBlock(t)실행후-> drawBoard()실행 후-> Sleep(1000);까지 이미 내려가서 멈취있는상태이다
그러므로 Sleep() 함수의 위치가 틀린것이다.
1초마다 떨어트리고 싶다면 for문이 5번 반복이니까 for문 한번당 0.2초씩 멈추게 해주면 된다.
그럼 아래와 같은 코드가 나온다.
while (1) {
int i;
for (i = 0; i < 5; i++) {
if (_kbhit()) {
key = _getch();
if (key == -32) {
key = _getch();
switch (key) {
case LEFT:
moveLeft(t);
drawBoard(); //지금은 전체 다시 다그려주는건데 나중에 바꾸자
break;
case RIGHT:
moveRight(t);
drawBoard();
break;
case UP:
rotBlock(t);
drawBoard();
break;
/*case DOWN:
break;*/
}
}
}
Sleep(200);
}
if (fixCheck(t) == 1) {
drawBoard();
break;
}
dropBlock(t);
drawBoard();