そこで、ヘキサポーン ゲームを作成し、ボードが勝利状態にある場合に True を返す関数を作成しようとしています。現時点では次のようになります。
checkWin :: BoardState -> Bool
checkWin b1@(blackPieces,whitePieces,turn,size,win)
|(length blackPieces) == 0 = True
|(length whitePieces) == 0 = True
|length (generateMoves b1) == 0 = True
|otherwise = False
したがって、これは、黒または白のピースが残っていない場合、または誰も移動できない場合に機能しますが、反対のポーンがボードの端に到達した場合は機能しません (ヘキサポーンで勝つ別の方法)。変数blackPiecesとwhitePiecesは座標のリスト、すなわち [(1,1),(2,1),(3,1)] で、サイズnのボード上でこれらのポーンがどこにあるかを示します (その白がターンする場合、ターンは true です)。
これらの条件をメソッドに追加したくなりましたが、コンパイラはそれを気に入りませんでした。
|(_,1) `elem` whitePieces = True
|(_,size) `elem` blackPieces = True
「 2番目の要素が1である(つまり、ボードの反対側に到達した)whitePiecesにタプルはありますか」と言う他の方法はありますか?
有益なコメントをお寄せいただきありがとうございます。