pythonfor-loopmatrixtetris

Counting gaps for a tetris ai in python


I am trying to make a simple tetris ai in python(no genetic algorithms)

I want to count the gaps in the grid and make the best choice depending on it.

By gap I mean where you wont be able to place a piece without clearing some lines.

My grid is something like this:

[0, 0, 0, 0, 0]
['#ff0000', ....]
[...]

0 represents a blank space, while the hex code represents its covered by a block

I have tried to calculate gaps like this:

def grid_gaps(grid):
    gaps = 0
    for x in range(len(grid[0])):
        for y in range(len(grid)):
            if grid[y][x] == 0 and \
                (y > 0 and grid[y - 1][x] != 0):
                gaps += 1
    return gaps

It works good when the grid is like this:

[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[1, 1, 1, 0, 0],
[0, 0, 0, 1, 0]

1 is some color, it correctly tells me that there are 3 gaps but when the grid is someting like this:

[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[1, 1, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 1, 0]

It again returns 3 but I want it to return 6.


Solution

  • I think the problem is that and grid[y - 1][x] != 0 is only looking at the cell directly above the current cell, so your bottom 3 cells in the second example aren't being counted.

    One quick fix I can think of is to set a gap cell to some non-zero value once it's counted, that way the gap cells below will be counted too. (Then set them back to 0 after you're done, if you're using the same grid and not a copy for the rest of the game.)