Dagaz:常識へのキック(パート7)

画像 -あなたの主な罪を知っていますか?

-一体何? 私は7つすべてを崇拝しています...

しかし、今...私は怒りを口にする準備ができています!



マルコム・レイノルズ「 Mission Serenity





私個人の「 トラブルレーティング 」は急速に完了に向かっているため、 Zillions of Gamesから必要な動作を取得することがますます困難になっています。 一部のルールは非常に簡単に定式化できますが、開発者に大量の血を流します。 「怒りのルール」もその一つです。



4.性交のために!



ボードからピース(自分自身または対戦相手)を削除する機能は非常に便利です。 例のために遠くに行く必要はありません。 Martin GardnerのMathematical Leisureで説明されているゲームFocusについてはすでに書いています。 それをプレイすることは簡単ではありませんが、ゲームの喜びは、2番目のプレーヤーのための非常に単純なwin-win戦略があるという事実によって幾分影が薄くなります。 ボードの中心に対して対称的に各対戦相手の動きを繰り返すと、彼はゲームを無期限に引きずることができます。







それぞれの動きで、2番目のプレーヤーは前の動きで壊れた中央の対称性を復元します。 ピースは対角線に沿って移動できないため、最初のプレーヤーは取り返しのつかない(1回の動きで)対称性を破ることができず、したがって、相手は負けず、すべての動きを正確に繰り返します。 明らかに、この欠点は、元の図形の対称配置に違反することによってのみ克服できます。



最初の動きとして、各プレーヤーはボードから1つのピースを削除できます(もちろん、2番目のプレーヤーは、1番目のプレーヤーが行った動きに対して対称に位置するピースを削除することを禁止する必要があります)。 ZRFでは、ボードからいくつかのピースを削除することだけに制限される動きを形成する可能性はありませんが、チートすることができます。 このコードは、目的の結果を生成します。



図形を削除する
(define capture-enemy ( (verify enemy?) (verify (not is-protected?)) mark sym (set-attribute is-protected? true) back capture add )) ... (piece ... (drops (move-type capturing) (capture-enemy) ) )
      
      







ここでsymは、ボードのフィールドを対称的にペアで接続する方向です。 実際、削除はしませんが、特定の補助部品をボードに配置します。 以前にターゲットフィールドに配置されていた図は自動的に削除されます。 追加コマンドで移動を完了する前に、 キャプチャコマンドで追加された図自体を削除します。 ZSG表記では、この動きは次のようになります。



 1. White t e6 x e6
      
      





敵の色を自分のものに変更することでフィギュアを「切り替える」のはさらに簡単です(上記のコードスニペットのキャプチャコマンドをコメントアウトするだけです)が、最初の待ち伏せはここにあります。 相手の上に自分のフィギュアを置くことができますが、その逆はできません! ZoGでは、自分の作品だけで遊ぶことができます。 幸いなことに、この場合、これはあまり重要な制限ではありません。 ボードから自分のピースを自発的に削除すること(さらには敵のピースと交換すること)は得策ではありません。 敵に貴族と同じように振る舞わせることはできないので、ゲームの最初に巨大な不均衡が生じます。









もちろん、「フォーカス」だけが、任意のピースの除去を実行する動きが求められるゲームではありません。 前世紀の30年代、ソビエト連邦ではシャーボーイゲームが積極的に推進され、競技場の数字は歩兵、航空、大砲の力を象徴していました。 このゲームの大砲は、文字通り「現場を離れない」敵のフィギュアを破壊する可能性があるため、恐るべき力でした。 これはゲームのバランスを完全に台無しにする可能性がありますが、問題は非常に独創的な方法で解決されました。



ボードの反対側の端に到達したこのゲームの「フットマン」の最も弱いフィギュアは、他のフィギュアに変わりませんでした。 実際、敵のキャンプに到着した歩兵が戦車または飛行機に変わった場合、ゲームは非常に奇妙に見えたでしょう(「本部」は言うまでもありません)。 戦場全体を通過した後、「歩兵」はボードから削除されましたが、「妨害」を実行する権利がありました-敵の選択したフィギュアをボードから削除するために(もちろん「本部」を除く)。 別の規則では、「歩兵」がボードの黒いフィールド(他のピースで占められていない)を飛び越えることができ、それにより砲兵の障壁を効果的に「漏れる」ことができました。











