~cpp block[0][0]=1;이라고 적고 실행해보자. 아래와 같은 결과가 나올것이다.
~cpp block[x좌표][y좌표]=블럭의 종류;
~cpp block_next[x좌표][y좌표]=블럭의 종류;
~cpp 1.출력할 블럭의 모양을 결정한다. 2.랜덤으로 블럭을 생성한 후 next창에 출력한다. 3.next창에 출력된 블럭을 가져온뒤 메인창에 출력한다. 4.블럭을 움직인다. 5.블럭을 회전시킨다. 6.한줄이 다 찼을때, 블럭을 삭제한다. 7.점수와 스테이지를 변화시킨다.
~cpp
{{
{0,0,0,0},
{2,2,2,2},
{0,0,0,0},
{0,0,0,0}}
,{
{0,0,2,0},
{0,0,2,0},
{0,0,2,0},
{0,0,2,0}}
,{
{0,0,0,0},
{2,2,2,2},
{0,0,0,0},
{0,0,0,0}}
,{
{0,0,2,0},
{0,0,2,0},
{0,0,2,0},
{0,0,2,0}}
},

~cpp int block_id; block_id=rand()%7; for (register int i=0;i<3;++i) for (register int j=0; j<4; ++j) block_next[i][j]=block_type[block_id][0][i][j]; prv_block=block_id; //전역변수에 저장.
~cpp
for (register int i=0;i<3; ++i)
{
for (register int j=0; j<4; ++j)
{
if (0!=block_type[prv_block][0][i][j])
{
if (0==block[3+i][16+j])
block[3+i][16+j]=block_type[prv_block][0][i][j];
else
game_end();
}
}
}
x=3; //전역변수 x
y=16; //전역변수 y
shape=0; //전역변수 현재 블록의 회전정도
now_block=prv_block; //전역변수 현재 블럭의 ID

~cpp
int move_block(int where)// -1좌 0아래 1우
{
int temp_x=x+where;
int temp_y=y-(where+1)%2;
int temp_block[4][4]={0,};
int ground[4]={0,};
int side[2][4]={0,};
int swit[2][4]={0,};
// 블럭의 끝을 체크한다.
for (register int i=0;i<4; ++i)
{
for (register int j=0; j<4; ++j)
{
if (0!=block_type[now_block][shape][i][j])
{
if (i>=side[0][j] && 0==swit[1][j])
{
side[0][j]=i;
swit[1][j]=1;
}
side[1][j]=i;
if (j>=ground[i] && 0==swit[0][i])
{
ground[i]=j;
swit[0][i]=1;
}
}
}
}
// 블럭이 움직일 수 있는가를 판단한다. 못 움직일 경우에는 1을 리턴하고 종료한다.
for (i=0;i<4; ++i)
{
for (register int j=0; j<4; ++j)
{
if (0!=block_type[now_block][shape][i][j])
{
if (temp_x+i<0 || temp_x+i>9 )
return 1;
else if (temp_y+j<0 || temp_y+j>19 )
return 1;
else if (0!=block[temp_x+i][temp_y+j])
{
if (ground[i]+1>j && where==0)
return 1;
else if (side[0][j]+1>i && where==-1)
return 1;
else if (side[1][j]-1<i && where==1)
return 1;
}
}
}
}
// 이전의 블럭의 이미지를 제거한다.
for (i=0;i<4; ++i)
for (register int j=0; j<4; ++j)
if (0!=block_type[now_block][shape][i][j])
block[x+i][y+j]=0;
// 새로운 블럭을 그린다.
for (i=0;i<4; ++i)
for (register int j=0; j<4; ++j)
if (0!=block_type[now_block][shape][i][j])
block[temp_x+i][temp_y+j]=block_type[now_block][shape][i][j];
x=temp_x;y=temp_y;
return 0;
}
~cpp
int temp_x=x;
int temp_y=y;
int temp_shape=(shape+1)%4;
int crash=2;
int temp_block[4][4]={0,};
//블럭이 벽에 닿는지, 충분한 공간이 있는지를 확인한다.
while (2==crash)
{
for (register int i=0;i<4; ++i)
for (register int j=0; j<4; ++j)
temp_block[i][j]=0;
crash=0;
for (i=0;i<4; ++i)
for (register int j=0; j<4; ++j)
if (0!=block_type[now_block][shape][i][j]&& 0<=i+x-temp_x && 3>=i+x-temp_x )
temp_block[i+x-temp_x][j]=1;
for (i=0;i<4; ++i)
{
for (register int j=0; j<4; ++j)
{
if (0!=block_type[now_block][temp_shape][i][j])
{
if (temp_x+i<0)
{
temp_x+=1;crash=2;
}
else if (temp_x+i>9 )
{
temp_x-=1;crash=2;
}
else if (0!=block[temp_x+i][temp_y+j] && 1!=temp_block[i][j])
crash=1;
}
}
}
}
//블럭이 회전할 공간이 있으면, 이전의 블럭을 삭제한다.
if (1==crash)
return 0;
for (register int i=0;i<4; ++i)
for (register int j=0; j<4; ++j)
if (0!=block_type[now_block][shape][i][j])
block[x+i][y+j]=0;
//새로운 블럭을 그려넣는다.
for (i=0;i<4; ++i)
for (register int j=0; j<4; ++j)
if (0!=block_type[now_block][temp_shape][i][j])
block[temp_x+i][temp_y+j]=block_type[now_block][temp_shape][i][j];
//변화된 값을 저장한다.
x=temp_x;y=temp_y;shape=temp_shape;
return 0;
~cpp
void delete_block()
{
for (register int line=y; line<y+4; ++line)
for (register int i=0; i<10; ++i)
if (0==block[i][line])
i=10; //빈 블럭이 있으면, 그줄의 검사를 끝낸다.
else
if (9==i) //블럭이 다 차있을 경우에는 한줄을 삭제한다.
{
for (register int k=0; k<10; ++k)
block[k][line]=0;
for (k=line; k<19; ++k) //블럭을 한줄씩 내린다.
for (register int l=0; l<10; ++l)
block[l][k]=block[l][k+1];
for (k=0; k<10; ++k)
block[k][19]=0;
--line;
}
}