一般化された NXN tic-tac-toe をプレイしている場合、ソリューションを明示的に保存して比較することは最も効率的ではありませんが、小さなボードのようなものであり、そのようなコンボは 8 つしかないため、このようにソリューションを明示的に保存しても問題はありません。
より大きな問題は、ストレージ スタイルによっては、ソリューションに関係のないスペースが問題になる可能性があることです。
O - - - O -
X X X vs. X X X
O - O O - O
3x3 状態配列を比較すると、これらは異なります。そのため、この方法では 8 つをはるかに超える終了状態が必要になります。
blank=0, X=1, O=2 の gameState 3x3 配列のようなものを保持していると思いますか?
これらの明示的な比較に加えて、次のようなことができます
win = false
// rows/columns
for i in 0,1,2
if (state[i][0] != BLANK && state[i][0] == state[i][1] == state[i][2]) win = true
#extensible to NxN - all(j == state[i][0] for j in state[i])
if (state[0][i] != BLANK && state[0][i] == state[1][i] == state[2][i]) win = true
#extensible to NxN - all(j == state[0][i] for j in zip(*state)[i])
//diagonals
if (state[0][0] != BLANK && state[0][0] == state[1][1] == state[2][2]) win = true
#extensible to NxN - all(state[j][j] == state[0][0] for j in range(len(state))
if (state [2][0] != BLANK && state[2][0] == state[1][1] == state[0][2]) win = true
win がフラグではなく勝者を格納するようにしたい場合は、win = BLANK を一番上にして、関連する正方形のいずれかの値に設定します。必ずしも必要ではありませんが、勝者は明らかに最新の動きです!
三目並べを書く上で、最もやりがいがあると思うかもしれないが、それほど難しくないと思う部分は、AI だと思います。負けない AI を作成することは、それほど難しくはありませんが、まったく簡単なことではありません (常に少なくとも引き分けを強制することができます)。ときどき負ける可能性のある比較的優れた AI が必要な場合は、ランダム性などを追加する必要があります。