「三目並べ」とドラフトファミリーのゲームとの間の移行形態である「 ミルズ 」のさまざまなバージョンでは、彼のチップを3つ並べると、敵の任意のピースの除去が実行されます。 ゲームの開始時に、プレーヤーに属するチップは空のボード上に交互に配置され、その後、ボードのラインに沿って移動できます。 既存のZoG実装では、対戦相手の駒を取り除くことは、「ミル」(3つのチップの列)を構築する動きと組み合わされます。



工場で任意の数字を撮る
 (define take-piece a1 (while (on-board? next) (if enemy? mark (not-in-a-mill ns) back (if (flag? eatit) (not-in-a-mill ew) back (if (flag? eatit) (not-in-a-mill in out) back (if (flag? eatit) capture add (set-flag writeit false) ) ) ) ) next ) ) (define check-mill (set-flag mill false) (check-dir1 ns)(check-dir2 ns)(check-dir3 ns) (check-dir1 ew)(check-dir2 ew)(check-dir3 ew) (check-dir1 in out)(check-dir2 in out)(check-dir3 in out) to (if (flag? mill) (take-piece) ) ) (define shift ( mark $1 (verify empty?) (set-flag writeit true) (check-mill) (if (flag? writeit) add ) ) )
      
      







writeitフラグの使用に注意する価値があります。 チップの移動( shift )のマクロ内での(サイレントコマンド)移動( addコマンドによる)は、敵のチップを削除するオプションが見つからなかった場合にのみ発生します。 次に、 テイクピースマクロでのキャプチャ後に実行される各追加コマンドにより、独立した移動オプションが形成されます(「サイレント」移動の形成は禁止されます)。



これは「Mill」アルゴリズムの非常に興味深い実装であり、残念ながら、このゲームで起こりうるすべての状況をカバーしているわけではありません。 ルールのいくつかのバリエーションによると、チップのいくつかの列の同時整列は、対応する数の敵チップを除去する能力を提供するはずです。 上記のアルゴリズムでこの問題を解決しようとすると、「組み合わせ爆発」につながります。 同様のアフリカのゲームSwampの 実装では 、別のアプローチを取ることにしました。



沼でフィギュアをキャプチャする
 (define my-friend? (and (in-zone? inner $1) (not (position-flag? from? $1)) (friend? $1) ) ) (define check-side (set-flag is-checked? false) (if (my-friend? $1) mark $1 (if (my-friend? $1) (set-flag is-checked? true) (set-flag is-accepted? false) (set-position-flag is-marked? true $2) (set-position-flag is-marked? true $3) $1 (set-position-flag is-marked? true $2) (set-position-flag is-marked? true $3) ) back (if (flag? is-checked?) (set-position-flag is-marked? true $2) (set-position-flag is-marked? true $3) ) ) ) (define check-middle (if (and (my-friend? $1) (my-friend? $2)) (set-flag is-accepted? false) mark $1 (set-position-flag is-marked? true $3) (set-position-flag is-marked? true $4) $2 $2 (set-position-flag is-marked? true $3) (set-position-flag is-marked? true $4) back (set-position-flag is-marked? true $3) (set-position-flag is-marked? true $4) ) ) (define shift-man ( (set-position-flag from? true) (verify (in-zone? inner)) $1 (verify (in-zone? inner)) (verify empty?) (set-flag is-accepted? true) (check-side $1 $2 $4) (check-side $2 $3 $1) (check-side $4 $1 $3) (check-middle $2 $4 $1 $3) (if (not-flag? is-accepted?) mark a0 (while (on-board? next) next (if (and enemy? (position-flag? is-marked?)) (set-attribute is-capturing? true) ) ) back ) add )) ... (piece (name Man) ... (attribute is-capturing? false) (drops (move-type droptype) (drop-man) ) (moves (move-type normaltype) (shift-man nesw) (shift-man eswn) (shift-man swne) (shift-man wnes) ) )
      
      







このゲームでは、3つのフィギュアのシリーズと「ミル」を構築することにより、敵のフィギュアと戦うことができますが、敵のフィギュアと戦うことはできません。 これが何を意味するのかを理解するために、私は次の記録からこのゲームのゲームをプレイしなければなりませんでした。 この表記の品質はひどいものだとすぐに言わなければなりません。 私の知らない本からのスキャンは、認識エラーをクリーンアップすることを気にしませんでした。 しかし、目の前にボード置いて、ゲームのコース復元することができました (プレイヤーの動きのいくつかは、私には特に賢く見えませんでした)。



