9-1-¶ó. Å°º¸µå ÀÔ·Âó¸®

°ÔÀÓÀ» ½ÃÀÛÇÒ ¶§´Â ¸Þ´ºÀÇ ½ÃÀÛ Ç׸ñ(ID_START)À» ¼±ÅÃÇÏ¸ç ¸Þ´º ¸í·ÉÀ» ó¸®ÇÏ´Â WM_COMMAND¿¡¼­ °ÔÀÓ ½ÃÀÛÀ» ó¸®ÇÏ°í ÀÖ´Ù. ¿ì¼± tet ¹è¿­À» ÃʱâÈ­ÇÏ°í Á¡¼ö, ¼Óµµ µî ¿©·¯°¡Ä¡ ÃʱâÈ­¸¦ Çϴµ¥ ±× Áß Å¸ÀÌ¸Ó ¼³Ä¡°¡ °¡Àå Áß¿äÇÑ ÃʱâÈ­ÀÌ´Ù. 0.5ÃÊ¿¡ Çѹø¾¿ ŸÀÌ¸Ó ¸Þ½ÃÁö°¡ ¹ß»ýÇϵµ·Ï ÇÏ¿© º®µ¹ÀÌ ÁÖ±âÀûÀ¸·Î °è¼Ó ¹ØÀ¸·Î ³»·Á°¡µµ·Ï ÇÏ¿´´Ù. WM_TIMER¿¡¼­´Â º®µ¹À» ÇÑÄ­ ¾Æ·¡·Î ³»¸®´Â downmove ÇÔ¼ö¸¦ È£ÃâÇÏ¸ç º®µ¹ÀÌ ¹Ù´Ú¿¡ ¾ÉÀº °æ¿ì »õ º®µ¹À» ¸¸µéµµ·Ï ÇÑ´Ù.

	case WM_TIMER:
		if (downmove()==0) makenewblock();
		return 0;

downmove ÇÔ¼ö´Â º®µ¹À» ÇÑÄ­ ¾Æ·¡·Î ³»¸®µÇ ¹Ù´Ú¿¡ ´êÀº °æ¿ì 0À» ¸®ÅÏÇϵµ·Ï µÇ¾î Àִµ¥ ¸¸¾à ¹Ù´Ú¿¡ ´ê¾Ò´Ù¸é makenewblock ÇÔ¼ö¸¦ È£ÃâÇÏ¿© »õ º®µ¹À» ¸¸µéµµ·Ï ÇÏ¿´´Ù. ±×·¡¼­ °ÔÀÓÀ» °¡¸¸È÷ ³»¹ö·Á µÎ¸é 0.5ÃÊ °£°ÝÀ¸·Î º®µ¹ÀÌ ³»·Á°¡°í ¹Ù´Ú¿¡ ´êÀ¸¸é ¶Ç º®µ¹ÀÌ »õ·Î »ý±â°Ô µÈ´Ù.

ÀÌÈÄÀÇ °ÔÀÓ ÁøÇàÀº »ç¿ëÀÚÀÇ Å°º¸µå ÀԷ¿¡ µû¶ó ´Þ¶óÁø´Ù. WM_KEYDOWN¿¡¼­ ÀÔ·ÂµÈ Å°¿¡ µû¶ó ÀûÀýÇÑ Ã³¸® ÇÔ¼ö¸¦ È£ÃâÇϴµ¥ ¸ÕÀú ¿ÞÂÊ Å°¸¦ ´­·¶À» ¶§ È£ÃâµÇ´Â leftmove ÇÔ¼ö¸¦ ºÐ¼®ÇØ º¸ÀÚ.

void leftmove()
{
	if (whataround(nowx-1,nowy)!=0)
		return;
	brick(0);
	nowx-=1;
	brick(1);
}

