行く以䞊

氎の䞭に小石を投げ、それらが圢成する円を芋おください。

そうでなければ、そのようなスロヌは空の楜しみになりたす。



コズマ・プルトコフ 「 瞑想の果実 」





このゲヌムは本圓に未完成の建物です。 6月に䜜業を開始したした。 私は毎日砎れたずは蚀えたせんが、圌女は私に倚くの血をだめにしたした。 今日、これはAxiomでの私の最も難しいプロゞェクトです。 非垞に重芁なコヌドに関しおは 、 MarGoはおそらくRhythm Machiaに匹敵したす。



このゲヌムの特別なずころは䜕ですか 圌女のためにそんなに苊しむこずは䟡倀がありたしたか 私はあなたに蚀いたす、そしおあなたは刀断したす。



衚面の類䌌性



「完璧な」 Guoの詊みは繰り返し行われおいたすが、成功するこずはめったにありたせん。 私の意芋では、MarGoは非垞にたれです このゲヌムで魅了される䞻なものは、Go のセットの䞊にあるずいう事実です。 䞀芋シンプルなGoのルヌルが、予想倖に耇雑な戊術的構成にどのように぀ながるかに぀いおはすでに曞きたした。 繰り返しはしたせんが、Goに぀いお曞いたすべおがMarGoにも圓おはたるずだけ蚀いたす飛行機を超えない限り。 そのため、たずえば、有名な「 ラッチ 」は次のようになりたす-3぀を取埗するための1぀の石の最も単玔な犠牲者







ずころで、蚀う
䞊蚘の䜍眮での「ラッチ」の䜿甚は完党に冗長です 黒人はすでに運呜にありたす;それらを「食べる」必芁はありたせん。 しかし、なぜMarGoはこのような小さなボヌドを䜿甚しおいるのでしょうか 䞻な理由は、ゲヌムが飛行機ではなく、ボリュヌムであるずいうこずです。 プレむダヌはピラミッドを構築し、誰もが19x19ボヌドでこれを行う忍耐を持぀こずはほずんどありたせん。 MarGoの暙準9x9ボヌドGoは、䞻に初心者のトレヌニングに䜿甚されたす



すでに9x9ボヌドを䜿甚しおいるずきに、メモリ䞍足の問題に遭遇したため、これは倧きな安心でした。 配列から䜙分な行を削陀しお、その䜿甚を最適化する必芁がありたした。 この点は非垞に明癜です。ピラミッドを構築するず、3次元ボヌドのほずんどのフィヌルドに図圢を配眮できたせん。



グルヌプのステヌタスを決定するずき、ボヌドのプレヌンにある空のアむテムのみが重芁です。 「生きおいる」グルヌプの各石は、これらのポむントの少なくずも1぀「 ダメ 」ず呌ばれるず接続されおいる必芁がありたす盎接たたは他の石を介しお。 最埌のダムが閉じられるずすぐに、グルヌプは死んでしたい、ボヌドから削陀されたす。



どのように機胜したすか
Go機胜の基瀎は、環境に萜ちた石を陀去するメカニズムです。 ずおも簡単に機胜したす。 そもそも、無条件に生きおいる石を識別する必芁がありたすボヌド䞊の空のアむテムに隣接しおいたす。 次に、「生きおいる」石のグルヌプに、以前に远加した石に隣接するすべおの石同じ色の石を远加する必芁がありたす。



ZoG / Axiomでのムヌブの実行の愚かなセマンティクスがなければ、すべおがうたくいくでしょう。 移動の構築党䜓を通しお、ボヌドの内容は蚈算が開始された時点ず同じに芋えたす移動によっお行われたすべおの倉曎は、その完了時にのみ衚瀺されたす。 簡単なケヌスでは、これず戊うこずができたすが、私たちのゲヌムは決しお簡単ではありたせんでした 3次元の錯芚を䜜成するずいう事実により、ボヌドに1぀のピヌスだけを远加するず、倚数のタむルフィギュアが移動する可胜性がありたす。 これらすべおの「特殊なケヌス」を特別な方法で凊理するこずは完党に非珟実的です ボヌドぞの新しいピヌスの远加ず、その埌の「殺された」ピヌスの削陀を分割する必芁がありたした。



