#include<stdio.h>
#include<Windows.h>
#include<conio.h>
#include<stdlib.h>

#define LEFT   75      // 좌측방향키
#define RIGHT  77      // 우측방향키
#define UP     72      // 위쪽방향키
#define DOWN   80      // 아래방향키

void gotoxy(int x,int y);
void mapsetting();//맵 세팅
int map[20][20]={0};//맵

void display();//맵 보이게 하는거
void drawbrick();//블록 그리는거
void control();//키보드입력받는곳
int blockcheck(int X,int Y);
void remove();//블록없애
void pile();//블록땅에닿으면 쌓


int x,y;//좌표
int shape=0;
        //↓
int brick[4][4][4]={
{
 {1,1,1,1},
 {0,0,0,0},
 {0,0,0,0},
 {0,0,0,0} },
{
 {1,1,0,0},
 {1,1,0,0},
 {0,0,0,0},
 {0,0,0,0} },
{
 {1,1,0,0},
 {0,1,1,0},
 {0,0,0,0},
 {0,0,0,0} },
{
 {1,1,0,0},
 {1,0,0,0},
 {1,0,0,0},
 {1,0,0,0} }
};

int main()
{
 x=8,y=1;
 mapsetting();

 display();
 gotoxy(x,y);
 drawbrick();
 while(1)
 {
  control();
  gotoxy(x,y);
 }
}

void gotoxy(int x,int y)//커서
{
    COORD pos = { x, y };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

void mapsetting()
{
 int i,j;
 for(i=0; i<20; i++)
 {
  for(j=0; j<20; j++)
  {
   if(i==0||j==0||j==19||i==19)
   {
    map[i][j]=1;
   }
  }
 }
}

void display()
{
 int i,j;
 for(i=0; i<20; i++)
 {
  for(j=0; j<20; j++)
  {
   if(map[i][j]==1)
   {
    gotoxy(j+j,i);
    printf("■");
   }
  }
 }
}

void drawbrick()
{
 int i,j;
   
 for(i=0; i<4; i++)
 {
  for(j=0; j<4; j++)
  {
   if(brick[shape][i][j]==1)
   {
    gotoxy(x*2+j*2,y+i);
    printf("■");
   }
   
  }

 }
}

int blockcheck(int X,int Y)
{
 int i,j;

 for(i=0; i<4; i++)
 {
  for(j=0; j<4; j++)
  {
   if(brick[shape][i][j]==1)
   {
    if(map[Y+i][X+j]==1)
    {
     return 0;
    }
   }
  }
 }
 return 1;
}

void control()
{
 char key;
 
 if((kbhit()!= 0))
 {
    key=getch();
 switch(key)
 {
 case 75:
  {
   if(blockcheck(x-1,y)==1)
   {
    remove();
    x=x-1;
    drawbrick();
   }
   break;
  }
 case 77:
  {
   if(blockcheck(x+1,y)==1)
   {
    remove();
    x=x+1;
    drawbrick();
   }
   break;
  }
 case 80:
  {
   if(blockcheck(x,y+1)==1)//밑에 아무것도 없으면 1
   {
    remove();
    y=y+1;
    drawbrick();
   }
   else
      {
       pile();
       x=8,y=1;
       gotoxy(x,y);
       drawbrick();
       display();
      }
   break;
  }
 default:break;
 }
 
    }
}

void remove()
{
 int i,j;

 for(i=0; i<4; i++)
 {
  for(j=0; j<4; j++)
  {
   if(brick[shape][i][j]==1)
   {
    gotoxy(x*2+j*2,y+i);
    printf("  ");
   }
  }
 }
}

void pile()
{
 int i,j;

 for(i=0; i<4; i++)
 {
  for(j=0; j<4; j++)
  {
   if(brick[shape][i][j]==1)
   {
    map[y][x]=1;
   }
  }
 }
}

아벽뚫려