C언어 테트리스입니다 ㅠㅠ
세련
질문 제목 : 테트리스 블록 회전 후 잔상이남아요 질문 요약 :테트리스 블록 회전 후 잔상이남아요질문 내용 : #include stdio.h
#include conio.h
#include windows.h
#define up 72 // 위쪽 방향키 아스키코드값 define
#define down 80 // 아랫쪽 방향키 아스키코드값 define
#define left 75 // 왼쪽 방향키 아스키코드값 define
#define right 77 // 오른쪽 방향키 아스키코드값 define
#define one 49
#define two 50
#define three 51
#define space 32
#define enter 13
//kbhit(); 값을 입력받으면 1을 리턴
int h; // 높이 y좌표
int s; // xy 칸 x좌표
int sa; // 배열 칸 x/2좌표
int score = 0;
char ch;
int rd;
void gotoxy(int x, int y)
{
coord pos = { x-1, y-1 };
setconsolecursorposition(getstdhandle(std_output_handle), pos);
}
void prtfield(int (*a)[10])
{
for(h=0;h20;h++)
{
printf(▩);
for(sa=0;sa10;sa++)
{
if(a[h][sa] == 1) // 배열값이 1이면 블럭이 존재한다
printf(■);
else
printf( );
}
printf(▩);
printf(\n);
}
printf(▩▩▩▩▩▩▩▩▩▩▩▩);
}
void gameover()
{
system(cls);
printf(game over);
}
void shape1(int (*a)[10])
{
for(h=2;h20;h++)
{
if(a[h+1][s/2] == 1 || a[h+1][s/2-1] == 1) // 블럭밑에 블럭이 있을때
{
a[h-1][s/2-1] = 1;
a[h-1][s/2] = 1;
a[h][s/2-1] = 1;
a[h][s/2] = 1;// 그 위치 배열에 1을 넣어줌
break;
}
if(h=1 && a[h+1][(s)/2-1] != 1 )
{
sleep(50); // 블럭이 내려오는 딜레이타임
gotoxy(s,h-2); // 블럭이 밑으로 내려가면서 위에있는 블럭은 지워줌
printf( );
gotoxy(s,h-1); // 밑에다 블럭을 그려줌
printf(■■);
gotoxy(s,h);
printf(■■);
if(a[h+1][(s)/2-1] == 1 || a[h+1][s/2] == 1) // 블럭밑에 다른 블럭이 존재하면 그 위치에 1을 리턴
{
a[h-1][s/2-1] = 1;
a[h-1][s/2] = 1;
a[h][s/2-1] = 1;
a[h][s/2] = 1;// 그 위치 배열에 1을 넣어줌
break;
}
if(h==19)
{
a[h-1][s/2-1]=1;
a[h-1][s/2] = 1;
a[h][s/2-1] = 1;
a[h][s/2] = 1;
}
if(_kbhit()) // 키를 입력받았을때
{
ch = _getch();
if(ch == -32 )
{
ch = getch();
switch(ch)
{
case left:
if(s4 && a[h][s/2-2]!=1)
{
gotoxy(s-2,h-1);
printf(■■);
gotoxy(s-2,h);
printf(■■);
gotoxy(s+2,h-1);
printf( );
gotoxy(s+2,h);
printf( );
s-=2;
break;
}
else
break;
case right:
while(1)
{
fflush(stdin);
if(s18 && a[h][s/2+1] != 1)
{
gotoxy(s+1,h-1);
&nbsbsp;printf(■■);
gotoxy(s+1,h);
printf(■■);
gotoxy(s-1,h-1);
printf( );
gotoxy(s-1,h);
printf( );
s+=2;
break;
}
else
break;
}
}
}
switch(ch)
{
case space: // 스페이스를 눌렀을때 바로 바닥으로 이동
for(h=1;h20;h++)
{
if(a[h+1][(s)/2-1] == 1 || a[h+1][s/2] == 1 || h == 19)
{
a[h-1][s/2-1] = 1;
a[h-1][s/2] = 1;
a[h][s/2-1] = 1;
a[h][s/2] = 1; // 그 위치 배열에 1을 넣어줌
break;
}
}
}
}
}
}
}
void shape2(int (*a)[10])
{
for(h=2;h20;h++)
{
switch(rd)
{
case 0:
if(a[h+1][s/2-1] == 1 || a[h+1][s/2] == 1 || a[h+1][s/2+1] == 1 || a[h+1][s/2+2] == 1) // 블럭밑에 블럭이 있을때
{
a[h][s/2+2] = 1;
a[h][s/2+1] = 1;
a[h][s/2] = 1;
a[h][s/2-1] = 1;// 그 위치 배열에 1을 넣어줌
break;
}
if(h=1 && a[h+1][s/2-1] != 1 && a[h+1][s/2] != 1 && a[h+1][s/2+1] != 1 && a[h+1][s/2+2] != 1 )
{
sleep(200); // 블럭이 내려오는 딜레이타임
gotoxy(s,h-1); // 블럭이 밑으로 내려가면서 위에있는 블럭은 지워줌
printf( );
gotoxy(s,h);
printf(■■■■);
if(a[h+1][s/2-1] == 1 || a[h+1][s/2] == 1 || a[h+1][s/2+1] == 1 || a[h+1][s/2+2] == 1) // 블럭밑에 다른 블럭이 존재하면 그 위치에 1을 리턴
{
a[h][s/2+2] = 1;
a[h][s/2+1] = 1;
a[h][s/2] = 1;
a[h][s/2-1] = 1;// 그 위치 배열에 1을 넣어줌
break;
}
if(h==19)
{
a[h][s/2+2] = 1;
a[h][s/2+1] = 1;
a[h][s/2] = 1;
a[h][s/2-1] = 1;// 그 위치 배열에 1을 넣어줌
break;
}
if(_kbhit()) // 키를 입력받았을때
{
ch = _getch();
if(ch == -32)
{
ch = getch();
switch(ch)
{
case left:
if(s4 && a[h][s/2-1]!=1)
{
gotoxy(s+6,h);
printf( );
gotoxy(s-2,h);
printf(■■■■);
s-=2;
break;
}
else
break;
case right:
if(s14 && a[h][s/2+4] != 1)
{
gotoxy(s,h);
printf( );
gotoxy(s+2,h);
printf(■■■■);
s+=2;
break;
}
else
break;
case up:
rd = 1;
}
}
}
}
break;
case 1:
if(a[h-1][s/2-1] == 1) // 블럭밑에 블럭이 있을때
{
a[h-3][s/2-1] = 1;
a[h-2][s/2-1] = 1;
a[h-1][s/2-1] = 1;
a[h][s/2-1] = 1;// 그 위치 배열에 1을 넣어줌
break;
}
if(h=1 && a[h+1][s/2-1] != 1)
{
sleep(200); // 블럭이 내려오는 딜레이타임
gotoxy(s,h-4); // 블럭이 밑으로 내려가면서 위에있는 블럭은 지워줌
printf( );
gotoxy(s,h-3);
printf(■);
gotoxy(s,h-2);
printf(■);
gotoxy(s,h-1);
printf(■);
gotoxy(s,h);
printf(■);
if(a[h-1][s/2-1] == 1) // 블럭밑에 블럭이 있을때
{
a[h-3][s/2-1] = 1;
a[h-2][s/2-1] = 1;
a[h-1][s/2-1] = 1;
a[h][s/2-1] = 1;// 그 위치 배열에 1을 넣어줌
break;
}
if(h==19)
{
a[h-3][s/2-1] = 1;
a[h-2][s/2-1] = 1;
a[h-1][s/2-1] = 1;
a[h][s/2-1] = 1;// 그 위치 배열에 1을 넣어줌
break;
}
if(_kbhit()) // 키를 입력받았을때
{
ch = _getch();
if(ch == -32)
{
ch = getch();
switch(ch)
{
case left:if(s4 && a[h][s/2-1]!=1)
{
gotoxy(s-2,h+4);
printf( );
gotoxy(s-2,h+3);
printf( );
gotoxy(s-2,h+2);
printf( );
gotoxy(s-2,h+1);
printf( );
gotoxy(s-2,h+3);
printf(■);
&nbnbsp;gotoxy(s-2,h+2);
printf(■);
gotoxy(s-2,h+1);
printf(■);
gotoxy(s-2,h);
printf(■);
s-=2;
break;
}
else
break;case right:
if(s20 && a[h][s/2+4] != 1)
{
gotoxy(s+2,h);
printf( );
gotoxy(s+2,h+1);
printf(■);
gotoxy(s+2,h+2);
printf(■);
gotoxy(s+2,h+3);
printf(■);
gotoxy(s+2,h+4);
printf(■);
s+=2;
break;
}
else
break;
case up:
rd = 0;
break;
}
}
}
}
break;
}
}
}
void del(int (*a)[10]) // 줄이 찼는지의 여부를 확인한후 줄 삭제
{
int check[20]={0};
int height=0;
int i, j, k;
int out = 0;
for(i=19;i=0;i--)// 가득찬지의 여부
{
for(j=0;j10;j++)
{
if(a[i][j]!=1) //i가 1이 아니면 확인할 필요 없음
break;
}
if(j==10)
check[i] = 1;
}
for(i=19;i=0;i--)
{
if(check[i]==1)
{
for(k=i;k0;k--)
{
for(j=0;j10;j++)
{
a[k][j] = a[k-1][j]; //윗줄 아래로 내려줌
a[k-1][j] = 0;
}
}
check[i] = 0;
score += 10;
}
}
}
int main()
{
int a[20][10] = {0};
while(1)
{
s = 13;
system(cls);
del(a);
prtfield(a);
gotoxy(50,10);
printf(score %d, score);
shape2(a);
}
return 0;
}이 코딩에서요 shape2함수를 보면 ㅡㅡㅡㅡ 이블록이 누운 상태에서는 좌우이동해도 잔상이없지만, 회전후 좌우이동을 하면 잔상이남습니다 이거어떻게 해결이안될까요?ㅠㅠㅠ
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2685477 | 소수점이하 출력하는거요 | 널위해 | 2025-02-18 |
2685449 | printf배우고있는데요 궁금한게있어요 (8) | 꽃큰 | 2025-02-18 |
2685393 | c언어 질문이요.... | 붕붕 | 2025-02-18 |
2685365 | 윈도우7에서 visual studio c++6.0 (1) | 빛길 | 2025-02-17 |
2685317 | segmentation fault가 나요 | 가람 | 2025-02-17 |
2685292 | 다중스택질문 | 올해1살 | 2025-02-17 |
2685231 | C언어와 닷넷에 대해서 질문!! (2) | 설아 | 2025-02-16 |
2685206 | VisualBasic 과 DEV++ 의 장단점과 만든 파일 호환 가능하나요? | 에드워드 | 2025-02-16 |
2685154 | 배열 크기조절 | 해찬솔 | 2025-02-15 |
2685124 | 수정이거 제가 뭐가 잘못한거죠 ? | 아이돌 | 2025-02-15 |
2685096 | 포인터의 고수분들 모두 보세요!! 제발 ㅠ_ㅠ 헷갈려헷갈려..갈려헷.. (7) | 치킨마루 | 2025-02-15 |
2685045 | 전처리기 질문 | 치에미 | 2025-02-14 |
2685016 | 오류 좀 확인해 주시면 감사하겠습니다 | 초코맛사탕 | 2025-02-14 |
2684917 | 알고리즘을 이용한 행렬의 전치// 문제다운 문제네요. | 뿡뿡 | 2025-02-13 |
2684868 | 양방향 연결리스트에서 실행도중 죽는 이유좀 찾아주세요. (2) | 예다움 | 2025-02-13 |
2684844 | 시계프로그램인데 도저히 모르겠어요ㅠ (1) | 비내리던날 | 2025-02-12 |
2684812 | 레포트좀도와주세요ㅠㅠ (2) | 갈매빛 | 2025-02-12 |
2684780 | 채팅창 흉내내보려고하는데요 ㅜ.ㅜ (1) | 바름 | 2025-02-12 |
2684729 | 내일 시험인데 메모리 그리는것좀 도와주세요 ㅠ (1) | 상처주지마 | 2025-02-11 |
2684701 | 버퍼 관련 질문 3가지 (이전거랑 달라요) | 한국녀 | 2025-02-11 |