2012-04-07 8 views
5

たとえば、1人のプレイヤーが4x4ボード(8つの異なるpion)で何らかのアクションを実行した後、すべてのボードをリストできますか?Prologで4x4ボードの可能なすべてのアクションを一覧表示します

パイオンは、たとえば、次のようになります。

([1,2,3,4,5,6,7,8]) 

、あなたは自動的にそれを再利用することができないものをプレイするたびに。

ボードは、それがいっぱいになるまで

([1,1,-,-],(1,2,-,-)...(1,3,-,-)(1,4,-,-) 
[2,1,-,-],(2,2,-,-)...(2,3,-,-)(2,4,-,-) 
[3,1,-,-],(3,2,-,-)...(3,3,-,-)(3,4,-,-) 
[4,1,-,-],(4,2,-,-)...(4,3,-,-)(4,4,-,-) 

とラウンドごとにプレイヤーはボード上の1つのパイ中間子を置くこのボードのようにする必要があります。

答えて

2

あなたは、移動BをMにした後のボードBと移動Mとの間の三項関係である述語を持っていると仮定します。さらに、述語board_move/2ボードをそのボード上で可能な移動に関連づけ、バックトラッキングでは可能なすべての動きを連続的に与える。はい、私はあなたが、ボードでプレイヤーの動きを接続し、その移動が行われてボードの結果「board0_move_board/3」と説明した第一述語を得た

findall(Board, (board_move(Board0, Move), board0_move_board(Board0, Move, Board)), Boards) 
+0

:これらの述部では、あなたが可能なすべてのボードを得ることができますしかし、私は2番目の述語であるboard_move/2..atを最低でもあなたの記述方法で持ちません。また、このように私の述語を記入しなければなりません "move((Color、_)、Board、NewBoardsList): – user1319472

+0

anyone仲間の助けのために? – user1319472

関連する問題