Question

The game is named wizwoz:

Two players, red (referred as r) and gold (referred as g) initially select two values n and k. An n × n board is created with k "r" and k "g" randomly placed on the board. Starting with player r, each player puts his/her letter(“r” for player r, “g” for payer g) in one of the empty squares on the board. After the board is filled, each player's score is equal to the largest connected region on the board filled with that player's color (where a connected region is one where for any two squares in the region a path exists consisting of only N/S/E/W moves). The player with the highest score wins, and is awarded the difference between his/her score and the score of the other player. Two examples of finished games are shown below, with the largest connected regions for each player outlined. Note that in the second example the two sections with 2 r each are not connected.

enter image description here

Im writing the alpha-beta prunning algorithm and stuck with the evaluation function.

Any help? Pseudocode is preferable.

Was it helpful?

Solution

Start with a really simple evaluation function. For example, just use the current size of the largest component. After you get an ai working, you can worry about tuning the evaluation heuristics.

Here's example pseduocode (not tested)

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))
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top