上記のコードスニペットは、このバッチの分析に基づいています。 チェックサイドマクロとチェックミドルマクロは、トリプルの形成をチェックするだけでなく、「戦闘中」のフィールドをマークされたフラグでマークしますか? 。 すべてのフラグ(位置フラグを含む)は各ターンの開始時に自動的にクリアされるため、コース計算の最後に「ガベージクリーニング」を実行する必要はありません。 同じ理由で、 is-capturing属性を設定することで、フィギュアの戦いについて受け取った情報を次のターンに転送する必要がありますか? 。 次の動きでは、この属性が設定されているすべての図形を削除できます。 このアプローチは私にとってより柔軟で、さらに、Millによって形成される可能性のある動きの長いリストから選択するよりも、個別の動きによって作られたピースを削除する方が明白です。







別のアフリカのゲームの 実装からグラフィックリソースを取得しました。 状況は完全に逸話的でした。 ゲームアルゴリズムをほぼ完全に実装したとき、ZoGは驚きをもたらしました。



 (loss-condition (White Black) (pieces-remaining 2))
      
      





「Swamp」のパーティーは、空のボードにピースをペアで設置することから始まります。 上記の行は、いずれかのプレイヤーが2番目のピースを追加したときにゲームを完了しました。 ボードにピースを追加する段階ですでにZoGによってピースが考慮されるように、1回限りの「リザーブ」を実装する必要がありました。 「予備」のボードを引いてセットアップする力がなくなったため、ヨータイから適切なボードの定義を取りました。



ちなみに、養体は今日の会話のトピックにも適合します。 このゲームはチェッカーのようなものです。 その中のキャプチャは、敵のフィギュアを通常の「ジャンプ」することによって実行されます。 チェッカーの場合と同様に、ターンごとに複数のキャプチャが「チェーンで」許可されます。 違いは、撮影された各ピースについて、プレーヤーは別の (任意の)相手のピースを取得する権利を持っていることです。 このような「肯定的なフィードバック」は、すぐに得られた利益が勝利につながるという事実につながり(このゲームでは引き分けはまれです)、ゲームの性質はアフリカ大陸の気質の住民に非常に適しています。



しかし、そのようなルールはエキゾチックなゲームでのみ見つかると考えるべきではありません。 子供の頃にチェッカーをした人の多くは、戦いの可能性を「逃した」ピースを「雌犬のために」ボードから取り除くことができるというルールをおそらく覚えています。 この規則は決して「ロシアの草案」の発明ではありません! 同様に、English Checkersでフィギュアを「ハフ」できます。 多くの研究者は、そのような「怒りのルール」がすべてのチェッカーゲームの先駆者であるAlcuirkeにすでに存在していたことに同意します。











「怒りのルール」自体に関して、歴史はほとんど明白な文を通過しました。 このルールをチェッカーに適用すると、少なくとも複雑なコンビネーションゲームを持つことはほぼ不可能になります。 実際、ほとんどの場合、プレイヤーが1つのピースを「偽物のために」与えるほうが、trapに誘惑するよりもはるかに利益があります。 当然のことながら、ほとんどの最新のチェッカーでは、「怒りのルール」が排除されています。



現在、 ガーナ共和国の領土で演じられているダミイなどの一部のアフリカ版でのみ使用されています。 他の多くのアフリカのゲームと同様に、このバージョンのチェッカーは「スピード」と「あくび」でプレイされます-戦術の重要な要素です。 それ以外の場合、ダミイの規則は国際草案に似ています。



