ãã©ã³ã·ã¹ã»ããŒã³ã³ã
...å€ãã®ç¥æµã§å€ãã®æ²ãã¿ããããŸãã
ãããŠç¥èãå¢ããã°ãæ²ãã¿ãå¢ããŸãã
äŒéã®æžã
ã²ãŒã ã¯èªåã®äººçãçããŸãã ãããã¯ã©ãããã§ãçãŸããçºå±ããæ°ããã²ãŒã ãçã¿åºãã誰ããå¿ããæã«ã¯å¿åŽããæ»ã£ãŠããŸãã ãã®èªç¶selectionã®éçšã§æåããã²ãŒã ã®äŸã¯ãããããããŸãã ãããã¯å°Shoã®ããŸããŸãªããªãšãŒã·ã§ã³ã§ãããæ¥æ¬ã®äººã ã®æåçéºç£ã«å¯Ÿããæ¬verãªæ 床ã®ãããã§ã®ã¿çãæ®ã£ãŠããŸãã 倪極å°giã®ãããªã²ãŒã ããŒãã£ãŒã¯ãæ°å¹ŽïŒæ°å¹Žã§ã¯ãªãã«ããŠãïŒåŒãããããå¯èœæ§ããããŸãã ãããã å¹³å®æ代ã®ãããã®ãã§ã¹æç«ã¯ãããŒãã²ãŒã ã®ãåç³ãäžçã®æãé¡èãªä»£è¡šã§ã¯ãããŸããã
æ¬åœã«çŽ æŽãããã²ãŒã ã«ã€ããŠè©±ããããã§ãã ãã®äžã®è åšã¯æããã§ã¯ãªããç®æšã¯ç°¡åã§ã¯ãããŸããã ããªãã¯å€ãã®æ¹æ³ã§åã€ããšãã§ããŸããããã¬ãŒã¯æ±ºããŠç°¡åã§ã¯ãããŸããã Checkersãã¡ããªãŸãã¯ãã§ã¹ãã¡ããªã«èµ·å ããããšã¯ã§ããŸããã ãã®èµ·æºã¯é§ã§ãã å¹³åçãªçŽ 人ã«ãšã£ãŠããã®ã²ãŒã ã¯éæ¹é£ã®äœæãšåãããããšããµã€ãã£ã³ã°ã§ãã ããã¯ãã®ååã®1ã€ãå®å šã«æ£åœåããŸã- å²åŠè ã ãããããæŒå¥ã§ããŸãã
ãæ°åã®æŠãããŸãã¯ãå²åŠè ã®ã²ãŒã ããšããŠãç¥ããããªã¹ã¢ããã¢ã¯ ã1030幎ããã«ã¢ã·ããšããå§ã«ãã£ãŠèšè¿°ãããŸããã æããã«æ ¹æ ã®ãªãåäœè ã¯ãã©ãã³ã«åž°å±ããã²ãŒã ã®ã«ãŒã«ã¯ããšãã£ãŠã¹ã®ç®è¡çè«ã«åºã¥ããŠããŸãã ãã®åŸãã²ãŒã ã®ã«ãŒã«ã¯å¥ã®ä¿®é士ã«ãã£ãŠãããã«å€æŽããã ãã«ãã³ãã¹ã³ã³ãã©ã¯ãã¹ãšããååã§ãé³æ¥œã®çè«ã«é¢ããã¡ã¢ãè¿œå ããŸããã é·ãéããªãºã ãã·ãŒã¯åŠçã«æ°åŠãæããéã®ææãšããŠäœ¿çšãããŠããŸããã åœæã®ç¥è人ãã¡ã¯Rhythmachiaã楜ãã¿ãªãããã¬ã€ããŠããŸããïŒãã€ãŠã¯Chessããã人æ°ãé«ãã£ãïŒã Robert Burton ã¯Melancholyã®è§£ååŠã§ãããèšåãã Thomas Moreã¯ãã®ã²ãŒã ã圌ã®ãŠãŒããã¢ã®äœæ°ã«ãšã£ãŠè¯ãã¬ãžã£ãŒã ãšèããŸããã ãã®åŸãçªç¶ãããã¯ãã¹ãŠçµãã£ãã æ°åŠãšRhythmachiaã®èå³ã¯åãããã²ãŒã ã¯å¿ããããŸããã ãã¡ãããããã¯åœŒå¥³ãæãåºããªããšããæå³ã§ã¯ãããŸããã
ã²ãŒã ã®ã«ãŒã«
8x16ã»ã«ã®é·æ¹åœ¢ã®ããŒãäžã®2人ã®ãã¬ãŒã€ãŒãRhythm Machiaããã¬ã€ããŸãã 移åã¯é çªã«è¡ãããŸãã ååãã¯1ã€ã®ããŒã¹ã移åããŸãã 移åã®çµæãšããŠã察æŠçžæã®1ã€ãŸãã¯è€æ°ã®ããŒã¹ãååŸã§ããŸãïŒããŒãããåé€ãããŸãïŒã 次ã®çš®é¡ã®åœ¢ç¶ãå®çŸ©ãããŠããŸãã
- ãµãŒã¯ã«
- ãã©ã€ã¢ã³ã°ã«
- ã¹ã¯ãšã¢
- ãã©ããã
å³ã®æ°å€ããŒã¯ãç¡èŠãããšïŒä»¥äžã§ãããã«ã€ããŠèª¬æããŸãïŒã2çš®é¡ã®åããèš±å¯ãããŠããããšãããããŸãã æåã®ã±ãŒã¹ã§ã¯ããã£ã®ã¥ã¢ã¯çŽç·çã«ç§»åããéªéã«ãªã£ãŠããä»ã®ãã£ã®ã¥ã¢ïŒããèªäœãŸãã¯æµã®ãã®ïŒã«ãã£ãŠåæ¢ã§ããŸãã ãããã£ãŠãåïŒæãã«1ã€ã®ã»ã«ïŒãäžè§åœ¢ïŒçŽäº€ã«æ²¿ã£ãŠå³å¯ã«2ã€ã®ã»ã«ïŒãããã³æ£æ¹åœ¢ïŒçŽäº€ã«æ²¿ã£ãŠå³å¯ã«3ã€ã®ã»ã«ïŒã移åããŸãã ãã1ã€ã®å¯èœæ§ã¯ããã§ã¹ã®éšå£«ã®åããšåæ§ã«ãé§ã察象ã®åºå Žã«ããžã£ã³ããããããšã§ãã ãããã£ãŠãäžè§åœ¢ãŸãã¯æ£æ¹åœ¢ã¯æ©ãããšãã§ããŸãã 移åã¯ã空ã®ã»ã«ã§ã®ã¿å®è¡ããå¿ èŠããããŸãã
ãŠããŒã¯ãªäººç©ã¯ãã©ãããã§ãã å®éãããã¯æ°åã§ã¯ãªããæ°åã®ã»ããã§ãã ã»ããã®åããŒã¹ïŒåãäžè§åœ¢ããŸãã¯æ£æ¹åœ¢ïŒã«ããããã©ãããã¯å¯Ÿå¿ããã¿ã€ãã®åããå®è¡ã§ããŸãã äžã®å³ã¯ããæ倧æ§æãã§ã®ãã©ãããã®å¯èœãªåãã瀺ããŠããŸãã ãæ³åã®ãšãããã²ãŒã ã®çµãããŸã§ã«ããå®å šæ§ããå€§å¹ ã«äŸµå®³ãããå¯èœæ§ããããŸãïŒãšããã§ãRhythmachiaã®ãã©ãããã¯ããéšåçã«æ®ºããããšãã§ããå¯äžã®æ°åã§ãïŒã
ã殺ããæ¹æ³ã«ã€ããŠèª¬æããŸãã Rhythmachiaã«ã¯ã次ã®4ã€ããããŸãã
- å å²æ»ç¥
- å¹³çã§ãã£ããã£
- åŸ ã¡äŒãã«ããæç²
- åŽç«ã«ããæç²
æãæ¥é²çãªã®ã¯ããã£ã®ã¥ã¢ã®å å²ã§ãã 次ã®ç§»ååŸã«ãã¹ãŠã®å¯Ÿè§ç·ãŸãã¯çŽäº€æ¹åã§ãããã¯ããããšãå³ã¯åé€ãããŸãã ãã£ã®ã¥ã¢ãããŒãã®ç«¯ãŸãã¯è§ã«ããå Žåããããã¯ããå¿ èŠãããæ¹åã¯å°ãªããªããŸãã ããã¯ããã©ãããå šäœãäžåºŠã«ååŸããããã®æãç°¡åãªïŒãããå¯äžã§ã¯ãªãïŒæ¹æ³ã§ãã å å²ã¯ãæ°åã®æ°å€ã䜿çšããªãå¯äžã®æ¹æ³ã§ãã
å¥ã®æ¹æ³ã¯ãæ°å€ãäžèŽããå³ãåãããšã§ãã 移åãå®äºããåŸãããŒã¹ã次ã®åãã移åã§ãããã£ãŒã«ãã«ïŒãã¡ããããã®ãã£ãŒã«ãã空ã ã£ãå ŽåïŒçžæã®ããŒã¹ãåãæ°å€ã§é 眮ãããŠããå ŽåããããååŸãããŸãã ãã®æŠéæ¹æ³ã¯é察称ãããããªãããšã«æ³šæããŠãã ããã ïŒäžã®å³ïŒãçœã®åãã®åŸãæ°å€16ã®åã¯åãå€ã®é»ã®äžè§åœ¢ããšãããšãã§ããŸãããäžè§åœ¢ã¯ä»ã®ã»ã«ã«ç§»åãããããåç¬ã§ã¯åããŸããã åæã«ã25ã®æ°å€ãæã€çœãšé»ã®äžè§åœ¢ãäºãã«å¯Ÿç§°çã«ããŒãããŸãïŒã©ã®æ°åãçºå°ããããã¯ã移åã®é åºã«ãã£ãŠæ±ºãŸããŸãïŒã
åã®æ¹è¯çã¯ã次ã®æ¹æ³ã§ãã ä»åããåŸ ã¡äŒããããã2人ã®äººç©ãæ»æããŠããŸãã ãããã®æ°å€ã®åèšãå·®ãç©ãŸãã¯åãçžæã®ãã£ã®ã¥ã¢ã®æ°å€ãšäžèŽããå Žåããã®ãã£ã®ã¥ã¢ã¯åé€ãããŸãã ããã¯ãã²ãŒã ã§ãã£ã®ã¥ã¢ãšæŠãæãäžè¬çã«äœ¿çšãããæ©äŒã§ãããå€ããå°ãªããè€éãªäœçœ®ã§ãã®ãããªè åšããã¹ãŠèŠãã®ã¯ç°¡åã§ã¯ãããŸããã
åŸè ã®æ¹æ³ã§ã¯ãé è·é¢ã§ãã£ã®ã¥ã¢ãåãããšãã§ããŸãã 補åã®çµæãŸãã¯ãã£ã®ã¥ã¢ã®å人çãªæ°å€ãšçžæã®ãã£ã®ã¥ã¢ãŸã§ã®è·é¢ïŒçŽäº€ïŒã察æŠçžæã®ãã£ã®ã¥ã¢ã®æ°å€ãšäžèŽããå Žåããã£ã®ã¥ã¢ã¯åé€ãããŸãã æŠéã®æ¹åã«ããä»ã®äººç©ã¯è åšã劚ããŸããã è·é¢ãèšç®ãããšããéå§äœçœ®ãšçµäºäœçœ®ãèæ ®ãããŸãã ããã¯ã察称çãªæŠéæ¹æ³ã§ãïŒãã£ã®ã¥ã¢ã®ç§»åã«ãŒã«ã«äŸåããªãããïŒã 移åã®é åºã«ãã£ãŠãã©ã®æ°åãæ®åœ±ããããã決ãŸããŸãã
ãããã®ã«ãŒã«ããã©ãããã«ã©ã®ããã«é©çšããããã«ã€ããŠã¯ãŸã 話ããããŸããã ããã«ããããã¹ãŠãç°¡åã§ã-æ°åãåãããã®èšç®ã§ã¯ããã©ãããã¯ç¬ç«ããæ°åïŒãã®æ°å€ã¯ãã¹ãŠã®ã³ã³ããŒãã³ãã®æ°å€ã®åèšãšäžèŽããŸãïŒãšããŠããŸãã¯ãã®äžéšãšããŠæ©èœã§ããŸãã åæ§ã«ããã©ãããã¯ãå šäœãšããŠïŒãã®åèšå€ã§ïŒããŸãã¯éšåçã«ïŒãã®åã³ã³ããŒãã³ãã¯åå¥ã«è匱ã§ãïŒååŸããããšãã§ããŸãã äžã§è¿°ã¹ããã©ãããã®ç§»åèŠåãèãããšããã©ãããã¯æã匷åãªïŒãããŠæãè匱ãªïŒæ°åã«ãªããŸãã
æ°åã®åæé 眮ã¯ãã²ãŒã ã®å¥ã®éèŠãªæ©èœã«é¢é£ä»ããããŠããŸãã å³ã®ã»ããã¯åãã§ãããæ°å€ã¯ç°ãªããŸãã ãŸãããã©ãããã®ãå®å šãªã»ãããã¯ç°ãªããŸãïŒãã¬ãŒã€ãŒã®ããããã«ã€ããŠãããŒãã®åŽé¢ã«è¡šç€ºãããŸãïŒã ããã«ãããã²ãŒã ãé察称ã«ãªããŸãã é»ã®ãã¬ã€ã€ãŒã®æŠè¡ãšæŠç¥ã¯ãçœã®ãã¬ã€ã€ãŒã«ã¯é©ããŠããŸããïŒéã®å Žåãåæ§ã§ãïŒã ããã«ãããã²ãŒã ãããé¢çœããªããŸãã
æ å ã®åå©
äžèšã®ã«ãŒã«ã¯ãªãºã ãã·ãŒã®ãã¬ã€ãéå§ããã®ã«ååã§ãããã²ãŒã ã®ç®çãåã«çžæã®ãã¹ãŠã®ããŒã¹ããã£ããã£ããããšã§ããå Žåãã²ãŒã ã¯ããã»ã©é¢çœããªãã§ãããã ã¯ãããã®æ¹æ³ã§åã€ããšãã§ããŸããããããåã€å¯äžã®ïŒãããŠæé«ã§ã¯ãªãïŒæ¹æ³ã§ã¯ãããŸããïŒ ç§ã¯ã²ãŒã ãæ¬åœã«å¥œãã§ãããã®ç®çã¯æµã®ãã£ã®ã¥ã¢ãç°¡åã«ã殺ããããšã§ã¯ãããŸããã ãã§ã¹ã§ã¯ãåã€ããã«ããã¹ãŠã®ããŒã¹ããé£ã¹ããå¿ èŠã¯ãŸã£ãããªãããã³ã°ããã§ãã¯ã¡ã€ãããã°ååã§ãïŒ æ³¢äœèŠå°giã®äžéšã®ããŒãžã§ã³ã§ã¯ãã²ãŒã ã®ç®æšã¯ããã«äºæ³å€ã§ãïŒåã€ããã«ã¯ã5ã€ã®ãããããé£ç¶ããŠã䞊ã¹ãå¿ èŠããããŸãïŒã ãªãºã ãã·ãŒããã®ç¹ã§å€±æããŸããã 以äžã¯ããã®ã²ãŒã ã«åã€æ¹æ³ã®ãªã¹ãã§ãïŒãå声ãã®æé ïŒã
- De Corpore ïŒãby bodyãïŒïŒäžå®æ°ïŒãŸãã¯ãã以äžïŒã®æµã®é§ïŒéåžž15ïŒãååŸããŸã
- De Bonis ïŒãååå¥ãïŒïŒäžããããïŒãŸãã¯å€§ããªïŒåèšå€ïŒéåžžã¯çœã1315ãé»ã984ïŒã§çžæã®ããŒã¹ãåãåããŸã
- De Lite ïŒã蚎èšã«ãããïŒïŒãã£ããã£ãããæ°åã®æ¡æ°ãæå®ãããæ°åãè¶ ããªãéããç¹å®ã®ïŒãŸãã¯å€§ããªïŒåèšå€ãæã€çžæã®æ°åãååŸããŸãã
- De Honore ïŒãåèªã«ãããïŒïŒãã£ããã£ãããããŒã¹ã®æ°ãæå®ãããæ°ãè¶ ããªãå Žåãæå®ãããïŒãŸãã¯å€§ããïŒåèšå€ãæã€æµã®ããŒã¹ãååŸããŸãã
- De Honore Liteque ïŒãåèªãšèšŽèšãïŒïŒãã£ããã£ãããæ°åã®æ°ãæå®ãããæ°åãè¶ ããããã£ããã£ãããæ°åã®æ¡æ°ãæå®ãããå€ãè¶ ããªãå Žå
- ãã¯ããªã¢ãã°ã ïŒã倧åå©ãïŒïŒç®æ°ã®é²è¡ã§3ããŒã¹ïŒæµã®é åïŒãé 眮ããŸãã
- ãã¯ããªã¢ã¡ãžã£ãŒ ïŒã倧åå©ãïŒïŒ4ã€ã®æ°åïŒæµã®é åïŒãé 眮ãã3ã€ã®æ°åã®2ã€ã®ïŒããå€ãã¯ãªãïŒã°ã«ãŒããç°ãªãé²è¡ã¿ã€ãïŒ ç®è¡ ã 幟äœããŸãã¯èª¿å ïŒã«é 眮ããŸãã
- Victoria Excellentissima ïŒãæãåªããåå©ãïŒïŒ3çš®é¡ãã¹ãŠã®é²è¡ãããããã«ïŒæµã®é åã«ïŒ4ããŒã¹ãé 眮
ããã§ã¯ãã²ãŒã ã®åºæ¬çã«ç°ãªã2ã€ã®ã¿ã€ãã®ç®æšãåºå¥ã§ããŸãã äžè¬çãªåå©ã¯ãæµã®ãã£ã®ã¥ã¢ã®æç²ã«é¢é£ä»ããããŠããŸãïŒæ»æçãªãã¬ã€ããä¿è·ããããã«ãæç²ããããã£ã®ã¥ã¢ã®æ°ã«å¶éããããŸãïŒã é©åãªåå©ã¯ããã䟡å€ã®ããçµè«ãšèŠãªãããæµã®é åã§ã®ç¹å®ã®ã調åãã®å埩ã«é¢é£ä»ããããŸãïŒæµã®ãã£ã®ã¥ã¢ã®æŠãã®å¯èœæ§ãæé€ããŸããïŒã

