U E D R , A S I H C RSS

데블스캠프2005/게임만들기/제작과정예제

데블2005/게만들기/


블럭


블럭 .
start()보면, 다 는color라는 가 보다.
가르는데로, 1~10까 다.
그밑는 block변가 블럭게 된다.
~cpp 
block[0][0]=1;
라고 . 결과가 나다.

test01.jpg

~cpp 
block[x][y]=블럭 류;
블럭 며, 0 블럭 는 것고 그 블록가게 된다.
block_next변는, 메 next 블럭 며 가로3로4 기를 다.
다.
~cpp 
block_next[x][y]=블럭 류;


보다 다.
를 떠려보고, 떤 과 만들 .


~cpp 
1. 블럭다.
2.랜덤로 블럭   next 다.
3.next 력된 블럭뒤 메 다.
4.블럭 다.
5.블럭 다.
6.때, 블럭 다.
7. 를 변다.

를 따라 를 만들 다.
만, 막는 부 기게 되면 래를 길 바란다.


블럭


는 방법러가다.
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() 고, 러보면 된다.

test02.jpg

)
~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() 고, 랜덤로 만드는 , 보면 된다.

)
~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

test03.jpg


된 블럭


된 블럭 . 는데는 러가 고리 만, 방법 블럭 내려가면 바꾸고, 는 블럭만 는 방법 다. 두는, 블럭 그 부 닿게되면 는 방법 다. 더 복나, 더 다 다. 는, 벽과 다른 블럭 고려 다.

다 만들 , , 고, now_time() 블럭 래로 내리는 .

test04.jpg


) 두 방법 나. -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문 나, 같 내려 블럭리되는 경는, 더 를 볼 다.

)
~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 변면 된다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:59
Processing time 0.0226 sec