一種の「知的体操」として、私はZRFに「あくびを伴う」チェッカーを実装することにしました。 最初のステップは明らかでした-プレーヤーは選択の自由を最大限に確保する必要があるため、テイクの優先順位、多数決ルールをオフにし、テイクチェーンの中断を許可しました。 このゲームでは、プレーヤーは対戦相手の駒 「食べる」 義務はありませんが、チェッカーが「栄養不足」の場合、対戦相手はそれらのいずれかをボードから削除する権利があります。 「怒りのルール」に該当する数字は、属性でタグ付けすることにしました。 すぐに次の単純なアルゴリズムが形成されました。



  1. 彼のターンの終わりに、すべての対戦相手のピースについて、彼のピース(戦闘を完了することができるピース、属性でマークする)と戦う可能性を確認します
  2. 敵がキャプチャを取得したら、すべてのピースの属性をクリアします(静かな動きをするとき-属性に触れないでください)
  3. 対戦相手のフィギュアのいずれかが属性でマークされている場合、それを取ります(他のすべてのフィギュアの属性をクリアした)
  4. あなたの次の一歩を踏み出す


紙の上ではすべてがスムーズでした。 もちろん、ZoGはすぐに調整を始めました。 ZRFで多少複雑なものを実装する際に最初に対処する必要があるのは、移動する形状のあまり明確ではないモデルです。 移動が終了するまで、ZoGの数字はその初期位置に「そのまま」残り、ほとんどの場合、悪魔的に不便です。 開始フィールドは「本当に」空であり、最後のフィールドは移動した図で埋められていることを「覚えておく」必要があります。 結果は次のマクロです。



ファイティングZoG
 (define my-friend? (and (not (position-flag? from? $1)) (or (position-flag? to? $1) (friend? $1) ) ) ) (define my-empty? (and (not (position-flag? to? $1)) (or (position-flag? from? $1) (empty? $1) ) ) )
      
      







もちろん、位置フラグは? そしてへ? また、正しく入力する必要があり、マクロ自体最終バージョンにすぐには到達しませんでした 。 次は、マークされた形状を削除する問題でした。 「for fuk」のピースを受け取ったプレイヤーは、相手にムーブを渡すことなく、別のムーブを実行する必要があります。 私はターン順で移動の順序を変更したくありませんでした(これには理由がありました)。特別な不可視のピースをフィールドに配置することにより、後続の移動の可能性をブロックすることにしました(通常の移動の最後に削除されます)。 プレーヤーが移動をスキップできるようにするには、対応するオプションをアクティブにする必要がありました。



 (option "pass turn" forced)
      
      





さらに、一方が他方を引っ張った。 「 パスターン 」オプションは、プレーヤーの動きをスキップする機能を制御します(つまり、生成された動きのリストに空のパスを追加します-pass )。 値を「 forced 」に設定すると、そのアクションはさらにトリッキーになります。他の可能な動きがない場合にのみパスが可能です(この場合、スキップは自動的に実行されます)。 残念ながら、その性質上、このオプションは次のゲーム終了条件と完全に互換性がありません。



 (loss-condition (First Second) stalemated)
      
      





そして、これは非常に悪いことです。なぜなら、プレーヤーの敗北によるゲームの終了は、動きの可能性がない場合、チェッカーのほとんどの主要なことだからです。 別の、より理想的な世界のどこかで、次のデザインが機能することを望みます(ただし、これらは空の夢です)。



 (loss-condition (First Second) (and stalemated (total-piece-count 0 Lock) ) )
      
      





「手動で」移動をスキップする必要がありました。 実際、それは思ったほど怖くはありません 。 必要なのは、プレーヤーがクリックする「ボタン」を実装し、「スキップ移動」を実行することです。 フィールドa8 (64セルボード上)は、その配置に適した場所です(通常のピースが入らないため)。 実際にはマイナスが1つあります-正直な「 強制ターン 」とは異なり、このボタン自体は「押されません」。 一方、このムーブの処理コードには、クリーニング属性などの追加のロジックを配置できます(現在の実装では必要ありませんでしたが、必ずしも幸運なわけではありません)。 最後に、「 英語の草案 」ですべてがうまくいきましたが、長距離の女性は別の問題です:



