테트리스를 만들면 뒷배경은 그대로인데 블럭들은 계속계속 움직이잖아요..
그러면 키입력을 받을때마다 system(\"cls\"); 를 이용해서 계속 계속 새로 출력해주는건가요?
아니면 다른 방법이 있나요??
제가 올린것처럼 소스를 해주면 되나요?
#include <stdio.h>
#define LEFT 75
#define RIGHT 77
#define UP 72
#define DOWN 80
#define ESC 27
int main(){
int i,j,x,y;
char in;
int map[5][5] = {{1,1,1,1,1},
{1,0,0,0,1},
{1,0,2,0,1},
{1,0,0,0,1},
{1,1,1,1,1}};
while(1){
system(\"cls\");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(map[i][j] == 0) printf(\" \");
else if(map[i][j] == 1) printf(\"■\");
else if(map[i][j] == 2){
y=i;
x=j;
printf(\"★\");
}
}
printf(\"\\n\");
}
in = getch();
if(in == UP && y>1 && y<5){
map[y-1][x] = map[y][x];
map[y][x] = 0;
}
else if(in == DOWN && y>0 && y<3){
map[y+1][x] = map[y][x];
map[y][x] = 0;
}
else if(in == LEFT && x>1 && x<5){
map[y][x-1] = map[y][x];
map[y][x] = 0;
}
else if(in == RIGHT && x>0 && x<3){
map[y][x+1] = map[y][x];
map[y][x] = 0;
}
else if(in == ESC) break;
}
printf(\"bye bye~\\n\");
}
파일도 올려놨엉!
system cls 는 화면 지우는거 아닌가여??
계속 계속 출력해야조..뭐 딴거있나욤ㅋ
ㄴ 넹 그게 궁금한거예요 변화된 키값에 따라 화면을 다시 출력하려고 하는데 그방법밖에 없는지 궁금해서...
아 좋은아버지한테 댓글단거.. ㅠㅠ
단풍님이 만든 게임에서는 화면 반짝거림같은게 없는것 같아서 정말 깔끔해보였거든요.. 제껀 왜이렇게 깜빡깜빡 거리는지...
그러면 system cls 로 화면을 지우고 다음 화면에 출력할걸 출력해주면 되죠
ㅋㅋ 댓글다면서 테트리스가 그런 원리라는걸 알았네요
지운 화면 / 다시 그리기가 반복되니까 깜박깜빡 처럼 보여요. 저는 winapi로 짜서 더블버퍼링가튼걸 적용했는데 콘솔로는 안해봐서 잘 모르겠네요 김늅늅형꺼는 안깜빡이던디
님이 저보다 C언어 더 잘하세여
ㅋㅋ 저 winapi 구경도 안해봣어여
ㄷㄷ;; 다들 고맙습니당~~~
저도 winapi는 안써봤어요 ㅠㅠ;
C 다 보셨다면 winapi 한 2~3일 (한 4챕터까지) 공부하고 적용할 수 있어요~ 그게 오히려 콘솔보단 쉬울꺼에영..ㅋㅋ
저는 테트리스 깜박깜박하고 반응도 느려서 변하는 부분만 출력하도록했어요 [핡]
그리고 getch는 블록킹함수 아닌가여? 그래서 전 if에 kbhit()쓰고 안에 getch()썼어요 [핡]
정말 바보같은 질문이지만 변하는 부분만 출력한다는게 무슨의미인지 아직 잘 모르겠어요 ㅠㅠ;;; c로 표현해주시면 더 잘 알아들을수도.. ㄷㄷ;