{players {player} W {player} B {player} ?C {random} players} {turn-order {turn} W {of-type} normal {turn} ?C {for-player} W {of-type} clean {turn} B {of-type} normal {turn} ?C {for-player} B {of-type} clean turn-order}
      
      





「クリヌニング」を自動的に実行するには、フィギュアの所有者に代わっお行動する別のプレヌダヌを䜜成する必芁がありたした。 その動きは、ボヌドの未䜿甚フィヌルドの1぀に特別な芋えない図圢を配眮するこずです 最適化にもかかわらず、そのようなフィヌルドは倚数ありたす。 「死んだ」グルヌプを削陀するすべおのアクションは、この移動の「副䜜甚」ずしお実行されたす。



 : drop-m ( -- ) here a1 = verify (   ? ) drop (   ) ['] my-enemy? (    ) init-alive (       ) proceed-alive (     ) capture-all (         ) captured-tiles @ 0= IF (       ) ['] my-friend? (        ) init-alive proceed-alive capture-all ENDIF add-move (    ) ;
      
      





このコヌドは、2぀の問題を同時に解決したす。



  1. 最埌の移動で殺されたすべおの敵グルヌプを削陀する
  2. 移動が自殺であり、敵を殺すこずができない堎合、友奜グルヌプの自殺


詳现
 TOTAL [] alive[] (    ) VARIABLE alive-count (    ) : not-alive? ( -- ? ) (    ) TRUE 0 BEGIN DUP alive-count @ < IF DUP alive[] @ here = IF SWAP DROP FALSE SWAP TRUE ELSE 1+ FALSE ENDIF ELSE TRUE ENDIF UNTIL DROP ; : add-alive ( -- ) (    ) not-alive? alive-count @ TOTAL < AND IF (    ! ) here alive-count @ alive[] ! alive-count ++ ENDIF ; : check-alive ( 'op 'dir -- ) (     ) EXECUTE IF EXECUTE IF add-alive ENDIF ELSE DROP ENDIF ; : init-alive ( 'op -- 'op ) (   ) 0 alive-count ! 0 BEGIN (       ! ) DUP empty-at? IF DUP to OVER ['] n check-alive DUP to OVER ['] s check-alive DUP to OVER ['] w check-alive DUP to OVER ['] e check-alive ENDIF 1+ DUP PLANE >= UNTIL DROP ; : proceed-alive ( 'op -- 'op ) (   ""  ) 0 BEGIN (     ) DUP alive-count @ < IF DUP alive[] @ to OVER ['] n check-alive DUP alive[] @ to OVER ['] s check-alive DUP alive[] @ to OVER ['] w check-alive DUP alive[] @ to OVER ['] e check-alive 1+ FALSE ELSE TRUE ENDIF UNTIL DROP ;
      
      









ボヌドのサむズが小さいために貎女の競争が激しくなりたす。 Goをプレむする人は、小さなボヌド9x9での戊いが暙準的なボヌド19x19での戊いよりもはるかに激しいこずを知っおいる必芁がありたす。 最初の動きから、プレむダヌは密接に接觊し、「生ず死」の問題を継続的に解決するこずを䜙儀なくされたす。 これはMarGoのゲヌムですが、もしそうなら、私はそれに぀いお話さないでしょう。



䞻な違い



ゲヌムの名前は、「マヌブル」ボヌルず「ゎヌ」の2぀の単語で構成されおいたす。 䞀緒にそれが刀明-「囲ballsボヌルをプレむ」。 埓来のゲヌムずの違いは䜕ですか 䞉次元で 3次元のボヌドでGoをプレむする詊みは繰り返し行われおいたす任意のグラフでプレむできるプログラムに぀いお曞いおいたすが、これらのケヌスのほずんどで、ゲヌムのバランスがひどく苊しんでいたした。 おそらく、䟋倖はダむダモンド結晶栌子を暡倣したボヌドだけです。 これは、叀兞的なフラットボヌドによく䌌おいたす。 各ノヌドには2〜4個のネむバヌがありたす。









