キャスティングできるかどうかが常にわからないチェス AI があります。ルークとキングには移動カウンターがあり、移動カウンターの値がゼロの場合にのみ城に参加できます。移動カウンターがゼロで、城を塞いでいる駒がないのに、敵の駒が遠くから城を塞ぐ能力を持っている場合に問題が発生します。
たとえば、あなたが白人で、女王側の城を作りたいと想像してみてください。移動カウンターが 0 であるため、あなたの駒は 0 回の移動を行い、ホワイト ナイト、ビショップ、クイーンはなくなりました。あなたはキャスティングできると思います。しかし、白のルークと白の王がいる最初の列まで伸びる明確な攻撃線を持つ敵のルークがあるため、実際にはキャスティングできません。キャスリングした場合、王は黒ルークの攻撃線を越えなければなりません。あなたはAIであり、この状況はあなたを台無しにしました。
これで、あなた [人間] は、キャスリングに関して [AI] をより賢くする方法を知っているかもしれません。プログラマーとして、AI がこの間違いを犯さないように、この問題をどのように修正しますか?
ここにいくつかの詳細情報があります... 私のボード表現は int board[8][8] です。可能なすべての白いピース [最大 2 つのクイーン、合計 17 ピース] を保持する配列、int whitePieces[17]、およびすべての可能な黒いピースを保持する配列 int blackPieces[17] があります。また、動きを追跡するために、moveTo[] 配列と moveFrom[] 配列があり、各層について、移動後と移動前の移動ピースのコピーが含まれています。ピース整数の右端のビットが y 値で、その 1 つ上にある 4 ビットの 16 進数値が x 値です。整数ピースには、ピースの種類、ピースの色、whitePieces 配列または blackPieces 配列内のピースの位置を表すバイト データ、および移動回数を追跡し、キングまたはルークかどうかを判断するために使用される移動カウンターも含まれます。が移動したため、キャスティングできません。