면 블럭 력기 ¶
기 ¶
보다 게 기 두 가 다.
리를 떠려보고, 떤 과 만들 각보.
리를 떠려보고, 떤 과 만들 각보.
~cpp 1.력 블럭 모 결다. 2.랜덤로 블럭 next 력다. 3.next 력된 블럭 가뒤 메 력다. 4.블럭 다. 5.블럭 다. 6. 다 때, 블럭 다. 7. 를 변다.
를 따라 면 리를 만들 다.
만, 막는 부 기게 되면 래를 길 바란다.
만, 막는 부 기게 되면 래를 길 바란다.
력 블럭 모 기 ¶
모 는 방법는 러가가 다.
n 고, n만 블럭 는 로,
를 들 T는(0,3)(1,1)(1,1)렇게 다. 방 따라, 가로가 닌 로부 나 바꿔 다.
그리고 다른 방법로는 그냥 게 블럭 기만 배 는곳는 를 고 닌곳는 0 는 방 다.
n 고, n만 블럭 는 로,
를 들 T는(0,3)(1,1)(1,1)렇게 다. 방 따라, 가로가 닌 로부 나 바꿔 다.
그리고 다른 방법로는 그냥 게 블럭 기만 배 는곳는 를 고 닌곳는 0 는 방 다.
) 모 배로 는 방법. 가 길므로, 더 기를 권다.
~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}} },
랜덤로 블럭 next 력기 ¶
랜덤게 블럭 기 start() srand((int)time(NULL));라고 , 랜덤게 나게 다,
블럭 랜덤게 는 를 만들. 그리고 그 rand()를 , 를 그 맞 블럭 고
next변 력되게 면 된다.
그리고 력될 변를 기게 기 다 나 블럭 기는 변를 만들고, 기 값 .
를 는 key_Right() 같 변 고, 당는 를 러보면 된다.
블럭 랜덤게 는 를 만들. 그리고 그 rand()를 , 를 그 맞 블럭 고
next변 력되게 면 된다.
그리고 력될 변를 기게 기 다 나 블럭 기는 변를 만들고, 기 값 .
를 는 key_Right() 같 변 고, 당는 를 러보면 된다.

)
~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; //변 .
된 블럭 메 기 ¶
블럭 메 보. 메 맨 가데 가 당 것다.
또 되는 , 그 블럭 다면, 게 료될 것다.
된 , 된 x,y값 기는 변를 만들고 면 된다.
그리고, 블럭 디를 기 변 만들 .
는 고리 next 러는것과 같 고리 다.
를 는 key_Left() 같 변 고, 랜덤로 만드는 를 , 보면 된다.
)또 되는 , 그 블럭 다면, 게 료될 것다.
된 , 된 x,y값 기는 변를 만들고 면 된다.
그리고, 블럭 디를 기 변 만들 .
는 고리 next 러는것과 같 고리 다.
를 는 key_Left() 같 변 고, 랜덤로 만드는 를 , 보면 된다.
~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
된 블럭 게 기 ¶
된 블럭 게 보. 게 는데는 러가 고리 만, 방법 블럭 내려가면 깔 바꾸고, 깔 는 블럭만 게 는 방법 다. 두는, 블럭 끝 그 부 닿게되면 게 는 방법 다. 가 더 복나, 더 다 볼 다. 때는, 벽과 다른 블럭 고려 다.
다 만들 , , 른 방 맞 를 를 고, now_time() 블럭 래로 내리는 를 록 .
다 만들 , , 른 방 맞 를 를 고, now_time() 블럭 래로 내리는 를 록 .

) 두 방법 모 나. -1 0 래, 1 른로 다는 뜻로 를 겨는다.
리링 많 모다.
~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;
블럭 기 ¶
블럭 내려게 되, 되면 되 다. 또, 된 그 부는 래로 내려 다.
반로 for문 검 나, 같 내려 블럭 같로 리되는 경는, 더 가 는를 볼 다.
)반로 for문 검 나, 같 내려 블럭 같로 리되는 경는, 더 가 는를 볼 다.
~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; } }
변 ¶
는 블럭 내려때, 될때 로 가되는 경를 고, 그 경다 맞 값 가 면된다.
그리고 그 결과 가 달면 를 바꾸고, time_delay 변 값 감 난를 가면 된다.
그리고 그 결과 가 달면 를 바꾸고, time_delay 변 값 감 난를 가면 된다.