해결
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();
'programming > c , c++' 카테고리의 다른 글
[테트리스개발] 프로그램 실행중 콘솔화면 멈춤현상 발생 (0) | 2021.09.19 |
---|---|
[테트리스개발]에러:위치를 읽는 동안 액세스 위반이 발생했습니다. (0) | 2021.07.18 |
[테트리스개발] 콘솔창의 종료문구가 게임보드 중간에 낀 현상 (0) | 2021.07.12 |
[테트리스개발]c언어 난수생성 (0) | 2021.07.12 |
[테트리스개발]BOOL WINAPI 반환타입 (0) | 2021.07.11 |