간단한 테트리스를 만들려고 시작했다가 벌써 1주일넘게 완성을 못시키고 있네요..ㅠㅠ
모르는게 하도 많아서 머리로 생각한것을 구현하는데 장벽이 자꾸 생겨서 해결해가며 하느라 ;;

일단, 테트리스 셑을 구성하려는데 대충 다음과 같이 생각했습니다.

struct BLOCK{
   int Kind; // 블럭 종류입니다.
   int State; // 지금 상태입죠.
   UPOINT* Data; // 블럭은 4개의 x,y좌표로 이뤄져있으므로 그 좌표값을 저장하는곳입니다.
};

/*---------------------------------------------------*/
// 블럭 정의부분입니다. s자 블럭은 2가지의 회전모양을 가지고 있기에 이렇게 정의했습니다.
UPOINT sblock[2][4] = {{{-1,-1}, {0,-1}, {0,0}, {1,0}}, {{-1,1}, {0,0}, {1,0}, {0,1}}};  
UPOINT zblock[2][4] = (생략)
...................

void SetBlock(BLOCK& block)
{
  switch(block.Kind)
  {
     case 1:   // s자 블럭에 관한 처리
       {
          if(block.State == 0){  // s자 블럭이 0번상태(회전하기 전)
              memcpy(block.Data, sblock[0], sizeof(UPOINT)*4);  // 0번상태로 세팅.
              block.State = 1;  // 다음 회전명령땐 1번상태를 돌려줍니다.
          if(block.State == 1){  // s자 블럭이 1번 상태(회전후)
              memcpy(block.Data, sblock[1], sizeof(UPOINT)*4);  // 1번 상태로 세팅.
              block.State = 0;  // 회전하기 전으로 돌려놓습니다.
        }
      case 2:
        {
           (...생략...)
        }
  }
}

/*---------------------------------------*/
int main()
{
   BLOCK block;  //
   block.Kind = 0;  //
   block.State = 0;  //
   block.Data = new UPOINT[4];  //

   SetBlock(block);  //

   delete[] block.Data;

   return 0;
}



대충 이런식으로 구현해서 블럭을 생성하거나 변환시키려고 하는데요
좀 지저분 해 보이기도 하고... 블럭마다 정해주려니 이런방법 말고는 없나 하는 생각이 들어서요.
블럭의 데이타를 효과적으로 적용할순 없을까요?

예를 들면 링크드 리스트를 여기 적용시킨다면 어떨까요?
^^; 목표를 가지고 만들어보는건 처음이라 무쟈게 힘드네요;


p.s. 주석을 조금 더 늘렸습니다.