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함수를 보면 ㅡㅡㅡㅡ 이블록이 누운 상태에서는 좌우이동해도 잔상이없지만, 회전후 좌우이동을 하면 잔상이남습니다 이거어떻게 해결이안될까요?ㅠㅠㅠ
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676182 | 숫자 순서대로 배열하는법 | 권뉴 | 2024-11-24 |
2676152 | 기본적인거 하나 질문드립니다. | 개미 | 2024-11-24 |
2676124 | 함수선언관련 질문이에요~...털썩..수정완료 (2) | 가지 | 2024-11-24 |
2676092 | C언어 책 (2) | 아서 | 2024-11-24 |
2676065 | 웹사이트 또는 메신저 등에서 원하는 텍스트를 검사하는방법?? (1) | 모든 | 2024-11-23 |
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |