ºÇ½ª¹¹¿·¡§ orika_ex_miyako 2023ǯ05·î03Æü(¿å) 08:48:08ÍúÎò
¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¡¢¥¯¥é¥¹¤ËÂФ·¤ÆÆÃÄê¤Î¥á¥½¥Ã¥É¤ä¥×¥í¥Ñ¥Æ¥£¤ò¼ÂÁõ¤¹¤ë¤³¤È¤òÍ׵᤹¤ë¤³¤È¤¬¤Ç¤¤ë¤â¤Î¤Ç¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢Ê£¿ô¤Î¥¯¥é¥¹¤ÇƱ¤¸Æ°ºî¤ò¤¹¤ë¤³¤È¤ò¶¯À©¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
»²¹Í¥µ¥¤¥È
++C++; // ̤³ÎǧÈô¹Ô C ÍÍ
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹
¡¡¼ÂÁõ¤ÎÊýË¡¤Ï¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄêµÁ¤¹¤ë¤¿¤á¤Î¡Öinterface¡×¥¡¼¥ï¡¼¥É¤ò»ÈÍѤ·¤Þ¤¹¡£Î㤨¤Ð¡¢¼¡¤Î¤è¤¦¤Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄêµÁ¤Ç¤¤Þ¤¹¡£
¡¡¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¥¯¥é¥¹¤Ï¡¢¡ÖIMoveable¡×¤ò¼ÂÁõ¤·¤Æ¡¢¡ÖMove¡×¥á¥½¥Ã¥É¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬É¬Íפˤʤê¤Þ¤¹¡£
¡¡¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÇÄêµÁ¤·¤¿¥á¥½¥Ã¥É¤Ï¡¢ÌÀµ¤·¤Ê¤¯¤Æ¤â public °·¤¤¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎÍøÅÀ¤È¤·¤Æ¤Ï¡¢¼¡¤Î¤è¤¦¤Ê¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
¡¡¡¦Ê£¿ô¤Î¥¯¥é¥¹¤ÇƱ¤¸Æ°ºî¤ò¶¯À©¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¡¡¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò·Ñ¾µ¤·¤¿¥¯¥é¥¹¤ËÂФ·¤ÆƱ¤¸¤è¤¦¤ËÁàºî¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¡¡¡¦¥³¡¼¥É¤ÎÊݼéÀ¤ò¹â¤á¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¡¡¡¦²¾Áۥ᥽¥Ã¥É¤è¤ê¤â·ÚÎ̤Ǥ¢¤ë¡£
¡¡¤³¤ì¤é¤ÎÍøÅÀ¤Ë¤è¤ê¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÍøÍѤ·¤¿À߷פò¹Ô¤¦¤³¤È¤Ç¤è¤ê¥¹¥Þ¡¼¥È¤Ê¥³¡¼¥É¤ò½ñ¤¯¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÍøÍѤ·¤¿¥¹¥Æ¡¼¥È¥Ñ¥¿¡¼¥ó¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¾õÂ֤˱þ¤¸¤Æ½èÍý¤òÀÚ¤êÂؤ¨¤ë¤¿¤á¤ÎÀ߷פǤ¹¡£¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤Î£±¤Ä¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¥¹¥Æ¡¼¥È¥Ñ¥¿¡¼¥ó¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¾õÂÖ¤ò¥¹¥Æ¡¼¥È¤È¤·¤Æµ½Ò(´ÉÍý)¤·¡¢³Æ¥¹¥Æ¡¼¥È¤ÇÆȼ«¤Î¥í¥¸¥Ã¥¯¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥³¡¼¥É¤ÎÊ£»¨À¤ò¸º¤é¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¾õÂÖÊѲ½¤ËÂФ·¤Æ¼«Á³¤ËÂбþ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤Þ¤¿¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢³Æ¥¹¥Æ¡¼¥È¤Î¥¯¥é¥¹¤¬¸ß¤¤¤ËÆÈΩ¤·¤Æ¤¤¤ë¤¿¤á¡¢ºÆÍøÍÑÀ¤¬¹â¤¯¤Ê¤ê¤Þ¤¹¡£
¡¡¤è¤Ã¤Æ¡¢¤³¤Î¥¹¥Æ¡¼¥È¥Ñ¥¿¡¼¥ó¤Ï¡¢¥²¡¼¥à³«È¯¤Ë¤ª¤¤¤Æ¤ÏŨ¥¥ã¥é¥¯¥¿¡¼¤ä¥×¥ì¥¤¥ä¡¼¥¥ã¥é¥¯¥¿¡¼¤Ê¤É¤ÎµóÆ°¤òÀ©¸æ¤¹¤ëºÝ¤Ê¤É¤ËÌòΩ¤Á¤Þ¤¹¡£
¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÍøÍѤ·¤¿¼ÂÁõÎã¤ò¼¨¤¹¤È¡¢°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¼¡¤Ë¡¢³Æ¥¹¥Æ¡¼¥È¤òɽ¤¹¥¯¥é¥¹¤ò¼ÂÁõ¤·¤Þ¤¹¡£
¥¹¥Æ¡¼¥È¤´¤È¤Î¤Ë£±¤Ä¤Î¥¯¥é¥¹¤òÄêµÁ¤¹¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
¡¡º£²ó¤Ï£²¤Ä¤Î¥¯¥é¥¹¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¤É¤Á¤é¤Î¥¯¥é¥¹¤Ë¤â ICommand ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤¬¼ÂÁõ¤µ¤ì¡¢¥¯¥é¥¹Æâ¤Ë Enter ¥á¥½¥Ã¥É¡¢Execute ¥á¥½¥Ã¥É¡¢¤½¤·¤Æ Exit ¥á¥½¥Ã¥É¤Î¼ÂÁõ¤¬¶¯À©¤µ¤ì¤Æ¤¤¤ë¤³¤È¤¬Ê¬¤«¤ê¤Þ¤¹¡£
¤½¤·¤Æ¡¢¤½¤ì¤¾¤ì¤Î¥á¥½¥Ã¥É¤Î¼ÂÁõ(Ãæ¿È)¤¬°Û¤Ê¤ë¤¿¤á¡¢Æ±Ì¾¤Î¥á¥½¥Ã¥É¤Ç¤Ï¤¢¤ë¤â¤Î¤Î½èÍý¤ÎÆâÍƤ¬ÊѤï¤Ã¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤Î¤è¤¦¤Ë¤·¤Æ¡¢³Æ¥á¥½¥Ã¥É¤Î¼ÂÁõ¤ò³Æ¥¯¥é¥¹¤Ë¤è¤Ã¤Æ¹Ô¤¦¤³¤È¤Ç¡¢½èÍý¤òÃê¾Ý²½¤·¡¢¥á¥½¥Ã¥É¤Î¿¶¤ëÉñ¤¤¤òÊѤ¨¤ë¤³¤È¤Ç½èÍý¤òÊѤ¨¤ë¤³¤È¤¬½ÐÍè¤Æ¤¤¤Þ¤¹¡Ê¿ÂÖÀ¤¬¤¢¤ê¤Þ¤¹¡Ë¡£
¡¡ºÇ¸å¤Ë¡¢Ì¿Îá¤ò´ÉÍý¤¹¤ë¥¯¥é¥¹¤òºîÀ®¤·¤Þ¤¹¡£
¡¡ChangeState ¥á¥½¥Ã¥É¤òÍøÍѤ·¡¢IState ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ò currentState ¤ËÅÐÏ¿¤·¤Æ¤¤¤Þ¤¹¡£
¥Ý¥¤¥ó¥È¤È¤·¤Æ¤Ï¡¢currentState ÊÑ¿ô¤Ï IState ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤¢¤ë¤¿¤á¡¢¥¯¥é¥¹¤Ë´Ø¤ï¤é¤º¡¢IState ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ì¤ÐÂåÆþ¤Ç¤¤ëÅÀ¤Ç¤¹¡£
¤½¤Î¤¿¤á¡¢MoveState ¥¯¥é¥¹¡¢JumpState ¥¯¥é¥¹¤Î¤É¤Á¤é¤Ç¤¢¤Ã¤Æ¤â currentState ÊÑ¿ô¤ËÂåÆþ¤Ç¤¤Þ¤¹¡£
¤³¤Î½èÍý¤ò¹Ô¤¦¤³¤È¤Ë¤è¤ê¡¢StateMachine ¥¯¥é¥¹¤Ï¸½ºß¤Î¥¹¥Æ¡¼¥È¤¬¤É¤Î¥¹¥Æ¡¼¥È¤Ç¤¢¤ë¤«¤ò´ÉÍý¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡¡¤µ¤é¤Ë ChangeState ¥á¥½¥Ã¥É¤Ç¤Ï¡¢Á°¤Î¥¹¥Æ¡¼¥È¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ë¤Ï Exit ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¥¹¥Æ¡¼¥È¤Î½ªÎ»½èÍý¤ò¹Ô¤Ã¤¿¾å¤Ç¡¢
¿·¤·¤¤¥¹¥Æ¡¼¥È¤Ø¤ÎÀÚ¤êÂؤ¨½èÍý¤ò¹Ô¤Ã¤Æ¤«¤é¡¢Enter ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¥¹¥Æ¡¼¥È¤Î³«»Ï½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡Update ¥á¥½¥Ã¥É¤Ç¤Ï currentState ÊÑ¿ô¤¬Â¸ºß¤¹¤ë¤«³Îǧ¤·¡¢(¸½ºß¤Î¥¹¥Æ¡¼¥È¤ò³Îǧ)
currentState ÊÑ¿ô¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤ë IState ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¥¯¥é¥¹¤Î Execute ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Þ¤¹¡£
¡¡Execute ¥á¥½¥Ã¥É¤Ï MoveState ¥¯¥é¥¹¤È JumpState ¥¯¥é¥¹¤Ç¤Ï¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤¬°Û¤Ê¤ë¤¿¤á¡¢Æ±¤¸¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¤¤¤Þ¤¹¤¬¡¢½èÍý¤Î¿¶¤ëÉñ¤¤¤¬ÊѤï¤ê¤Þ¤¹¡£
¡¡Ì¿Îá¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Ë¤Ï¡¢¡ÖStateMachine¡×¥¯¥é¥¹¤Ë¤¢¤ë currentState ÊÑ¿ô¤Ë
¡ÖIState ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¡×¤ò¼ÂÁõ¤·¤¿¡ÖMoveState¡×¤ä¡ÖJumpState¡×¤Ê¤É¤òÂåÆþ¤¹¤ë¤³¤È¤Ç¡¢¸½ºß¤Î¥¹¥Æ¡¼¥È¤òÃ༡ÀÚ¤êÂؤ¨¤ÆÍøÍѤ·¤Æ¤¤¤¤Þ¤¹¡£
¡¡¡ÖStateMachine¡×¥¯¥é¥¹¤«¤é¡ÖMoveState¡×¤òÌ¿Îá¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤Î¥µ¥ó¥×¥ë¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤³¤Î¥µ¥ó¥×¥ë¤Ç¤Ï¡¢¡ÖStart¡×¥á¥½¥Ã¥ÉÆâ¤Ç¤Ï¡ÖStateMachine¡×¤Ë¡ÖMoveState¡×¤òÄɲä·¡¢Enter ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¤¤¤Þ¤¹¡£
¤½¤Î¸å¡¢¡ÖUpdate¡×¥á¥½¥Ã¥ÉÆâ¤Ç¥¹¥Æ¡¼¥È¤Î¹¹¿·´ÉÍý¤ò¹Ô¤¤¡¢¡ÖstateMachine¡×¤Î¡ÖUpdate¡×¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢¸½ºß¤Î¥¹¥Æ¡¼¥È¤Î¡ÖExecute¡×¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¤¤¤Þ¤¹¡£
¡¡Àè¤Û¤ÉÄ󼨤·¤¿¼ÂÁõÎã¤Î¾ì¹ç¡¢¥¹¥Æ¡¼¥È¤ÎÁ«°Ü¤Ë¤¢¤¿¤Ã¤Æ¤Ï¡¢¥¹¥Æ¡¼¥È¤ò¤½¤ÎÅÔÅÙ¥¤¥ó¥¹¥¿¥ó¥¹¤·¤ÆÍøÍѤ·¤Æ¤¤¤Þ¤·¤¿¡£
¡¡¤³¤Á¤é¤Î¥±¡¼¥¹¤Ç¤Ï¡¢¥²¡¼¥àÆâ¤ÇÍøÍѤ¹¤ë¥¹¥Æ¡¼¥È¤ò»öÁ°¤Ë¥¥ã¥Ã¥·¥å(ºÇ½é¤Ë¥¤¥ó¥¹¥¿¥ó¥¹¤·¤ÆÊÑ¿ô¤ËÂåÆþ)¤·¤Æ¤ª¤¯¤³¤È¤Ç
¥¤¥ó¥¹¥¿¥ó¥¹¤ÎÀ¸À®¤Ï³Æ¥¹¥Æ¡¼¥È£±²ó¤À¤±¤Ë¤·¡¢¥¹¥Æ¡¼¥È¤ÎÂåÆþ¤µ¤ì¤Æ¤¤¤ëÊÑ¿ô¤òÍøÍѤ·¤Æ½èÍý¤ò±¿ÍѤ·¤Æ¤¤¤¯¾ì¹ç¤Î¼ÂÁõÎã¤Ç¤¹¡£
¡¡¿·¤·¤¯ StateID ¤òºîÀ®¤·¡¢Â¾¤Î¥¯¥é¥¹¤ÏÄêµÁÆâÍƤòÄɲᦽ¤Àµ¤·¤Æ¤¤¤Þ¤¹¡£
¡¡Àè¤Û¤ÉºîÀ®¤·¤¿ MoveState ¥¯¥é¥¹¤È JumpState ¥¯¥é¥¹¤Ë StateID ¤òÄɲä·¤Þ¤¹¡£
¤³¤³¤Ë³Æ¥¹¥Æ¡¼¥È¤Î¾õÂÖ¤òÅÐÏ¿¤·¡¢StateMachine ¥¯¥é¥¹¤Ç¼±Ê̤Ǥ¤ë¾õÂ֤ˤ·¤Þ¤¹¡£
¡¡¤½¤Î¾¤ÎÊѹ¹ÅÀ¤Ï¤¢¤ê¤Þ¤»¤ó¡£
¡¡¼¡¤Ë¡¢StateMachine ¥¯¥é¥¹¤Ë¥¹¥Æ¡¼¥È¤Î¥¥ã¥Ã¥·¥å¤¬¤Ç¤¤ë¤è¤¦¤Ë Dictionary<string, IState> ¤òÄɲä·¤Þ¤¹¡£
¤³¤Á¤é¤Ë¥¹¥Æ¡¼¥È¤òÅÐÏ¿¤¹¤ë¤¿¤á¤Î RegisterState ¥á¥½¥Ã¥É¤òÄɲä·¤Þ¤¹¡£
¤Þ¤¿ ChangeState ¥á¥½¥Ã¥É¤òºï½ü¤·¡¢Âå¤ï¤ê¤Ë¥¹¥Æ¡¼¥ÈID¤ò»ØÄꤷ¤ÆÁ«°Ü¤¹¤ë ChangeStateByID ¥á¥½¥Ã¥É¤òÄɲä·¤Þ¤¹¡£
Update ¥á¥½¥Ã¥É¤Ë¤ÏÊѹ¹¤¢¤ê¤Þ¤»¤ó¡£
¡¡½àÈ÷¤¬À°¤Ã¤¿¤Î¤Ç¡¢Example ¥¯¥é¥¹¤ò½¤Àµ¤·¤Æ±¿ÍѤ·¤Æ¤¤¤¯Îã¤òÄ󼨤·¤Þ¤¹¡£
¡¡Start ¥á¥½¥Ã¥É¤ò½¤Àµ¤·¡¢StateMachine ¥¯¥é¥¹¤Î RegisterState ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ³Æ¥¹¥Æ¡¼¥È¤ò»öÁ°¤ËÅÐÏ¿¤·¤Æ¤ª¤¤Þ¤¹¡£
¤½¤Î¸å¡¢¥²¡¼¥à³«»Ï»þ¤Î¥¹¥Æ¡¼¥È¤ò ChangeStateByID ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤ÆÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤ÎÀ߷פǤϡ¢¥¹¥Æ¡¼¥È¤¬ StateMachine ¤Î Dictionary ¤Ë¥¥ã¥Ã¥·¥å¤µ¤ì¤Æ±¿ÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£
enum ¤ò»ÈÍѤ·¤Æ³Æ¥¹¥Æ¡¼¥È¤ò ¥¹¥Æ¡¼¥ÈID ¤Ç¼±Ê̤Ǥ¤ë¤è¤¦¤Ë´ÉÍý¤·¤Æ¤¤¤ë¤¿¤á¡¢¥¹¥Æ¡¼¥ÈÁ«°Ü¤Î½èÍý¤âÆɤߤ䤹¤¯¡¢°ÂÁ´¤Ë¹Ô¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡¤³¤Á¤é¤ÎÊýË¡¤Ç¼ÂÁõ¤ò¹Ô¤¦¤³¤È¤Ç¡¢ºÇ½é¤ËÄ󼨤·¤¿¡¢¤½¤ÎÅÔÅÙ¥¹¥Æ¡¼¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òºîÀ®¤·¤ÆÍøÍѤ¹¤ëÀ߷פè¤ê¤â¸úΨ²½¤¬¿Þ¤ì¤Þ¤¹¡£
¡¡°Ê¾å¤Ë¤Ê¤ê¤Þ¤¹¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