äžèšã®äŸã¯ãæµã®ãã£ã®ã¥ã¢ãé¢äžããå¯èœæ§ãããããšã瀺ããŠããŸãã æåã®ã±ãŒã¹ã§ã¯ãç®è¡çŽæ°ãäœæãããŸãïŒ16ã36ã56ïŒã 2çªç®ã®äŸã§ã¯ã幟äœåŠçãªé²è¡ïŒ4ã12ã36ïŒãšèª¿åçãªé²è¡ïŒ4ã6ã12ïŒãçµã¿åãããŠããŸãã 3çªç®ã®ã±ãŒã¹ã§ã¯ã3ã€ã®ã¿ã€ãã®é²è¡ããã¹ãŠååšããŸãïŒèªåã§èŠã€ããããšãã§ããŸãïŒã èšèªã®ã«ãŠã³ãã«åé¡ãããå ŽåãRhythmachyã§èãããããã¹ãŠã®è§£æ±ºçã®è¡šãäœæãããŠããŸãïŒãã ããRhythmachyã¯èšèªã®ã«ãŠã³ãã«åé¡ããã人ã«ã¯èå³ããªãããã§ãïŒã
å¯èœãªãªãã·ã§ã³
Rhythmachyã¯å šçæã«ãã§ã«å€ãã®å€æŽãåããŠããŸãã ãã®åŸã®æ¹ä¿®ã¯ç¶æ³ãæ¹åããŸããã§ããã ãã®ã²ãŒã ã®ã«ãŒã«ã®èª¬æã«ã¯å€ãã®éãããããŸãã äžéšã®ãœãŒã¹ã§ã¯ãããŒã¹ã®åæé 眮ã®ä»£æ¿ãªãã·ã§ã³ãæäŸããŠããŸãïŒ8 x 14ããŒãã§ã²ãŒã ã説æãããªãã·ã§ã³ã«åºããããŸããïŒã
å³åœ¢ã移åããããã®åçŽåãããã«ãŒã«ãæã€ãªãã·ã§ã³ããããŸãã ãããã®èŠåã«åŸã£ãŠãå³åœ¢ã¯ãæå®ãããã»ã«æ°ã ãçŽç·ïŒçŽäº€ããã³å¯Ÿè§ïŒã§ç§»åããŸãã åãã®éªéãããã©ããªå³åœ¢ãåããæ¢ããŸãã ãã§ã¹ã®éšå£«ã®åãã®ãããªãžã£ã³ãã¯ãããŸããã ãã©ãããã¯ããã€ãã®ããã«ããã®ã»ããã«ååšãã人ç©ã®åããçµã¿åãããŸãã