ロシアのドラフト(あくび付き)
 (define check-huff (if (and (on-board? $1) (my-friend? $1)) $1 (if (and (on-board? $1) (my-empty? $1)) (set-flag is-huffing? true) ) $2 ) ) (define check-huff-2 (set-flag is-huffing? false) (if (and (on-board? $1) (empty? $1)) $1 (check-huff $1 $2) $2 ) (if (and (flag? is-huffing?) (not is-huff?)) (set-attribute is-huff? true) ) ) ... (define check-huff-6 (set-flag is-huffing? false) (if (and (on-board? $1) (empty? $1)) $1 (check-huff-5 $1 $2) $2 ) (if (and (flag? is-huffing?) (not is-huff?)) (set-attribute is-huff? true) ) ) (define check-long-enemies (set-position-flag to? true) mark a0 (while (on-board? next) next (if enemy? (if is-huff? (set-attribute is-huff? false) ) (check-huff-1 sw ne) (check-huff-1 se nw) (check-huff-1 ne sw) (check-huff-1 nw se) (if (piece? King) (check-huff-2 sw ne) (check-huff-2 se nw) (check-huff-2 ne sw) (check-huff-2 nw se) (check-huff-3 sw ne) (check-huff-3 se nw) (check-huff-3 ne sw) (check-huff-3 nw se) (check-huff-4 sw ne) (check-huff-4 se nw) (check-huff-4 ne sw) (check-huff-4 nw se) (check-huff-5 sw ne) (check-huff-5 se nw) (check-huff-5 ne sw) (check-huff-5 nw se) (check-huff-6 sw ne) (check-huff-6 se nw) (check-huff-6 ne sw) (check-huff-6 nw se) ) ) ) back ) (define king-jump ( (check-lock) (set-position-flag from? true) (while (empty? $1) $1 ) (verify (enemy? $1)) $1 (set-position-flag from? true) (verify (empty? $1)) $1 (while empty? (clear-enemy-huffs) mark (while empty? (opposite $1) ) (verify enemy?) capture back (clear-huffs) (clear-lock) (set-flag more-captures false) (king-captured-find $1) (king-captured-find $2) (king-captured-find $3) (if (flag? more-captures) (set-attribute is-huff? true) (add-partial jumptype) else (check-long-enemies) (set-attribute is-huff? false) (add-partial notype) ) $1 ) )) (define king-shift ( (check-lock) (set-position-flag from? true) (while (empty? $1) (clear-enemy-huffs) $1 (check-long-enemies) (clear-lock) add ) ))
      
      







このオプションは、女性になるまで機能しました。 女性たちは神秘的にふるまいました:







謎は簡単に解決されました。 長距離の女性は、ルートに沿った任意のフィールドに立ち寄ることができるため、それぞれについて、敵のフィギュアによる戦闘の可能性のチェックを実行する必要があります。 h8のダムのフラグは、黒いダムがフィールドb2を通過したときに設定されましたが、ループの次の反復の開始時にリセットされなくなりました。 属性値を持つ同様のゲームは、ループ生成サイクルに場所がありません。 繰り返しになりますが、古き良き「コピー&ペースト」が助けになりました。



