SWI Prologでインタラクティブなテキストベースのconnect4ゲームを作成しようとしていますが、始める方法がちょっと残っています。私が理解できないことは、ゲームボードを表現する方法です。なぜなら、すべてのルールで表示および変更できる配列や変数を持つことはできないと思うからです。ゲームボードをプロローグ内で表現する
どのように開始するかについての洞察は非常に高く評価されます!
SWI Prologでインタラクティブなテキストベースのconnect4ゲームを作成しようとしていますが、始める方法がちょっと残っています。私が理解できないことは、ゲームボードを表現する方法です。なぜなら、すべてのルールで表示および変更できる配列や変数を持つことはできないと思うからです。ゲームボードをプロローグ内で表現する
どのように開始するかについての洞察は非常に高く評価されます!
状況に適したデータ構造を適切に表現することは、PROLOGの問題の半分です。
PROLOGの2次元配列のようにグリッド内のものを表現する方法はたくさんありますが、リスト構造の固有のサポートがたくさんあるので、最も簡単なのはおそらくリストベースであると主張します。
1.リストの一覧。など、3x3の場合、[[a,b,c],[d,e,f],[g,h,i]]
。このストラクチャの解釈は、コード内でトラバースして操作するために固有のものになります(つまり、[a,b,c]
は行または列になる可能性があります。一貫性があります)。個々のセルにアクセスするには、特定の位置をカウントする(または一致させる)述部を使用して構造をトラバースする必要があります。
2.用語リスト。など、[cell(0,0,a), cell(0,1,b), ..., cell(2,2,i)]
。これにより、select(cell(1,2,Value), L, Rem)
などのように個々のセルを直接引き出して、1,2
のセルのValue
をセルのリストL
から抽出して、新しいcell/3
という用語を作成して完全なリストを再作成することができます。 Rem
に追加してください。
assert
/retract
メカニズムを使用してこの問題を処理するコードを書くことをお勧めします。それは面倒で、不必要で、簡単に理解できる「デバッグ可能な」PROLOGコードを書くのには役立ちません。
(私はあなたがthisゲームについて話していることを願っています)。
いくつかの選択肢があります。
[空、空、黄、赤、空]、[赤、赤、黄、黄]、[赤、赤、赤、赤、赤]]。
それとも、撤回/
赤(2、4)のような事実を主張することができます。 赤(1,3)。 黄色(2,2)。 赤(3,2)。
ゲームはシンプルなので、直感的な表現に合ったものを選んでください。
+1アサート/リトラクトを推奨します。 Btw、なぜあなたはオールキャップでPrologを書くのか尋ねてもいいですか? –