2017-10-24 5 views
0

Connect 4ゲームでの早期タイを検出するアルゴリズムを探しています。今のところ、私はすでにボードがいっぱいであり、勝利は検出されていないかどうかをチェックしていますが、ゲームがネクタイであると推定されるとすぐに知りたいと思います。Connect 4の初期タイ検出

例えば、プレイヤーBがちょうど位置行-5で再生このゲーム、柱-0考える:

| 
    v 
5 | B | | | | | | | 
4 | A | B | A | B | A | B | A | 
3 | A | B | A | B | A | B | A | 
2 | B | A | B | A | B | A | B | 
1 | B | A | B | A | B | A | B | 
0 | A | B | A | B | A | B | A | 
    0 1 2 3 4 5 6 

をそして、ゲームがまだあるので、ネクタイと考えないですプレイヤーBが勝つ方法。行-5、柱-1でプレイヤーがA戯曲場合けれども:この時点で

 | 
     v 
5 | B | A | | | | | | 
4 | A | B | A | B | A | B | A | 
3 | A | B | A | B | A | B | A | 
2 | B | A | B | A | B | A | B | 
1 | B | A | B | A | B | A | B | 
0 | A | B | A | B | A | B | A | 
    0 1 2 3 4 5 6 

、どちらかのプレイヤーが勝つための方法がない:それは引き分けになるだろう。私はこのアルゴリズムを利用者にすぐに通知したいと思います。

+1

これを直接行うには、描画を決定するためのさまざまな基準をテストする必要があります。これまでに何を決めていますか?あるいは、可能な全ての継続を試して勝利への道があるかどうかを見ることができます。あなたは最初に始めるようです。あなたの現在の仕事の状態を詳述してください。 – Prune

答えて

2

ボード上で、水平、垂直、斜め方向に4行の行をすべて確認してください。それらのすべてに少なくとも1つのAと少なくとも1つのBが含まれている場合は、それはネクタイになるでしょう。空とAまたは空とBの組み合わせで構成されているものもある場合(4行A列または4行A行Bの行がないと仮定した場合、すでに勝利した場合)、AまたはBによる勝利は依然として可能です。

あなたはすでに勝利をチェックするコードをすでに持っているでしょうから、Aの4行または空の行か、4行のB行か、 Aの行内、またはBの4列の行である。可能な勝利を検出できなければ、同点は不可避である。

1つのしわは、ボード上に少数の空きスペースがある場合です。この場合、残っている移動数AとBがどれくらいあるかを計算し、計算に空の数が多くなるようにする必要があります。 Aの4列と最大2つの空きを確認してください。例えば、空きスペースが5つ残っていて、Bのターンであれば、Aは2つの動きを残し、Bは3を返します。

1つの空の列が残っていると処理できません。 1人のプレイヤーが連続して4人をスタックすることができますが、プレイヤーが交代しなければならないのでできません。

+0

これはまさに私が探していたようです。私の既存のコードで実装の詳細を試してみましょう。うまくいけば、私はこの答えを受け入れたものとしてマークします。よろしく。 – BobMorane

+0

このアルゴリズムは、正常に実装され、水平のケースに対してユニットテストされました。私は後で他のケースを行い、結果があれば報告しますが、私はこの質問に答えました。 – BobMorane

関連する問題