MarGoのアプロヌチはたったく異なりたす。 ボヌルはただ「宙に浮かぶ」こずはできたせん。 「ボヌドの䞊に立぀」ためには、圌は他の4぀のボヌル圌たたは圌の察戊盞手に頌らなければなりたせん。 もちろん、このボヌルが生き続けるためには、少なくずも1぀のダムにアクセスできるグルヌプず接觊しおいる必芁がありたす。 ボヌドの平面にある盎亀ゞョむントに垂盎方向が远加され、ピラミッドの基郚にあるボヌルを頂点で接続したす。



この接続は䞡方の方法で機胜したす。 ダムぞのアクセスは、ピラミッドの「䞊郚」に呜を吹き蟌むだけでなく、ボヌドの平面に暪たわっおいる敵の砎片を包み蟌むように、さらに䞋の局に移動するこずもできたす。 これだけでもゲヌムをより面癜くするこずができたすが、もう1぀、それほど明癜でない点がありたす。 ピラミッドの最䞊郚にある石が「生きおいる」限り、その基郚の石は「死んだ」グルヌプに属しおいおも取り陀くこずはできたせん







そのような石は、 女神ぞのアクセスを奪われ、異なる色の人物によっお抌し぀ぶされ、「ゟンビ」ず呌ばれ、「殺された」グルヌプの残りがそれを去るずき、ボヌドに残りたす。 ゟンビは捕獲された石ず同等ず芋なされたすボヌドから削陀されたすが、ボヌドに残っおいる限り、他の石ぞのアクセスを「転送」できたす突然衚瀺された堎合。 さらに、ピラミッドの䞊郚を削陀するこずにより、ゟンビを蘇らせるこずができたす。



3D䟵略
3次元効果を䜜成するには、各図を4぀のタむルに分割する必芁があるこずを既に曞きたした。 それは機胜したすが、問題は、タむルの数字を非垞に奇劙な方法で「立䜓」ボヌドに配眮する必芁があるこずです。 これは避けられたせん。 「䞊から」芋えるすべおのタむルは同じ平面になければなりたせん。 このレむアりトスキヌムには独自の利点がありたすが、ナビゲヌションは非垞に耇雑です。 たず、瞑想のためにマンダラが必芁でした。



 4 AA 3 8 8|9 9 2 5 5|6 6|7 7 1 1 1|2 2|3 3|4 4 + ABCDEFGH 1 1|5|8|AA|9|7|4 2 1|2 2|3 3|4 3 5|6 6|7 4 8|9
      
      





私は同意したす、写真はたあたあですが、どうにかしおオリ゚ンテヌションをするこずができたした。 このパタヌン内の自然な動きの方向性が必芁でした。 幞いなこずに、Axiomの芳点から芋るず、方向ずは、呌び出しの副䜜甚ずしお珟圚の䜍眮の䜍眮マヌカヌを倉曎する関数にすぎたせんこのような関数を呌び出すこずの䞻な結果は、ブヌル倀を返すこずで、移動が成功したこずを意味したす。 䞀般に、方向は再定矩でき、すぐに、それらの階局党䜓ができたした。







この図は、厳密に「北」に぀ながる関数のみを瀺しおいたすある意味。 私はすでにそれらのいく぀かを以前に䜿甚したした。 たずえば、方向 ' n 'は、メモリ䜿甚量を最適化するために、ボヌドアレむから䜙分な行を捚おたずきに入力する必芁がありたした。 「ロケット科孊」の䞻芁な郚分は、ボヌドの平面に平行な平面内を移動できる機胜です。



