간단한 테트리스를 만들려고 시작했다가 벌써 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. 주석을 조금 더 늘렸습니다.