ããã«ãå³åœ¢ã®ç§»åã«é¢ããéåžžã®ã«ãŒã«ã䜿çšãããªãã·ã§ã³ããããç¹å¥ãªãã©ãããã®ç§»åã3ã€ã®ã»ã«ã«æãã«è¿œå ãããŸãã ãã®ãããªç§»åã¯ããã©ãããã«å ã å«ãŸããŠããæ°åã®1ã€ãæ®åœ±ãããªãéãå¯èœã§ãã å¥ã®ãªãã·ã§ã³ã¯ããã©ãããã®æåã®æ°åã»ããã®å®å šæ§ãšé¢é£ããŠããŸãã ãã©ãããã®åèšå€ã䜿çšã§ããã®ã¯ããã®æ°åããŸã ãé£ã¹ãããŠããªãããšããæ¡ä»¶ãããå Žåã®ã¿ã§ãã ããããã®ã³ã³ããŒãã³ããæ»æãããå Žåããã©ããããå®å šã«åé€ãããããåçŽãªãªãã·ã§ã³ããããŸãã
ããã€ãã®ãªãã·ã§ã³ã¯ãæ°åãåãããã®ã«ãŒã«ã®å€æŽã«é¢é£ããŠããŸãã ãã®ããããªãã·ã§ã³ã®1ã€ã§ãã by Siege ãã®å³ïŒsiegeïŒãååŸããã«ã¯ããã®ãèªç¶ãªãåãã®ãã¹ãŠã®æ¹åããããã¯ããå¿ èŠããããŸãã åæã«ããããã¯ãããŠããããŒã¹ã®è¿ãã«ããŒã¹ãé 眮ããå¿ èŠã¯ãããŸããïŒä»¥äžã®äŸã¯æŠå¿µã瀺ããŠããŸãïŒã ããã¯éåžžã«èå³æ·±ãã«ãŒã«ã§ãã

