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();