º®µ¹À» ÇÑÄ­ ¿ÞÂÊÀ¸·Î ¿Å±â´Â °úÁ¤Àº ¨çÇöÀç À§Ä¡ÀÇ º®µ¹À» Áö¿ò ¨èXÁÂÇ¥(nowx)¸¦ 1°¨¼Ò½ÃÅ´ ¨é »õ À§Ä¡¿¡ º®µ¹À» ´Ù½Ã Ãâ·ÂÇÔ ÀÇ ¼¼ °úÁ¤À¸·Î ÀÌ·ç¾îÁø´Ù. ¾ÆÁÖ °£´ÜÇÏ´Ù. ÇÏÁö¸¸ ¼Ò½º¿¡¼­ º¸´Ù½ÃÇÇ ÀÌ ¿Ü¿¡µµ ¹«¾ùÀΰ¡°¡ ´õ ÇÊ¿äÇÏ´Ù. ¹Ù·Î À̵¿Á¶°Ç °Ë»ç¶ó´Â °ÍÀε¥ ¸¸¾à ¹«Á¶°ÇÀûÀ¸·Î À̵¿ÇÑ´Ù¸é º®µ¹ÀÌ º®À» ¶Õ°í ÁÂÃøÀ¸·Î ³ª°¡ ¹ö¸®´Â ÈñÇÑÇÑ »óȲÀÌ ¹ú¾îÁú °ÍÀÌ´Ù. ±×·¡¼­ À̵¿Àü¿¡ º®¿¡ ºÙ¾î ÀÖ´ÂÁö, À̵¿ÀÌ °¡´ÉÇÑ »óÅÂÀÎÁö ´Ã Á¶»çÇØ º¸¾Æ¾ß ÇÑ´Ù.

whataround ÇÔ¼ö´Â º®µ¹ ÁÖº¯À» °Ë»çÇØ º®µ¹ ±Ùó¿¡ ¹«¾ùÀÌ ÀÖ´ÂÁö ÆǺ°ÇØ Áִµ¥ ºó°ø°£À̸é 0À», º®µ¹ÀÌ ÀÖÀ¸¸é 1À», º®°ú ºÎµúÄ£ »óÅÂÀ̸é 2¸¦ ¸®ÅÏÇØ ÁØ´Ù. ±×·¡¼­ À§ ÄÚµåÀÇ Á¶°Ç¹®Àº º®µ¹ ¿ÞÂÊÀÌ ºó°ø°£ÀÌ ¾Æ´Ï¸é ¸®ÅÏÇØ ¹ö·Á ¿ÞÂÊÀ¸·Î À̵¿À» ±ÝÁö½ÃŲ´Ù. Áï, ´ÙÀ½°ú °°Àº °æ¿ì´Â ¿ÞÂÊÀ¸·Î À̵¿½Ãų ¼ö ¾ø´Ù.

whataround ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù. brick ÇÔ¼ö¿Í À¯»çÇÑ ¸ð¾çÀ» ÇÏ°í Àִµ¥ ÇöÀç º®µ¹ ¸ð¾ç°ú ȸÀü¸ð¾ç¿¡ µû¶ó º®µ¹ÀÌ Â÷ÁöÇÏ°í ÀÖ´Â À§Ä¡ÀÇ tet¹è¿­°ªÀ» Á¶»çÇØ º¸°í Á¦ÀÏ Å« °ªÀ» ¸®ÅÏÇØ ÁÖµµ·Ï µÇ¾î ÀÖ´Ù.

int whataround(int x,int y)
{
	k=0;
	for (i=0;i<4;i++) {
		j=tet[x+pat[nowbrick][nowrot*8+i*2]]
			[y+pat[nowbrick][nowrot*8+i*2+1]];
		if (j>k) k=j;
	}
	return k;
}

±×·¡¼­ ÀüºÎ ºó °ø°£À̸é 0À», Çϳª¶óµµ º®¿¡ ºÎµúÄ¡¸é 2¸¦, º®µ¹³¢¸® ºÎµúÄ¡¸é 1À» ¸®ÅÏÇØ ÁØ´Ù. º®µ¹À» ¿À¸¥ÂÊÀ¸·Î À̵¿½ÃÅ°´Â rightmove ÇÔ¼öµµ leftmove¿Í °ÅÀÇ µ¿ÀÏÇÏ´Ù. leftmove°¡ nowx¸¦ 1°¨¼Ò½ÃÅ°´Âµ¥ ºñÇØ rightmove´Â 1 Áõ°¡½ÃÅ°´Â °Í°ú Á¶°ÇÁ¡°Ë¹®¿¡¼­ ¿ÞÂÊ ÀÚ¸®¸¦ º¸´Â °ÍÀÌ ¾Æ´Ï¶ó ¿À¸¥ÂÊ ÀÚ¸®¸¦ º¸´Â °Í¸¸ ´Ù¸£´Ù.

