0

ゲームの名前はwizwozです。

赤(rと呼ばれる)と金(gと呼ばれる)の2人のプレーヤーは、最初に2つの値nとkを選択します。n×nのボードは、ボード上にランダムに配置されたk"r"とk"g"で作成されます。プレーヤーrから始めて、各プレーヤーはボード上の空の四角の1つに自分の文字(プレーヤーrの場合は「r」、支払人gの場合は「g」)を置きます。ボードがいっぱいになると、各プレイヤーのスコアは、そのプレイヤーの色で塗りつぶされたボード上の最大の接続領域に等しくなります(接続領域とは、領域内の任意の2つの正方形に対して、N / S/Eのみで構成されるパスが存在する領域です。 / Wが移動します)。スコアが最も高いプレイヤーが勝ち、自分のスコアと他のプレイヤーのスコアの差が与えられます。完成したゲームの2つの例を以下に示し、各プレーヤーの最大の接続領域の概要を示します。

ここに画像の説明を入力してください

アルファベータ法のアルゴリズムを作成していて、評価関数を使い続けています。

何か助けはありますか?擬似コードが望ましい。

4

1 に答える 1

1

本当にシンプルな評価関数から始めましょう。たとえば、最大のコンポーネントの現在のサイズを使用します。AIが機能するようになったら、評価ヒューリスティックの調整について心配することができます。

これがpseduocodeの例です(テストされていません)

components = {k:set([k]) for k in board}
def contract(k1, k2):
    if color(k1) != color(k2):
        return
    new = components[k1]
    if k2 not in new:
        new.union_update(components[k2])
        for x in components[k2]:
            components[x] = new

for x,y:
    contract(board[x,y], board[x,y+1])
    contract(board[x,y], board[x+1,y])

return max(map(len, components))
于 2012-10-30T05:16:03.570 に答える