#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]);
 
 }
 

이렇게 바꾸니 소스가 길어지긴 했지만 확실히 나아졌네요 ㅋㅋㅋㅋㅋ