-4
for (int i = 0; i < 3; ++i) {
    for (int k = 0; k < 7; ++k) {
        for (int h = i; h < 4 + i; ++h) {
            result = state.getAt(k, h);
            if (result == 1) {
                ++firstpl;
            }
            if (result == 2) {
                ++secondpl;
            }
            if (firstpl > 0 && secondpl > 0) {
                break;
            }
            //y = k;
        }
        if (firstpl == 0 && secondpl == 0) {
            break;
        } else if (firstpl > secondpl) {
            score += firstpl * firstpl;
            //if(state.getHeightAt(y)-3 < 3) score += 3+firstpl*2;
        } else {
            score -= secondpl * secondpl;
            //if(state.getHeightAt(y)-3 < 3) score -= 3+secondpl*2;
        }

        firstpl = 0;
        secondpl = 0;
    }
}

基本的に私は7×6のグリッドを持っています。私は 7 列を通過し、4 つの連続するブロックごとに垂直に見ています。上に6ブロックあるので。各列には 3 つの 4 つの連続したブロックがあります。State.getAt(k,h) は ax と y を受け取り、値を返します。

4

1 に答える 1

0

この計算を段階的に実行できるようにするこの「状態」の代替表現を見つけられない限り、これを改善できるとは思いません。

また、状態や計算が実際に何を意味するのかを適切に説明できていないため、別のアプローチが実現可能かどうかを判断するのは、あなた以外の誰にも困難です。(そして、私はあなたのコードから意味をリバースエンジニアリングしようとするつもりはありません。)


わかった。Connect4 の場合、勝敗は 7x6 グリッドで水平、垂直、または斜めに 4 つのチェッカーが並んだものです。したがって、スコア状態をカウンターの配列として表すことができます。これは、勝利ラインが作成される可能性のある列、行、および対角線のそれぞれに対応します。(7 + 5 + 4 + 4 = それらの 20 => 20 カウンター) 次に、(x,y) 位置からそれを通過する行のインデックスへの静的マッピングを作成します。ポイント(x、y)にチェッカーを追加すると、カウンターを調べてインクリメントします。チェッカーを外すと…デクリメント。

それがあなたの既存の得点関数にどのように関係しているかはわかりません...しかし、その関数がゲームに勝つ戦略にどのように関係しているかはわかりません。いずれにせよ、上記のアプローチを使用してスコアを段階的に計算できる可能性があります。

于 2013-05-09T05:13:15.573 に答える