Ì䣱£± ¡¡¼¡¤Î C ¥×¥í¥°¥é¥à¤ÎÀâÌÀµÚ¤Ó¥×¥í¥°¥é¥à¤òÆÉ¤ó¤Ç¡¤ÀßÌä 1 ¡Á 4 ¤ËÅú¤¨¤è¡£
¡Ì¥×¥í¥°¥é¥à¤ÎÀâÌÀ¡Í
²èÌ̾å¤Ëɽ¼¨¤µ¤ì¤¿¥â¥°¥é¤ËÂФ·¤Æ¡¤¥Þ¥¦¥¹¤Ç¥Ý¥¤¥ó¥¿¤ò°Üư¤·¡¤¥¯¥ê¥Ã¥¯¤·¤ÆÆÀÅÀ¤ò ¶¥¤¦¥×¥í¥°¥é¥à¤Ç¤¢¤ë¡£
²èÌ̾å¤Ë¤Ï¡¤½Ä²£ 16 ¸Ä¤º¤Ä¤ÎÀµÊý·Á¤Î ¡¡ÌܤËʬ³ä¤µ¤ì¤¿¥¦¥£¥ó¥É¥¦¤¬¤¢¤ë¡£ ¾£ÌܤνĵڤӲ£¤Î²èÁÇ¿ô¤Ï 24 ¤Ç¤¢¤ê¡¤¥¦¥£¥ó¥É¥¦¤Ï½Ä 384¡ß²£ 384 ¤Î²èÁÇ¤Ç ¹½À®¤µ¤ì¤Æ¤¤¤ë¡Ê¿Þ 1 ¡Ë¡£ ²èÁǤκÂɸÃͤϡ¤¥¦¥£¥ó¥É¥¦¤Îº¸¾å¶ù¤ò´ðÅÀ (0, 0) ¤È¤·¤¿²£ºÂɸµÚ¤Ó½ÄºÂɸ¤ÎÁȹ礻¤Ç¤¢¤ë¡£
Íð¿ô¤òÍѤ¤¤ÆÁªÂò¤·¤¿¾£Ìܤˡ¤1 ɤ¤Î¥â¥°¥é¤Î³¨¡Ê¿Þ 2 ¡Ë¤òɽ¼¨¤¹¤ë¡£ ¥â¥°¥é¤Î³¨¤Ï¥×¥í¥°¥é¥àÆâ¤ÇÀë¸À¤µ¤ì¤¿²ó¿ô¤Î·«ÊÖ¤·½èÍý¤Î´Ö¤À¤±É½¼¨¤µ¤ì¤Æ¤ª¤ê¡¤ ·«ÊÖ¤·½èÍý¤Î½ªÎ»¤ÈƱ»þ¤Ë²èÌ̤«¤é¾Ã¤¨¤ë¡£
¥â¥°¥é¤¬²èÌ̤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤ë´Ö¤Ë¡¤¾£ÌÜÆâ¤ò¥¯¥ê¥Ã¥¯¤Ç¤¤ì¤Ð¡¤¾£Ìܤ㨤¬ ¿Þ 3 ¤ËÊѤï¤ê¡¤ÆÀÅÀ¤¬ÆÀ¤é¤ì¤ë¡£
¥¯¥ê¥Ã¥¯¸¡½ÐµÚ¤Ó¥¯¥ê¥Ã¥¯¤µ¤ì¤¿²èÁǤκÂɸ¤Ï¡¤´Ø¿ô sense ¤ò»ÈÍѤ·¤Æ³ÍÆÀ¤¹¤ë¡£
¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¡¤¼¡¤Î»°¤Ä¤Î´Ø¿ô¤òÍøÍѤ·¤Æ¤¤¤ë¡£
¡´Ø¿ô rand16
¢´Ø¿ô mogura
°ú¿ô p1 ¤¬¡Èopen¡É¤Î¾ì¹ç ¡§ p2 µÚ¤Ó p3 ¤Ç»ØÄꤵ¤ì¤¿¾£ÌÜ¤Ë¿Þ 2 ¤òɽ¼¨¤¹¤ë¡£
°ú¿ô p1 ¤¬¡Èhit¡É¤Î¾ì¹ç ¡§ p2 µÚ¤Ó p3 ¤Ç»ØÄꤵ¤ì¤¿¾£ÌÜ¤Ë¿Þ 3 ¤òɽ¼¨¤¹¤ë¡£
°ú¿ô p1 ¤¬¡Èclose¡É¤Î¾ì¹ç¡§ p2 µÚ¤Ó p3 ¤Ç»ØÄꤵ¤ì¤¿¾£Ìܤοޤò¾Ãµî¤¹¤ë¡£
p1¡§ ½èÍý¥â¡¼¥É¡Ê¡Èopen¡É¡¤¡Èhit¡É¡¤¡Èclose¡É¤Î 3 ¼ïÎà¡Ë
p2¡§ ¾£ÌܤÎÎóÈÖ¹æ¡Ê0 ¡Á 15¡Ë
p3¡§ ¾£ÌܤιÔÈÖ¹æ¡Ê0 ¡Á 15¡Ë
¡¡¡´Ø¿ô sense
p1¡§ ¥¯¥ê¥Ã¥¯¤µ¤ì¤¿²èÁǤβ£ºÂɸ¤Ø¤Î¥Ý¥¤¥ó¥¿
¥Þ¥¦¥¹¤Î¥¯¥ê¥Ã¥¯¤¢¤ê¤Î¾ì¹ç¤Ë¤À¤±¡¤p1 ¤¬»Ø¤¹¥¢¥É¥ì¥¹¤ËºÂɸÃͤ¬ÀßÄꤵ¤ì¤ë¡£
p2¡§ ¥¯¥ê¥Ã¥¯¤µ¤ì¤¿²èÁǤνĺÂɸ¤Ø¤Î¥Ý¥¤¥ó¥¿
¥Þ¥¦¥¹¤Î¥¯¥ê¥Ã¥¯¤¢¤ê¤Î¾ì¹ç¤Ë¤À¤±¡¤p2 ¤¬»Ø¤¹¥¢¥É¥ì¥¹¤ËºÂɸÃͤ¬ÀßÄꤵ¤ì¤ë¡£
¡Ì¥×¥í¥°¥é¥à¡Í
¡Ê¹ÔÈÖ¹æ¡Ë
01 #include <stdio.h> 02 #define ON 1 03 #define OFF 0 04 #define HIT 1 05 #define CMAX 16 06 #define BLKSZ 24 07 #define MGNCNT 200 08 #define DSPCNT 250 09 #define STOP 3000 10 typedef struct { int flg; int st; } mbox; 11 int rand16(void); 12 int sense( int*, int* ); 13 void mogura( char*, int, int ); 14 main(void) { 15 int mflg=OFF, hitpt=0; 16 int hitck[BLKSZ][BLKSZ], gcnt, gx, gy, ix, iy; 17 mbox mg[CMAX][CMAX]; 18 for ( ix=0; ix<CMAX; ix++ ) 19 for ( iy=0; iy<CMAX; iy++ ) { 20 mg[ix][iy].flg = OFF; 21 mg[ix][iy].st = 0; 22 } 23 for ( ix=0; ix<BLKSZ; ix++ ) 24 for ( iy=0; iy<BLKSZ; iy++ ) hitck[ix][iy] = HIT; 25 for ( gcnt=0; gcnt<STOP; gcnt++ ) { 26 if ( gcnt % MGNCNT == 0 ) { 27 ix = rand16(); 28 iy = rand16(); 29 if ( mg[ix][iy].flg == OFF ) { 30 mg[ix][iy].flg = ON; 31 mg[ix][iy].st = gcnt; 32 mogura( "open", ix, iy ); 33 } 34 } 35 mflg = sense( &gx, &gy ); 36 if ( mflg == ON ) { 37 if ( mg[gx/BLKSZ][gy/BLKSZ].flg == ON && 38 hitck[gx%BLKSZ][gy%BLKSZ] == HIT ) { 39 hitpt += 10; 40 mogura( "hit", gx/BLKSZ, gy/BLKSZ ); 41 mg[gx/BLKSZ][gy/BLKSZ].flg = OFF; 42 mg[gx/BLKSZ][gy/BLKSZ].st = 0; 43 } 44 else hitpt--; 45 } 46 for ( ix=0; ix<CMAX; ix++ ) { 47 for ( iy=0; iy<CMAX; iy++ ) 48 if ( mg[ix][iy].flg == ON ) { 49 if ( (gcnt-mg[ix][iy].st)>DSPCNT ) { 50 mg[ix][iy].flg = OFF; 51 mg[ix][iy].st = 0; 52 mogura( "close", ix, iy ); 53 } 54 } 55 } 56 } 57 printf( "¥²¡¼¥à½ªÎ»\n¤¢¤Ê¤¿¤ÎÆÀÅÀ¤Ï%d¤Ç¤¹\n", hitpt ); 58 }
²òÅú·²
¥¢ 12¡¡¡¡¡¡¥¤ 15¡¡¡¡¡¡¥¦ 16¡¡¡¡¡¡¥¨ 20
¥ª 24¡¡¡¡¡¡¥« 25¡¡¡¡¡¡¥ 32
¥¢¡¡¹ÔÈÖ¹æ 7 ¤Î MGNCNT ¤ò 400 ¤Ë¤¹¤ë¤ÈÆÀÅÀ¤¬ÆÀ¤ä¤¹¤¯¤Ê¤ë¡£
¥¤¡¡¹ÔÈÖ¹æ 8 ¤Î DSPCNT ¤ò 400 ¤Ë¤¹¤ë¤ÈÆÀÅÀ¤¬ÆÀ¤ä¤¹¤¯¤Ê¤ë¡£
¥¦¡¡¿Þ 2 ¤Î¥â¥°¥é¤Îɽ¼¨²ó¿ô¤ÎÁý¸º¤Ë¤è¤Ã¤Æ¡¤¿Þ 2 ¤¬É½¼¨¤µ¤ì¤Æ¤«¤é¾Ã¤¨¤ë¤Þ¤Ç¤Î»þ´Ö¤¬ÊѲ½¤¹¤ë¡£
¥¨¡¡¥â¥°¥é¤¬É½¼¨¤µ¤ì¤¿¾õÂÖ¤Ç¥×¥í¥°¥é¥à¤¬½ªÎ»¤¹¤ë¤³¤È¤¬¤¢¤ë¡£
¥ª¡¡¥â¥°¥é¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¤³¤í¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤ÈÆÀÅÀ¤Ë±Æ¶Á¤¬¤¢¤ë¡£
printf ( "¥²¡¼¥à½ªÎ»\n ¤¢¤Ê¤¿¤ÎÆÀÅÀ¤Ï%d¡¤¸«Æ¨¤·¤Ï%d ɤ¤Ç¤¹\n", hitpt, scnt );
´Ø¿ô main ¤Ø¤ÎÊѹ¹¤È¤·¤ÆÅ¬Àڤʤâ¤Î¤ò¡¤²òÅú·²¤ÎÃæ¤«¤éÁª¤Ù¡£
¥¢¡¡¹ÔÈÖ¹æ 33 ¤Îľ¸å¤Ë else scnt++; ¤òÄɲ乤롣
¥¤¡¡¹ÔÈÖ¹æ 34 ¤Îľ¸å¤Ë else scnt++; ¤òÄɲ乤롣
¥¦¡¡¹ÔÈÖ¹æ 44 ¤ò else { hitpt--; scnt++; } ¤ËÃÖ¤´¹¤¨¤ë¡£
¥¨¡¡¹ÔÈÖ¹æ 45 ¤Îľ¸å¤Ë else scnt++; ¤òÄɲ乤롣
¥ª¡¡¹ÔÈÖ¹æ 52 ¤Îľ¸å¤Ë scnt++; ¤òÄɲ乤롣
#define TSZ BLKSZ/3 for ( ix=0; ix<TSZ; ix++ ) { for ( iy=0; iy<TSZ-ix; iy++ ) { hitck[ix ][iy ] = OFF; hitck[ix ][BLKSZ-iy-1] = OFF; hitck[BLKSZ-ix-1][iy ] = OFF; hitck[BLKSZ-ix-1][BLKSZ-iy-1] = OFF; } }