修正された実装
 (define king-jump-1 ( (check-lock) (set-position-flag from? true) (while (empty? $1) $1 ) (verify (enemy? $1)) $1 capture (set-position-flag from? true) $1 (verify empty?) (clear-huffs) (clear-lock) (set-flag more-captures false) (king-captured-find $1) (king-captured-find $2) (king-captured-find $3) (if (flag? more-captures) (set-attribute is-huff? true) (add-partial jumptype) else (check-long-enemies) (set-attribute is-huff? false) (add-partial notype) ) )) ... (define king-jump-6 ( (check-lock) (set-position-flag from? true) (while (empty? $1) $1 ) (verify (enemy? $1)) $1 capture (set-position-flag from? true) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) (clear-huffs) (clear-lock) (set-flag more-captures false) (king-captured-find $1) (king-captured-find $2) (king-captured-find $3) (if (flag? more-captures) (set-attribute is-huff? true) (add-partial jumptype) else (check-long-enemies) (set-attribute is-huff? false) (add-partial notype) ) )) (define king-shift-1 ( (check-lock) (set-position-flag from? true) $1 (verify empty?) (check-long-enemies) (clear-lock) add )) ... (define king-shift-7 ( (check-lock) (set-position-flag from? true) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) $1 (verify empty?) (check-long-enemies) (clear-lock) add )) (variant (title "Russian Checkers (with huffs)") ; (option "maximal captures" true) ; AI Bug ; (option "pass partial" false) (piece (name Checker) (image First "images/wiedem/CheckerWhite.bmp" Second "images/wiedem/CheckerBlack.bmp") (attribute is-huff? false) (drops (move-type normaltype) (capture-huff) ) (moves (move-type jumptype) (long-checker-jump nw sw ne) (long-checker-jump ne se nw) (long-checker-jump sw se nw) (long-checker-jump se ne sw) (move-type normaltype) (long-checker-jump nw sw ne) (long-checker-jump ne se nw) (long-checker-jump sw se nw) (long-checker-jump se ne sw) (long-checker-shift nw) (long-checker-shift ne) (move-type notype) ) ) (piece (name King) (image First "images/wiedem/CheckerKingWhite.bmp" Second "images/wiedem/CheckerKingBlack.bmp") (attribute is-huff? false) (moves (move-type jumptype) (king-jump-1 nw sw ne) (king-jump-1 ne se nw) (king-jump-1 sw se nw) (king-jump-1 se ne sw) (king-jump-2 nw sw ne) (king-jump-2 ne se nw) (king-jump-2 sw se nw) (king-jump-2 se ne sw) (king-jump-3 nw sw ne) (king-jump-3 ne se nw) (king-jump-3 sw se nw) (king-jump-3 se ne sw) (king-jump-4 nw sw ne) (king-jump-4 ne se nw) (king-jump-4 sw se nw) (king-jump-4 se ne sw) (king-jump-5 nw sw ne) (king-jump-5 ne se nw) (king-jump-5 sw se nw) (king-jump-5 se ne sw) (king-jump-6 nw sw ne) (king-jump-6 ne se nw) (king-jump-6 sw se nw) (king-jump-6 se ne sw) (move-type normaltype) (king-jump-1 nw sw ne) (king-jump-1 ne se nw) (king-jump-1 sw se nw) (king-jump-1 se ne sw) (king-jump-2 nw sw ne) (king-jump-2 ne se nw) (king-jump-2 sw se nw) (king-jump-2 se ne sw) (king-jump-3 nw sw ne) (king-jump-3 ne se nw) (king-jump-3 sw se nw) (king-jump-3 se ne sw) (king-jump-4 nw sw ne) (king-jump-4 ne se nw) (king-jump-4 sw se nw) (king-jump-4 se ne sw) (king-jump-5 nw sw ne) (king-jump-5 ne se nw) (king-jump-5 sw se nw) (king-jump-5 se ne sw) (king-jump-6 nw sw ne) (king-jump-6 ne se nw) (king-jump-6 sw se nw) (king-jump-6 se ne sw) (king-shift-1 ne) (king-shift-1 nw) (king-shift-1 se) (king-shift-1 sw) (king-shift-2 ne) (king-shift-2 nw) (king-shift-2 se) (king-shift-2 sw) (king-shift-3 ne) (king-shift-3 nw) (king-shift-3 se) (king-shift-3 sw) (king-shift-4 ne) (king-shift-4 nw) (king-shift-4 se) (king-shift-4 sw) (king-shift-5 ne) (king-shift-5 nw) (king-shift-5 se) (king-shift-5 sw) (king-shift-6 ne) (king-shift-6 nw) (king-shift-6 se) (king-shift-6 sw) (king-shift-7 ne) (king-shift-7 nw) (king-shift-7 se) (king-shift-7 sw) (move-type notype) ) ) )
      
      







私の試行はこれで終了し、「あくびを伴うロシアの草案」の正しい動作する実装を得たように見えるかもしれませんが、それはそれほど単純ではありません。 まず、「 最大キャプチャ 」オプションを含めると、以前の記事のいずれかで説明したバグが復活しました。 ゲームのある時点で、AIの制御下で、プログラムは独自のピースを使用する可能性を停止しました(そして、敵のチェックを実行するコードがこの可能性を認識したため、彼はチェッカーを文字通り「偽造」しました)。



Checkers Collectionで同様のバグに対処する方法をすでに学習し、対応する修正を投稿しましたが、何らかの理由でこの方法は「あくびあり」バージョンでは機能しませんでした。











しかし、これは問題の一部にすぎません。 上の図では、白人の女性はd6f6のピースを取り、 h8の戦いの対象となります。 もちろん、彼女は静かな動きをするか、その場に留まることで「あくび」することができますが、この場合、彼女は「愚か者のために」取られることができます。 困難は、技術的な手段によって、白人女性に戦いを続けるよう「強制」することができないという事実にあります。 彼女はf4またはg3に移動できますが、マーク「あくび」は削除されます。 ZRFにいくつかのことを正しく実装することは単に不可能です。




All Articles