¹Ý¸é º®µ¹À» ȸÀü½ÃÅ°´Â rotate ÇÔ¼ö´Â Á¶±Ý º¹ÀâÇÏ´Ù. Á¿ì À̵¿Àº ¸ÕÀú Á¶°ÇÀ» °Ë»çÇÏ°í À̵¿ ¿©ºÎ¸¦ °áÁ¤ÁþÁö¸¸ rotate´Â ȸÀüÀ» ¸ÕÀú ½ÃÄѾ߸¸ Á¶°Ç °Ë»ç°¡ °¡´ÉÇÏ´Ù. ¿Ö³ÄÇϸé whataround ÇÔ¼ö°¡ À§Ä¡´Â Àμö·Î Àü´Þ¹Þ±â ¶§¹®¿¡ Á¿ì À̵¿ÀÇ °æ¿ì´Â À§Ä¡¸¦ À̵¿ÇÑ °ªÀ» ½ÇÀμö·Î ÁÖ¸é µÇÁö¸¸ ȸÀü ¸ð¾çÀº Á÷Á¢ nowrot Àü¿ª º¯¼ö¸¦ ÂüÁ¶Çϱ⠶§¹®ÀÌ´Ù.

rotate½ÃÅ°´Â °Íµµ °£´ÜÇÏÁö ¾Ê´Ù. ¿Ö³ÄÇϸé ȸÀü ¸ð¾çÀº ¹«Á¶°Ç Áõ°¡ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¸» ±×´ë·Î ȸÀüÇÏ´Â °ÍÀ̱⠶§¹®ÀÌ´Ù. 0¹ø ¸ð¾çÀ» ȸÀüÇϸé 1¹øÀÌ µÇ°í 2¹ø ¸ð¾çÀ» ȸÀüÇϸé 3¹ø ¸ð¾çÀÌ µÇÁö¸¸ 3¹ø ¸ð¾çÀ» ȸÀüÇϸé 4¹ø ¸ð¾çÀÌ µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ´Ù½Ã 0¹øÀÌ µÇ¾î¾ß ÇÑ´Ù. °Ô´Ù°¡ º®µ¹¿¡ µû¶ó¼­ ȸÀü ¸ð¾çÀÌ 2°³ÀÎ °Íµµ ÀÖ°í Çϳª¹Û¿¡ ¾ø´Â °Íµµ ÀÖ´Ù. ±×·¡¼­ brickpatnum ¹è¿­¿¡ °¢ º°µ¹ÀÇ È¸Àü ¸ð¾çÀÌ ¸î °³ ÀÖ´ÂÁö¸¦ ³Ö¾îµÎ°í ÃÖ´ë ȸÀü ¸ð¾çÀ» ³Ñ¾î¼¹À¸¸é ´Ù½Ã nowrot¸¦ 0À¸·Î ¸¸µé¾î ÁÖ¾î¾ß ÇÑ´Ù. ÀÌ·¸°Ô ÇÑ Ä­ ȸÀü½ÃŲ ÈÄ whataround¸¦ ºÒ·¯ ȸÀü½ÃŲ º®µ¹ÀÌ º®À̳ª ´Ù¸¥ º®µ¹¿¡ ºÎµúÃÆ´ÂÁö ¾Ë¾Æº»´Ù. ºÎµúÄ¡¸é ȸÀüÀÌ ºÒ°¡´ÉÇϹǷΠ¸®ÅÏÇØ ¹ö¸®°í ¾Æ´Ï¸é ȸÀü½ÃŲ´Ù. ȸÀüµµ À̵¿°ú ¸¶Âù°¡Áö·Î ¿ø·¡ ¸ð¾çÀ» Áö¿ì°í »õ ¸ð¾çÀ» Ãâ·ÂÇÑ´Ù.

