#include <stdio.h>
#include <Turboc.h>
#define UP 72 // 모형바꿀떄
#define DOWN 80 // 모형 빠르게 내려오게하기
#define LEFT 75 // 모형 왼쪽으로 이동
#define RIGHT 77 // 모형 오른쪽으로 이동
#define ESC 27 // 테트리스 중단
#define SPACE 32 // 모형 맨밑으로 즉시이동
typedef struct point
{
int x;
int y;
}point;
point shape[4][4]={{0,0,0,-1,2,0,-2,0},{0,0,0,1,2,0,-2,0},{0,0,2,0,0,-1,0,1},{0,0,-2,0,0,-1,0,1}}; // 조각1 예시
char *bw[3]={" ","□ ","■"};
BOOL arr[12][22];// 테트리스 테두리안 false로 모두 초기화
BOOL o[12][22]; //땅바닥에 쳐박혀잇는 상자들은 arr[][]=1 + o[]=1 내려오고잇는중인 상자는 arr[][]=1 o[]=0
BOOL c[12][22];
void allscreen(); // 겉테두리+전체 스크린 출력
void erase(); //한줄이 채워지면 지우기
void kkk();
main()
{
int veloc=15; // 내려갈때 속도
int velocc=15; //내려갈떄 속도에 대한 카운터
int r;
int a;
int b;
int k=0;
randomize();
clrscr();
gotoxy(20,20);
puts("any key put!");
getch();
clrscr();
allscreen();
while(1)
{
r=random(1);
while(1){
switch(r)
{ case 0:
gotoxy(11,2);
for(a=0;a<12;a++)
{ for(b=0;b<22;b++)
{ c[a][b]=arr[a][b];
}
}
for(a=0;a<4;a++)
{
arr[5+(shape[0][a].x-1)/2][1+shape[0][a].y+k]=TRUE;
}
for(a=1;a<11;a++)
{ for(b=1;b<21;b++)
{ if(c[a][b]!=arr[a][b])
{
gotoxy((a*2)+1,b+1);
kkk(arr[a][b]);
}
}
}
break;
}
if(--veloc==0)
{
veloc=velocc;
for(a=0;a<12;a++)
{ for(b=0;b<22;b++)
{ c[a][b]=arr[a][b];
}
}
for(a=0;a<4;a++){
arr[5+(shape[0][a].x-1)/2][1+shape[0][a].y+k]=FALSE;
arr[5+(shape[0][a].x-1)/2][1+shape[0][a].y+k+1]=TRUE;
}
for(a=1;a<11;a++)
{ for(b=1;b<21;b++)
{ if(c[a][b]!=arr[a][b])
{
gotoxy((a*2)+1,b+1);
kkk(arr[a][b]);
}
}
}
k++;
}
delay(1000/15);
}
}
}
void allscreen() //arr[a][b]==(좌표지점)((a*2)+1,b+1),좌표지점(a,b)=arr[(a-1)/2][b-1].
{ //좌표지점 (1,1)=arr[0][0],(3,2)=arr[1][1]
int a;
int b;
for(a=0;a<12;a++)
{ for(b=0;b<22;b++)
{
if((a==0)||(b==0)||(a==11)||(b==21)) //테두리 □로 만들어준다
{
gotoxy((a*2)+1,b+1);
puts(bw[1]);
o[a][b]=FALSE;
}
else if(arr[a][b]==FALSE) //테두리 외에 테두리안에서 a.b가 비어잇다면,
{
gotoxy((a*2)+1,b+1);
puts(bw[0]); // " "로 만든다
o[a][b]=FALSE;
}
else if(arr[a][b]==TRUE) //테두리 내에 a.b가 차잇다면,
{
gotoxy((a*2)+1,b+1);
puts(bw[2]); //"■"로 만들어준다.
}
}
}
} // allscreen()함수 종료문
void erase()
{
int a,b,c,sum;
for(b=1;b<21;b++)
{
sum=0;
for(a=1;a<11;a++)
{
sum=arr[a][b]+sum;
}
if(sum==10)
{
for(a=1;a<11;a++)
{
arr[a][b]=FALSE;
o[a][b]=FALSE;
}
for(c=b-1;c>1;c--)
{ for(a=1;a<11;a++)
{
if((arr[a][c]==TRUE)&&(o[a][c]==TRUE))
{ arr[a][c]=FALSE;
o[a][c]=FALSE;
arr[a][c+1]=TRUE;
o[a][c+1]=TRUE;
}
}
}
}
}
}
void kkk(BOOL z)
{
if(z==TRUE)
puts(bw[2]);
else
puts(bw[0]);
}
이렇게 바꾸니 소스가 길어지긴 했지만 확실히 나아졌네요 ㅋㅋㅋㅋㅋ
미안 좀늦게봤네 지금확인함
근데 소스코드올릴때 들여쓰기좀해서 해주면안됨? 존나보기힘드네;;
야 뭘어떻게바꾼거임 allscrenn소스 변경된거없는거같은데 이거 내가 소스분석첨부터 다시해야됨 ;;?
지난번 너한테 말해줄때 나도 니소스다분석해준게아니라 예전 내경험이 그래서 말해준것뿐임 뭘어떻게 변경했다는거?
대강돌려보긴했는데 확실히 다시짠소스가 빠르긴함 잘만들었음 거기서계속해 봐바
ㅋㅋ 피드백 감사요!