私はそれにコメントしようずさえしたせん。
 : common-internal ( 'dir -- ? ) here is-plane? IF get-height SWAP EXECUTE IF get-height - DUP 0= IF DROP TRUE ELSE 0> IF FALSE ELSE BEGIN d NOT empty? OR UNTIL empty? IF u verify ENDIF TRUE ENDIF ENDIF ELSE DROP FALSE ENDIF ELSE here OVER EXECUTE NOT empty? OR IF to BEGIN u NOT UNTIL EXECUTE ELSE 2DROP TRUE ENDIF ENDIF ;
      
      







その埌に発芋された゚ラヌのほずんどは、この特定の機胜に関連しおいたしたそしお、それらをすべお修正したかどうかはただわかりたせん。 それに基づいお、北内郚、南内郚などの動きが構築されたす。



 : north-internal ( -- ? ) ['] n common-internal ; : south-internal ( -- ? ) ['] s common-internal ; : west-internal ( -- ? ) ['] w common-internal ; : east-internal ( -- ? ) ['] e common-internal ;
      
      





これらはほが完党な移動機胜であり、欠点は1぀だけです。 移動に倱敗するず、珟圚の䜍眮のマヌカヌ䜍眮は未定矩になりたす。 これは簡単に修正できたす。 䜕らかの理由で移動できなかった堎合は、移動する前にマヌカヌの䜍眮を蚘憶し、埩元するだけで十分です。



 : wrap-direction ( 'dir -- ? ) here (   "" ) SWAP EXECUTE IF (      ) DROP TRUE (    ,    ) ELSE to FALSE (   ,  ""    ) ENDIF ; : north ( -- ? ) ['] north-internal wrap-direction ; : south ( -- ? ) ['] south-internal wrap-direction ; : west ( -- ? ) ['] west-internal wrap-direction ; : east ( -- ? ) ['] east-internal wrap-direction ;
      
      





少しだけ残っおいたす。 ボヌドの平面にある「氎平」運動に加えお、1぀の平面から別の平面に向かう方向「䞊」および「䞋」が必芁です。



コメントのないさらに奇劙なコヌド
 : up-internal ( -- ? ) here is-plane? IF FALSE ELSE d NOT empty? OR IF BEGIN u NOT UNTIL ENDIF TRUE ENDIF ; : down-internal ( -- ? ) here is-plane? IF d NOT empty? OR IF FALSE ELSE BEGIN d NOT empty? OR UNTIL empty? IF u verify ENDIF TRUE ENDIF ELSE u verify here is-plane? NOT ENDIF ; : up ( -- ? ) ['] up-internal wrap-direction ; : down ( -- ? ) ['] down-internal wrap-direction ;
      
      







それだけです これで、「接続された」グルヌプの怜出に必芁な方向の完党なセットができたした。



ゟンビは、ゲヌムのシンプルで論理的なルヌルによっお生成される興味深い新しい゚ンティティです。 興味深いが、それだけではありたせん MarGoには他にも驚きがありたす。



橋ず枓谷



ピラミッドの䞊郚にある石は、呚囲の可胜性がある友奜的な石ぞのアクセスを「送信」したす。 環境を回避する別の方法がありたす しかし、これがたさに、Goを3次元でプレむするこずがあたり面癜くない理由です。 グルヌプを殺すのは難しいです 修正する方法がありたす。







Goでは、そのような接続は、それを構築したプレむダヌの起こりうる間違いに関係なく、基本的に切断されないず芋なされたす。 近くに立っおいる石は生きお䞀緒に死にたす。 それらを分離するこずは䞍可胜ですが、MarGoではできたせん このゲヌムでは、立っおいる石の䞊に橋を架けるこずで、その石を「切る」こずができたす。 橋の反察偎にある䞋の石は、2぀のグルヌプに分かれたす。



橋を枡っお
「切断」の本質は、遞択した方向に移動できないこずです。 これは、䞊で曞いた方向の階局を拡匵する必芁があるこずを意味し、他の人々の「頭の䞊」の人物から構築された「橋」の存圚を制埡する新しい方向を远加したす。 「ブリッゞを切断する」ずいうルヌルはオプションに非垞に䌌おいるためゲヌムはそれがなくおも面癜い堎合がありたす、操䜜を制埡するフラグ定数を定矩したす。



 TRUE CONSTANT BRIDGE-CUTTING
      
      





その埌、すべおが簡単です
 : is-covered? ( -- ? ) player up empty? NOT AND IF player <> ELSE DROP FALSE ENDIF ; : check-bridge? ( 'dir piece-type -- ? ) piece-type SWAP equal-types? IF here is-covered? IF SWAP OVER to EXECUTE IF is-covered? SWAP to ELSE to FALSE ENDIF ELSE to DROP FALSE ENDIF ELSE DROP FALSE ENDIF ; : common-cutting ( 'dir 'dir piece-type 'dir piece-type -- ? ) BRIDGE-CUTTING IF check-bridge? IF 2DROP TRUE ELSE check-bridge? ENDIF ELSE 2DROP 2DROP FALSE ENDIF IF DROP FALSE ELSE EXECUTE ENDIF ; : north-cutting ( -- ) ['] north ['] east nw-piece ['] west ne-piece common-cutting ; : south-cutting ( -- ) ['] south ['] east sw-piece ['] west se-piece common-cutting ; : west-cutting ( -- ) ['] west ['] south nw-piece ['] north sw-piece common-cutting ; : east-cutting ( -- ) ['] east ['] south ne-piece ['] north se-piece common-cutting ;
      
      







チェックブリッゞにはすべおの魔法が隠されおいたすか 。 頭の䞊にある「橋」を特定するには、誰かのタむルを探しお「芋䞊げ」たす。 隣接するタむルでも同じこずを行いたす。 䞡方のタむルが別の色異なるで「芆われおいる」堎合、察応する方向を「切り刻み」、返された倀を停の倀に眮き換えたす。



これは驚きが終わった堎所だず思いたすか どんなに



最も難しいケヌス



自殺の動きは犁止されおいたすそしおほずんど圹に立たない。 プレヌダヌは、盞手の石を1぀も受け取らないず、「環境に」石を眮くこずができたせん。 Goでは、これは簡単です。 特定の石のグルヌプを取埗する堎合、新しく远加された石ず接觊しおいる必芁があり、その「殺害」は生き残るために必芁なダムを開きたす。 しかし、MarGoにはゟンビがいたす







ピラミッドの頂䞊で石をずっおも、癜い石は䟝然ずしお「囲たれ」、それによっお受け入れられない䜍眮を䜜り出したす 2぀の黒い石は、その基郚にある「ゟンビ」によっお保護された「仮想グルヌプ」を構成したす。 この防埡が非垞に短呜であるこずは面癜い。 癜人が䜕らかの理由で圌に隣接する4぀の石のいずれかを奪うず、「仮想グルヌプ」の保護は無効になりたす。 これは単なる人工構造ではありたせん。 仮想グルヌプは、MarGoの重芁な戊術コンポヌネントです。 たずえば、このポゞションのステヌタスに぀いおどう思いたすか







それは完党に囲たれたグルヌプ1぀の「目」のように芋え、癜を食べ始めたした。 原理的にはそうですが、黒人のグルヌプを「仕䞊げる」こずはそれほど簡単ではありたせん。 癜は、巊䞋隅だけに行くこずはできたせん。 2぀の癜い石が「ゟンビ」のみを囲むため、このような動きは自殺ず芋なされたす。 しかし、黒は䟵入する癜い石を食べるために急いではいけたせん







ブラックは「ゟンビ」ではない石をボヌドに远加し、それによっお「仮想グルヌプ」の保護を砎壊したす。 ホワむトは、圌が食べたばかりの石ず同じポむントに行く暩利を取埗し、5぀の黒い石を取りたす。 黒の最善の解決策は䜕もしないこずです。 もちろん、そうではありたせん。 ホワむトにはグルヌプを殺す別の機䌚がありたす。







黒人がこの脅嚁を無芖するず、圌のグルヌプは運呜づけられたす 圌らのグルヌプを぀なぐこずにより、癜人プレむダヌは最埌の名誉を安党に取るこずができたす。 このような䟵入に察する防埡は明らかです。 盞手の最高の動きはあなたの最高の動きです



本圓に難しい
䞊蚘で曞いたように、プレヌダヌに石を远加し、「デッド」グルヌプを削陀するず、2぀の連続した動きに分割する必芁がありたしたそうでなければ、すべおが非垞に困難でした。 他の䞍䟿さの䞭でも、これは単にプレむダヌが「自殺的」であるずいう理由だけで、プレむダヌに動きを犁じるこずができないこずを意味したす。 原則ずしお、これはそれほど倧きな問題ではありたせん。 移動しお、远加された石を単玔に死なせおみたしょう独自の色の他の石のグルヌプを䜿甚しおが、これは問題の䞀郚にすぎたせん このコヌドのようなものを曞いたこずを芚えおいたすか



 : drop-m ( -- ) here a1 = verify drop ['] my-enemy? init-alive proceed-alive check-zombies capture-all captured-tiles @ 0= IF ['] my-friend? init-alive proceed-alive check-zombies capture-all captured-tiles @ NEGATE update-variables ELSE captured-tiles @ update-variables ENDIF add-move ;
      
      





敵の石を取り陀こうずしおいたすが、これが成功しなかった堎合は、自分の石を取り陀こうずしおいたす取り蟌んだ石を同時に数えたす。 そのため、このコヌドは機胜したせん 実際、トリッキヌなケヌスを芋るず、盞手の石が取り陀かれおいるこずがわかりたすが、远加された石はただ囲たれたたたです これは本圓に問題です。 すべおが適切に機胜するためには、敵の死んだ石を取り陀き、それから私たちのものを取り陀き、可胜であれば敵の石を元の堎所に戻さなければなりたせん。 はい。Axiomには、ボヌドのコピヌを䜜成し、倉曎を加え、すべおをロヌルバックできる機胜がありたすが、ここでは䜿甚したせん。 幞いなこずに、別の適切に機胜する倉曎ロヌルバックメカニズムがありたす。



デッドグルヌプ削陀コヌドを2぀の郚分に分割する
 {players {player} W {player} B {player} ?C {random} players} {turn-order {turn} W {of-type} high-priority {turn} ?C {for-player} W {turn} B {of-type} high-priority {turn} ?C {for-player} B turn-order} {move-priorities {move-priority} normal-priority {move-priority} low-priority move-priorities} {moves w-drop {move} drop-w {move-type} high-priority {move} drop-nw {move-type} high-priority moves} {moves n-drop {move} drop-n {move-type} high-priority {move} drop-ne {move-type} high-priority moves} {moves e-drop {move} drop-e {move-type} high-priority {move} drop-se {move-type} high-priority moves} {moves s-drop {move} drop-s {move-type} high-priority {move} drop-sw {move-type} high-priority moves} {moves m-drop {move} clear-e {move-type} normal-priority {move} clear-f {move-type} low-priority moves} {pieces {piece} M {drops} m-drop {piece} tw {drops} w-drop {piece} zw {piece} ww {piece} bw {piece} tn {drops} n-drop {piece} zn {piece} wn {piece} bn {piece} te {drops} e-drop {piece} ze {piece} we {piece} be {piece} ts {drops} s-drop {piece} zs {piece} ws {piece} bs pieces}
      
      







優先床が高い 通垞 堎合、コヌドは敵のデッドグルヌプclear-eを削陀し、䜎い low -デッドグルヌプを削陀したす 高レベル、優先リスト倖、通垞のボヌドぞの石の远加のために予玄したす。 これですべおが正垞に機胜するようになりたした。 たず、ムヌブゞェネレヌタヌは優先床の高いclear-eを実行しようずし、最埌に远加された石が環境に入ったかどうかを確認したすこれが発生した堎合、ムヌブを犁止したす。 優先移動がチェックの1぀に倱敗した堎合、移動ゞェネレヌタヌはすべおの倉曎をロヌルバックし、䜎優先床clear-fを満たしたす。 このコヌドは垞に成功したす。 実装の副䜜甚ずしお、「自殺」グルヌプが削陀されるこずがありたす。



クリヌンアップコヌドも耇雑です
 : clear-e ( -- ) 0 captured-count ! here a1 = verify drop ['] my-enemy? init-alive proceed-alive check-zombies capture-all captured-tiles @ 0> verify captured-tiles @ update-variables ['] my-friend? init-alive proceed-alive check-zombies check-not-captured add-move ; : clear-f ( -- ) 0 captured-count ! here a1 = verify drop ['] my-friend? init-alive proceed-alive check-zombies capture-all captured-tiles @ 0> IF captured-tiles @ NEGATE update-variables ELSE DROP ENDIF add-move ;
      
      







䞀般に、少し混乱したすが、動䜜したす。



コノゎなし



さお、もう1぀の難しいケヌスがありたす。これは、より䌝統的なバヌゞョンのゲヌムから継承されたものです。 すでに述べたように、ボヌドの面ではGoのすべおのルヌルが有効なたたなので、次のトリックを実行するこずは非垞に可胜です。







どうにかこの楜しさをすべお壊さなければ、プレむダヌはお互いの石を無期限に食い尜くす機䌚を埗るでしょう。 もちろん、MarGoはこれを蚱可できず、前の䜍眮の繰り返しに぀ながる動きを犁止したす。 ゲヌムのルヌルでは 、私たちは状況のスヌパヌコに぀いお話しおいたす。







黒人はすぐに癜い石を食べるこずができず、ボヌドの別の郚分に歩かされたす。 次は、癜が接続できたす。



芋えない人生
悲しいかな、私は䜍眮的たたは状況的スヌパヌコの怜出を実珟できたせん。 これには以前の䜍眮に関する情報少なくずもハッシュが必芁ですが、私にはありたせん 幞いなこずに、これらすべおの「 呚期的な子 」、「 氞遠の呜 」、および他の異囜的な地䜍は倩気を悪化させたせん。 実際のKoファむトでは、ほずんどの堎合、 単玔なKoが衚瀺されたす。 圌を捕たえたす。



「空」ポむントぞの移動を犁止するには、空にしないようにする必芁がありたす
 : drop-marks ( -- ) 0 BEGIN DUP captured-count @ < IF mark OVER captured[] @ create-piece-type-at 1+ FALSE ELSE TRUE ENDIF UNTIL DROP ; : clear-marks ( -- ) 0 BEGIN DUP empty-at? NOT IF DUP piece-type-at mark = IF DUP capture-at ENDIF ENDIF 1+ DUP PLANE >= UNTIL DROP ;
      
      







非衚瀺のタむルをボヌドに配眮しお、遞択した䜍眮に移動できないようにするこずができたす。 蚱可されたポむントぞの移動を実行する堎合、これらの干枉を単に陀去したす。 ここでは、MarGoの重芁な特性の1぀が私たちの手に枡っおいたす。 共同戊闘は垞にボヌドのベヌスの平面で発生したす 远加された「空の」タむルがグルヌプのステヌタスの決定に干枉しないように、ノヌドの無効を決定する関数を倉曎したす。



 : my-empty-at? ( pos -- ? ) DUP curr-pos ! - empty-at? IF + DUP empty-at? SWAP piece-type-at mark = OR IF TRUE ELSE ... ENDIF ;
      
      





ボヌドに共同マヌキングを远加するこずは残っおいたす。 敵の陀去された石の代わりにこれを行いたす。この石が陀去されなかった堎合、「自己砎壊された」グルヌプは新しく远加されたちょうど1぀の石で構成されたす。 耇雑に聞こえたすか 䞀般的には、そうです。



背埌には䜕がありたすか



もちろん、すべおが順調に進んだわけではありたせん。 いく぀かのルヌルを実装できたせんでした。 たずえば、MarGoでの自殺行為は絶察に犁止されおいたす。 これは、プレヌダヌがこの動きで敵の石を受け取らない限り、最埌のダムのグルヌプおそらく远加されたばかりの1぀の石だけで構成されるを奪う動きをする暩利がないこずを意味したす。



私は石を远加する動きず取られた石を取り陀く動きを分離せざるを埗ず、「自殺」の動きを犁止する可胜性を奪われたした。 これは些现なこずのように思えるかもしれたせん。 最終的に、Go ルヌルのほずんどのバリ゚ヌションでは「自殺的」な動きは犁止されおいたすが、Ingaルヌルでは蚱可されおいたす。 これには十分な理由がありたす。 自分のグルヌプを殺すず、プレむダヌが完党に絶望的な状況で脱出できる非垞にたれなポゞションがありたす。











関はポむントを獲埗したせんが、グルヌプの完党な損倱ず比范するず、敵もポむントを獲埗できないため、これは深刻な助けです 残念ながら、䞀方が他方を匕っ匵りたす。Goずは異なりMarGoでは、プレむダヌは移動をスキップできたせん。しかし、䞀床絶望的な状況に陥った堎合、プレヌダヌはほずんどの堎合、新しく远加された石の自殺に぀ながる動きをするこずができたす。パスでない堎合、これは䜕ですかこれも犁止できたせん



いずれにせよ、これらの違いはそれほど重芁ではないので心配する䟡倀がありたした。 AIははるかに悪い。珟圚の実装では、単に存圚したせんこのアプリケヌションは、2人でプレむしたり、スケッチを分析したりするための「むンテリゞェントな」ボヌドずしお䜿甚できたすが、それで遊ぶこずはできたせん。 Go for AIの耇雑さでさえありたせんZoG開発者はDLL゚ンゞンを䜿甚する必芁があり、あたりうたく機胜したせん。 AIに぀いお考える前に、少なくずもスコアリングロゞックを実装する必芁がありたす。



囲gameゲヌムの目暙は、敵の石を「食い尜くす」こずではなく最埌たでカりントされたすが、領土を占領するこずですこれが䞭囜のルヌルずどのように異なるかに぀いお、私はここに曞きたしたプレむダヌの領土はすべお空のポむントず芋なされ、自分の色の郚分にのみ到達できたす。 MarGoはこの抂念を拡匵したす。ボヌドの平面にある領土の䌝統的なポむントに、4぀の色の石で構成される「サむト」にポむントが远加されたす。考えおみるず、これも領土です。これらのポむントでは、石を眮くこずができ、それらから自分の石だけに「取埗」できたす。私はそのようなアむテムが名誉ではないこずを匷調したすラむフグルヌプは、ボヌドの平面にある無料のアむテムのみを提䟛したす。











このように定矩された領域を数えるこずは耇雑ですが、かなり解決可胜です。残念ながら、これはこれに限定されたせん。 MarGoは、プレむダヌが「朜圚的に」埋めるこずができるポむントを領土に远加したす。たずえば、プレむダヌが自分の色の16ピヌスで構成される4x4の正方圢を持っおいる堎合、圌の「サむト」に4぀の石を配眮するこずができたす別の石のために新しい領域を圢成したす。さらに、最初の4x4正方圢が塗り぀ぶされおいない堎合、その内郚ポむントもテリトリヌに远加されたす。これはすべお理にかなっおいるように思えたすが、これたでのずころ、ForthScriptでこのようなタスクに取り組むこずさえ恐れおいたす。











捕獲された石を数えるこずも難しい仕事です。もちろん、ゲヌム䞭にキャプチャされた石に加えお、「ゟンビ」が远加されたす倧䞈倫、あなたはそれらを数えるこずができたす。 。通垞、スコアリングの前に、プレむダヌは「デッド」グルヌプを手動で削陀する機䌚が䞎えられたすが、ZoGではこれはただ挑戊です



これらの問題をすべお解決できたずしおも、このゲヌムに少なくずも䜕らかの圢で匷力なAIを実装できるずいうわけではありたせん。おそらく詊しおみる䟡倀はありたすが




All Articles