ã åŸ ã¡äŒã ãïŒåŸ ã¡äŒãïŒ ã«ãããã£ããã£ããã¯ã©ã³ããã¿ã€ãã®ã²ãŒã ã®ããã«å®è¡ãããªãã·ã§ã³ããããŸãïŒäžæ¹ãæ°åã移åããããã®ã«ãŒã«ã¯ç¡èŠãããŸãïŒã

ã æ å ã®åå© ãã®å®çŸ©ã«ã¯å€ãã®ççŸããããŸãã å€ãã®å Žåããã®ãããªåå©ã®æ¡ä»¶ã§ã¯ãæµã®ãã©ãããã®äºåç Žå£ãå«ãŸããŸãã ãŸããã²ãŒã ãçµäºããããã®æ¡ä»¶ãããããã©ãããã®ååŸã«éå®ãããŸãã ãã®ã²ãŒã ã«ã¯å€ãã®ãªãã·ã§ã³ããããŸãã ãããã«ããŠããã²ãŒã ã®éå§åã«ãã«ãŒã«ã®ãã¥ã¢ã³ã¹ã«ç²Ÿéããããšã¯å Žéãã§ã¯ãããŸããã
奜å¥å¿ã®åŒ·ã人ã®ããã®è©³çŽ°
ã²ãŒã ã®å®è£ ã¯ãåœç¶ããã€ãã®æ®µéã«åãããŠããŸãã æãç°¡åãªæ¹æ³ã¯ãåã圢ç¶ãå®è£ ããããšã§ããã ãããç§ãå§ããå Žæã§ãã Squaresã®åãã¯æ¬¡ã®ããã«ãªããŸãã
移åããæ£æ¹åœ¢
: leap-n ( 'leap-dir 'shift-dir count ? -- ) IF BEGIN OVER EXECUTE IF on-board? IF 1- DUP 0> IF FALSE ELSE 2DROP TRUE TRUE ENDIF ELSE 2DROP FALSE TRUE ENDIF ELSE 2DROP FALSE TRUE ENDIF UNTIL IF EXECUTE IF on-board? empty? AND IF from here DUP last-position ! move capture-all add-move ENDIF ENDIF ELSE DROP ENDIF ELSE 2DROP DROP ENDIF ; : shift-n ( 'shift-dir count ? -- ) IF BEGIN OVER EXECUTE IF on-board? empty? AND IF 1- DUP 0> IF FALSE ELSE 2DROP TRUE TRUE ENDIF ELSE 2DROP FALSE TRUE ENDIF ELSE 2DROP FALSE TRUE ENDIF UNTIL IF from here DUP last-position ! move capture-all add-move ENDIF ELSE 2DROP ENDIF ; : s-move-n ( -- ) ['] North 3 TRUE shift-n ; : s-move-s ( -- ) ['] South 3 TRUE shift-n ; : s-move-w ( -- ) ['] West 3 TRUE shift-n ; : s-move-e ( -- ) ['] East 3 TRUE shift-n ; : s-move-nw ( -- ) ['] Northwest ['] North 2 TRUE leap-n ; : s-move-ne ( -- ) ['] Northeast ['] North 2 TRUE leap-n ; : s-move-sw ( -- ) ['] Southwest ['] South 2 TRUE leap-n ; : s-move-se ( -- ) ['] Southeast ['] South 2 TRUE leap-n ; : s-move-wn ( -- ) ['] Northwest ['] West 2 TRUE leap-n ; : s-move-ws ( -- ) ['] Southwest ['] West 2 TRUE leap-n ; : s-move-en ( -- ) ['] Northeast ['] East 2 TRUE leap-n ; : s-move-es ( -- ) ['] Southeast ['] East 2 TRUE leap-n ; {moves s-moves {move} s-move-n {move} s-move-s {move} s-move-w {move} s-move-e {move} s-move-nw {move} s-move-ne {move} s-move-sw {move} s-move-se {move} s-move-wn {move} s-move-ws {move} s-move-en {move} s-move-es moves}
ãã©ãããã®åäœã¯ãçŸåšã©ã®ããŒã¹ãå«ãŸããŠãããã«ãã£ãŠæ±ºå®ãããããããã©ãããã§ã¯å€å°ã®å°é£ãçããŸããã ç§ã¯åœŒãã«ãã¹ãŠã®å¯èœãªåãã説æããªããã°ãªããŸããã§ããããããŠåãããããšããã»ããå ã®å¯Ÿå¿ããæ°åã®ååšã確èªããŠãã ããïŒ
移åãã©ããã
: is-correct-type? ( piece-type -- ? ) not-empty? IF piece-type PYRAMID > IF here SWAP a1 to BEGIN friend-p IF DUP is-piece-type? IF DROP TRUE TRUE ELSE FALSE ENDIF ELSE DROP FALSE TRUE ENDIF UNTIL SWAP to ELSE DROP FALSE ENDIF ELSE DROP FALSE ENDIF ; : pr-move-ne ( -- ) ['] Northeast ROUND is-correct-type? leap-0 ; : pr-move-se ( -- ) ['] Southeast ROUND is-correct-type? leap-0 ; : pr-move-nw ( -- ) ['] Northwest ROUND is-correct-type? leap-0 ; : pr-move-sw ( -- ) ['] Southwest ROUND is-correct-type? leap-0 ; {moves p-moves {move} pr-move-ne {move} pr-move-se {move} pr-move-nw {move} pr-move-sw ... moves}
æ°åã®æŠãã®å®è¡ã¯ãæ¬åœã®ãçå競äºãã«å€ãããŸããã 4ã€ã®å®å šã«ç°ãªãïŒéåžžã«éèŠãªïŒãã£ããã£ã¡ãœãããå®è£ ããå¿ èŠããããŸããã åæã«ãèšç®ââã®ãªãŒããŒããããæå°éã«æããããã«ããã£ãŒã«ããã¥ãŒã®æ°ãå¶éããããšèããŠããŸããïŒç§»åã¯æ¢ã«äžåœã«é·ãèšç®ãããŠããŸãïŒã ãã®çµæãç§ã¯ããã€ãã®ã¢ã¬ã€ãäºåã«åãããšããã¢ã€ãã¢ã«æ±ºçããŸããããã£ã®ã¥ã¢ã®æŠãã®æ¡ä»¶ã次ã®ããã«ãã§ãã¯ããŸããã
ããã«æ¹æ³
MAXV [] attacking-values[] MAXS [] current-positions[] MAXS [] current-values[] MAXS [] eruption-values[] : fill-current ( pos -- ) 1 current-count ! DUP 0 current-positions[] ! DUP piece-type-at PYRAMID > IF a1 to 0 BEGIN enemy-p IF not-empty? IF piece piece-value current-count @ MAXS < IF here current-count @ current-positions[] ! DUP current-count @ current-values[] ! current-count ++ ENDIF + ENDIF FALSE ELSE TRUE ENDIF UNTIL ELSE DUP piece-at piece-value ENDIF 0 current-values[] ! to ; : get-eruption-values ( n -- ) 0 sum-value ! PYRAMID is-piece-type? IF here a1 to BEGIN friend-p IF not-empty? eruption-count @ MAXE < AND IF OVER piece piece-value DUP sum-value @ + sum-value ! * eruption-count @ eruption-values[] ! eruption-count ++ ENDIF FALSE ELSE TRUE ENDIF UNTIL to sum-value @ ELSE piece piece-value ENDIF eruption-count @ MAXE < IF * eruption-count @ eruption-values[] ! eruption-count ++ ELSE 2DROP ENDIF ; : get-attacking-values ( piece-type -- ) 0 sum-value ! FALSE sum-flag ! PYRAMID is-piece-type? IF here a1 to BEGIN friend-p IF not-empty? attacking-count @ MAXV < AND IF piece piece-value sum-value @ + sum-value ! OVER is-piece-type? IF TRUE sum-flag ! piece piece-value attacking-count @ attacking-values[] ! attacking-count ++ ELSE ENDIF ENDIF FALSE ELSE TRUE ENDIF UNTIL to DROP sum-flag @ attacking-count @ MAXV < AND IF sum-value @ attacking-count @ attacking-values[] ! attacking-count ++ ENDIF ELSE is-piece-type? attacking-count @ MAXV < AND IF piece piece-value attacking-count @ attacking-values[] ! attacking-count ++ ENDIF ENDIF ; : check-siege-od ( 'dir -- ) EXECUTE IF predict-move on-board? NOT friend? OR IF siege-counter -- ENDIF on-board? friend? AND IF 2 get-eruption-values ENDIF to ELSE siege-counter -- ENDIF ; : check-siege-dd ( 'dir -- ) EXECUTE IF predict-move on-board? NOT friend? OR IF siege-counter -- ENDIF on-board? friend? AND IF ROUND get-attacking-values ROUND check-equality-piece ENDIF to ELSE siege-counter -- ENDIF ; : check-siege ( pos -- ) 4 siege-counter ! DUP to ['] North check-siege-od DUP to ['] South check-siege-od DUP to ['] West check-siege-od DUP to ['] East check-siege-od siege-counter @ 0= IF TRUE is-captured? ! ENDIF 4 siege-counter ! DUP to ['] Northeast check-siege-dd DUP to ['] Southeast check-siege-dd DUP to ['] Northwest check-siege-dd DUP to ['] Southwest check-siege-dd siege-counter @ 0= IF TRUE is-captured? ! ENDIF to ; : check-equality-dd ( 'second-dir count 'first-dir -- ) EXECUTE on-board? AND IF BEGIN 1- DUP 0< IF TRUE ELSE OVER EXECUTE on-board? AND IF predict-move friend? IF OVER count-to-piece-type DUP get-attacking-values check-equality-piece ENDIF to FALSE ELSE TRUE ENDIF ENDIF UNTIL 2DROP ELSE 2DROP ENDIF ; : check-equality-od ( 'second-dir count 'first-dir -- ) EXECUTE on-board? AND empty? AND IF BEGIN 1- DUP 0< IF TRUE ELSE OVER EXECUTE on-board? AND IF predict-move friend? IF OVER count-to-factor get-eruption-values OVER count-to-piece-type DUP get-attacking-values check-equality-piece TRUE ELSE not-empty? ENDIF SWAP to ELSE TRUE ENDIF ENDIF UNTIL 2DROP ELSE 2DROP ENDIF ; : check-equality ( pos -- ) DUP to ['] North 2 ['] North check-equality-od DUP to ['] North 2 ['] Northwest check-equality-dd DUP to ['] North 2 ['] Northeast check-equality-dd DUP to ['] South 2 ['] South check-equality-od DUP to ['] South 2 ['] Southwest check-equality-dd DUP to ['] South 2 ['] Southeast check-equality-dd DUP to ['] West 2 ['] West check-equality-od DUP to ['] West 2 ['] Northwest check-equality-dd DUP to ['] West 2 ['] Southwest check-equality-dd DUP to ['] East 2 ['] East check-equality-od DUP to ['] East 2 ['] Northeast check-equality-dd DUP to ['] East 2 ['] Southeast check-equality-dd to ; : check-ambush-prod ( value -- ? ) value-1 @ value-2 @ * OVER = IF DROP TRUE ELSE DUP value-1 @ * value-2 @ = IF DROP TRUE ELSE value-2 @ * value-1 @ = IF TRUE ELSE FALSE ENDIF ENDIF ENDIF ; : check-ambush-cond ( value -- ? ) value-1 @ value-2 @ + OVER = IF DROP TRUE ELSE DUP value-1 @ + value-2 @ = IF DROP TRUE ELSE DUP value-2 @ + value-1 @ = IF DROP TRUE ELSE check-ambush-prod ENDIF ENDIF ENDIF ; : check-ambush-pair ( -- ) current-count @ BEGIN 1- DUP current-positions[] @ 0< NOT IF DUP current-values[] @ check-ambush-cond IF DUP 0> IF DUP current-positions[] @ DUP enemy-at? IF DUP ChangePieces capture-at ELSE DROP ENDIF -1 OVER current-positions[] ! ELSE TRUE is-captured? ! ENDIF ENDIF ENDIF DUP 0> NOT UNTIL DROP ; : check-ambush ( -- ) attacking-count @ BEGIN 1- attacking-count @ BEGIN 1- 2DUP < IF 2DUP attacking-values[] @ value-1 ! attacking-values[] @ value-2 ! check-ambush-pair ENDIF DUP 0> NOT UNTIL DROP DUP 0> NOT UNTIL DROP ; : fill-eruption-values ( 'dir pos n -- ) value-1 ! to 1 BEGIN 1+ OVER EXECUTE IF predict-move OVER value-1 @ > on-board? friend? AND AND IF OVER get-eruption-values ENDIF to FALSE ELSE TRUE ENDIF UNTIL 2DROP ; : check-eruption-pair ( -- ) current-count @ BEGIN 1- DUP current-positions[] @ 0< NOT IF DUP current-values[] @ value-1 @ = IF DUP 0> IF DUP current-positions[] @ DUP enemy-at? IF DUP ChangePieces capture-at ELSE DROP ENDIF -1 OVER current-positions[] ! ELSE TRUE is-captured? ! ENDIF ENDIF ENDIF DUP 0> NOT UNTIL DROP ; : check-eruption-values ( -- ) eruption-count @ BEGIN 1- DUP eruption-values[] @ value-1 ! check-eruption-pair DUP 0> NOT UNTIL DROP ; : check-eruption ( pos -- ) ['] North OVER 4 fill-eruption-values ['] South OVER 4 fill-eruption-values ['] West OVER 4 fill-eruption-values ['] East OVER 4 fill-eruption-values to check-eruption-values ; : capture-all ( -- ) here ROWS COLS * BEGIN 1- DUP on-board-at? OVER enemy-at? AND IF 0 attacking-count ! 0 eruption-count ! FALSE is-captured? ! DUP fill-current DUP check-siege is-captured? @ NOT IF DUP check-equality ENDIF is-captured? @ NOT IF check-ambush ENDIF is-captured? @ NOT IF DUP check-eruption ENDIF is-captured? @ IF capture-piece ENDIF ENDIF DUP 0> NOT UNTIL DROP to ;
ãã©ãããã§ã®äººç©ã®æç²ãšç§»åã¯ãç¹å¥ãªæ¹æ³ã§åŠçããå¿ èŠããããŸããã
æ°åãæ®ã
: capture-piece ( -- ) current-count @ BEGIN 1- DUP 0> IF DUP current-positions[] @ DUP 0< NOT IF DUP enemy-at? IF DUP ChangePieces capture-at ELSE DROP ENDIF ELSE DROP ENDIF FALSE ELSE DUP current-positions[] @ DUP enemy-at? IF DUP ChangePieces capture-at ELSE DROP ENDIF TRUE ENDIF UNTIL DROP ;
ãã§ã«ãããã°ã®ããã»ã¹ã§ããã¹ãŠã®ãã§ãã¯ã移ååã®æç¹ã§å®è¡ãããããšã«æ°ä»ããŸããã ããŒã¹ã®åããã·ãã¥ã¬ãŒãããå°ããªé¢æ°ãäœæããå¿ èŠããããŸããïŒããã¯ããŒãäžã®äœçœ®ã®å®å šãªåèšç®ã§ã¯ãããŸããããå°ãã®è¡ã§ãªããšã察åŠã§ããŸããïŒã
äœçœ®å€æŽ
: predict-move ( -- pos ) here DUP from = IF last-position @ to ELSE DUP last-position @ = IF from to ENDIF ENDIF ;
ããããã¹ãŠã®ææã®äžã§ãã²ãŒã ãçµäºããããã®æ¡ä»¶ã確èªããããšã¯ç°¡åãªäœæ¥ã®ããã«æããŸããã å ¬çã«ã¯éæ³ããããŸãããã䞡芪ã«èŠããããšãæãããããªããšã¯äœããããŸããã
å®äºãã§ãã¯
15 CONSTANT WINC 1315 CONSTANT WINW 984 CONSTANT WINB : WhitePieces++ ( -- ) WhitePieces ++ ; : BlackPieces++ ( -- ) BlackPieces ++ ; : WhiteValues++ ( -- ) WhiteValues ++ ; : BlackValues++ ( -- ) BlackValues ++ ; : ChangePieces ( pos -- ) DUP piece-at piece-value SWAP player-at White = IF COMPILE WhitePieces++ BEGIN 1- COMPILE WhiteValues++ DUP 0> NOT UNTIL DROP ELSE COMPILE BlackPieces++ BEGIN 1- COMPILE BlackValues++ DUP 0> NOT UNTIL DROP ENDIF ; : OnIsGameOver ( -- gameResult ) #UnknownScore current-player White = IF WhitePieces @ WINC >= IF DROP #LossScore ENDIF WhiteValues @ WINW >= IF DROP #LossScore ENDIF ENDIF current-player Black = IF BlackPieces @ WINC >= IF DROP #LossScore ENDIF BlackValues @ WINB >= IF DROP #LossScore ENDIF ENDIF ;
ãã®ç¬éãããããã°ã©ã ã¯æ¢ã«åçã§ããŸããïŒãã ããããã¯ããªãååçã«å®è¡ãããŸããïŒã å®éãè©äŸ¡é¢æ°ïŒããã³AIã®ã«ã¹ã¿ã å®è£ ïŒããªãå ŽåãAxiomã¯å®å šãªç¶²çŸ çæ€çŽ¢ãæçµäœçœ®ãŸã§å®è¡ããããšããŸãã ã²ãŒã ã®çµãããæ€çŽ¢ã®å¯èœãªæ·±ãã®å°å¹³ç·ãã¯ããã«è¶ ããŠããããšã¯æããã§ããããã®çµæãèŠã€ãã£ãåãã¯ç¹å®ã®æå³ã§ç°ãªããªãã äžè¬ã«ãAIã®æ¯ãè¿œå ããããšã¯æ®ããŸãã
è©äŸ¡æ©èœ
: OnEvaluate ( -- score ) current-player material-balance ;
ããã§ã¯ãéåžžã«äŸ¿å©ãªãããªã¢ã«ãã©ã³ã¹é¢æ°ïŒAxiomãæäŸïŒã䜿çšããŸãããããã¯ãæ°å€ã«äžããããéã¿å€ã䜿çšããŸãïŒRhythmachiaã®ã«ãŒã«ãå®è£ ããããã«åãå€ã䜿çšãããŸããïŒã
å³ã®èª¬æ
{pieces {piece} R0 {moves} r-moves 0 {value} {piece} R1 {moves} r-moves 1 {value} {piece} R2 {moves} r-moves 2 {value} {piece} R3 {moves} r-moves 3 {value} {piece} R4 {moves} r-moves 4 {value} {piece} R5 {moves} r-moves 5 {value} {piece} R6 {moves} r-moves 6 {value} {piece} R7 {moves} r-moves 7 {value} {piece} R8 {moves} r-moves 8 {value} {piece} R9 {moves} r-moves 9 {value} {piece} R16 {moves} r-moves 16 {value} {piece} R25 {moves} r-moves 25 {value} {piece} R36 {moves} r-moves 36 {value} {piece} R49 {moves} r-moves 49 {value} {piece} R64 {moves} r-moves 64 {value} {piece} R81 {moves} r-moves 81 {value} {piece} T0 {moves} t-moves 0 {value} {piece} T6 {moves} t-moves 6 {value} {piece} T9 {moves} t-moves 9 {value} {piece} T12 {moves} t-moves 12 {value} {piece} T16 {moves} t-moves 16 {value} {piece} T20 {moves} t-moves 20 {value} {piece} T25 {moves} t-moves 25 {value} {piece} T30 {moves} t-moves 30 {value} {piece} T36 {moves} t-moves 36 {value} {piece} T42 {moves} t-moves 42 {value} {piece} T49 {moves} t-moves 49 {value} {piece} T56 {moves} t-moves 56 {value} {piece} T64 {moves} t-moves 64 {value} {piece} T72 {moves} t-moves 72 {value} {piece} T81 {moves} t-moves 81 {value} {piece} T90 {moves} t-moves 90 {value} {piece} T100 {moves} t-moves 100 {value} {piece} S0 {moves} s-moves 0 {value} {piece} S15 {moves} s-moves 15 {value} {piece} S25 {moves} s-moves 25 {value} {piece} S28 {moves} s-moves 28 {value} {piece} S36 {moves} s-moves 36 {value} {piece} S45 {moves} s-moves 45 {value} {piece} S49 {moves} s-moves 49 {value} {piece} S64 {moves} s-moves 64 {value} {piece} S66 {moves} s-moves 66 {value} {piece} S81 {moves} s-moves 81 {value} {piece} S120 {moves} s-moves 120 {value} {piece} S121 {moves} s-moves 121 {value} {piece} S153 {moves} s-moves 153 {value} {piece} S169 {moves} s-moves 169 {value} {piece} S225 {moves} s-moves 225 {value} {piece} S289 {moves} s-moves 289 {value} {piece} S361 {moves} s-moves 361 {value} {piece} P0 {moves} p-moves 0 {value} {piece} P91 {moves} p-moves 91 {value} {piece} P190 {moves} p-moves 190 {value} pieces}
ãã®å®è£ ã«ã¯å€ãã®æ©èœãæ¬ ããŠããŸãïŒããšãã°ã Glorious Victoriesã«ããã²ãŒã ã®å®äºã®ç¢ºèªïŒã å°æ¥ãäžè¶³ããŠããæ©èœãè¿œå ããããšããŸãã ãœãŒã¹ã³ãŒãã®çŸåšã®ããŒãžã§ã³ã¯åžžã«ããã«ãããŸã ã
çµæã¯äœã§ããïŒ
Rhythmachyã¯ããŸããã®è€éãã«èå³ãæã¡ãŸããã ãã¡ããããããZRFã«å®è£ ããèãã¯ãããŸããã§ãã ã ãã®ããã«Axiomããã¹ã¿ãŒããªããã°ãªããŸããã§ããïŒ çŸåšã Glorious VictoriesããµããŒãããªãåçŽåãããå®è£ ããããŸãã ãŸããã³ãŒãå ã®ãã¹ãŠã®ãšã©ãŒãçºèŠãããšãã確åºãã信念ã¯ãããŸããïŒForthScriptã®1000è¡-ããã¯æ·±å»ã§ãïŒã ããã¯ããŒã¿çã§ãããå šäœçã«åäœããŸãïŒ
ã²ãŒã ãéåžžã«æ©ãçµäºããããšã«æ°ä»ããããããŸããã æ¬åœã«ããã§ãã Common Victoriesã®æ¡ä»¶ã«åŸã£ãŠïŒäž¡æ¹ã®ãã¬ã€ã€ãŒãã¢ã°ã¬ãã·ãã«ãã¬ã€ããå ŽåïŒããã³æ®åœ±ããããŒã¹ã®æ°ãå¶éããããšãªãïŒïŒãã²ãŒã ã®å¹³åæéã¯ã10ã ãŒãã§ãã åæã«ãæåã®ãã¬ãŒã€ãŒã«ã¯æ·±å»ãªå©ç¹ããããŸãã
Cumulative results following game 13 of 100: Player 1 "Eval", wins = 13. Player 2 "Eval", wins = 0. Draws = 0
ãã¬ã€ã€ãŒã®1人ã ããæ»æçã§ããå Žåãã²ãŒã ã¯300以äžã®åãã«åŒããã蟌ãŸããããšã¯é¢çœãã§ãïŒæ»æçãªãã¬ã€ã€ãŒãã»ãšãã©åžžã«åã¡ãŸãïŒã
Cumulative results following game 22 of 100: Player 1 "Rithmomachy", wins = 1. Player 2 "Eval", wins = 21. Draws = 0
ã³ã³ãã¥ãŒã¿ãŒãæã£ãŠãã人ãéã¶ã®ã¯é£ããã§ãã æŠéäžã®ãã£ã®ã¥ã¢ã®ãã€ã©ã€ãããã£ãŠããã©ã®ç¹å®ã®é§ãåããããã«è¡ãã¹ãããææ¡ããã®ã¯é£ããå ŽåããããŸãïŒãã ããèªåã®ãã£ã®ã¥ã¢ã代çšããªãããšããå§ãããŸãïŒã ä»æ¥ããã®ã²ãŒã ã¯äººæ°ããããšã¯æãããŸãããããããåãå»ãããšã¯ã§ããŸããã 圌女ã¯å£é ã§ã®ã«ãŠã³ãã¹ãã«ã®éçºã«åªããŠããŸãã