º®µ¹À» ¾Æ·¡·Î ÇÑÄ­ À̵¿½ÃÅ°´Â downmove´Â À§ÀÇ ¼¼°¡Áö À̵¿°ú´Â ¸¹ÀÌ ´Ù¸£´Ù. ÇÑ Ä­ ¾Æ·¡·Î ³»¸®±â À§Çؼ­´Â yÁÂÇ¥¸¦ 1Áõ°¡½ÃÅ°¸é µÇÁö¸¸ ¾Æ·¡·ÎÀÇ À̵¿Àº Á» Ư¼öÇÑ »óȲÀÌ »ý±æ ¼öµµ ÀÖ´Ù.

ù°·Î ¾Æ·¡·Î À̵¿ÇÒ ¶§´Â Á¿ìÀÇ º®¿¡ ºÎµúÄ¡´Â ÀÏÀº Àý´ë·Î ¹ß»ýÇÏÁö ¾Ê´Â´Ù. º®Àº ¼öÁ÷ÀÌ°í º®µ¹Àº ¶È¹Ù·Î ÇÑÄ­ ³»·Á¿À±â ¶§¹®¿¡ º®¿¡´Â ºÎµúÄ¥ ÀÏÀÌ ¾ø´Ù. µÑ°·Î ¾Æ·¡¿¡ ½×¿© ÀÖ´Â º®µ¹À̳ª ¹Ù´Ú¿¡ ºÎµúÄ¡¸é º®µ¹ÀÌ Âø·úÀ» ÇÑ °ÍÀÌ´Ù. À̶§´Â º®µ¹ÀÌ ¾ÉÀº ÀÚ¸®ÀÇ ¹è¿­¿¡ º®µ¹ÀÌ »õ·Î »ý°åÀ½À» ±â·ÏÇØ¾ß ÇÏ°í ÇÑ ÁÙÀÌ ²ËáÀ¸¸é »èÁ¦ÇؾßÇÏ´Â ºÎÂ÷ÀûÀÎ ÀÛ¾÷°Å¸®°¡ »ý±ä´Ù.

±×·¡¼­ downmove ÇÔ¼ö´Â ÇÑÄ­ ¾Æ·¡ÂÊÀÌ ºó °ø°£ÀÌ ¾Æ´Ò °æ¿ì, Áï º®µ¹ÀÌ Âø·úÇßÀ¸¸é ÀÌ·¯ÇÑ ÀÏÀ» Àü´ãÇÏ´Â isfull ÇÔ¼ö¸¦ ºÎ¸¥´Ù. isfull ÇÔ¼ö´Â tet ¹è¿­¿¡ »õ º®µ¹ Á¤º¸¸¦ ±âÀÔÇÏ°í ÇÑÁÙÀÌ ²Ëá´ÂÁö °Ë»çÇØ º¸´Â º¹ÀâÇÑ ÀÏÀ» ÇÑ´Ù. downmove´Â ¶ÇÇÑ ¹Ù´Ú¿¡ ´ê¾ÒÀ» °æ¿ì 0À» ¸®ÅÏÇØ ÁÖ°í °ø°£»ó¿¡¼­ ´Ü¼øÈ÷ ÇÑÄ­ ³»·Á¿À±â¸¸ ÇßÀ» °æ¿ì´Â 1À» ¸®ÅÏÇØ ÁÖµµ·Ï µÇ¾î ÀÖ¾î ¯ Å°¸¦ ´­·¶À» ¶§ while(downmove());¶ó´Â ¸í·É Çϳª·Î ¹Ù´Ú¿¡ ´êÀ» ¶§±îÁö º®µ¹À» ³»¸± ¼ö ÀÖµµ·Ï ÇØÁØ´Ù.


¸ñ·Ï º¸±â  ´ÙÀ½ °­Á            written by http://www.winapi.co.kr