Конвертация смещённой изометрической карты в 2Д массив

У меня есть изометрическая шахматная карта, на которой я хочу реализовать перемещение юнитов.

my map

У меня готова карта перемещений, которая генерирует возможные ходы на 8 направлений, но она работает с 2D-массивом.

Мне нужно перевести смещённую изометрическую карту в 2-D пространство для дальнейших преобразований.

Нужна помощь либо с преобразованием и взаимодействием с моей функцией поиска пути, либо любые другие варианты.

Вот графический пример расположения карты и массива: у меня не алмазная карта, а смещённая.

img1 img2

Результат выполнения:

[-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]

[-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]

[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, -1.0, -1.0, -1.0, -1.0]

[-1.0, -1.0, -1.0, 0.0, 0.5, 1.0, 0.5, 0.0, -1.0, -1.0]

[-1.0, -1.0, -1.0, 0.5, 1.5, 2.0, 1.5, 0.5, -1.0, -1.0]

[-1.0, -1.0, 0.0, 1.0, 2.0, 3.0, 2.0, 1.0, 0.0, -1.0]

[-1.0, -1.0, -1.0, 0.5, 1.5, 2.0, 1.5, 0.5, -1.0, -1.0]

[-1.0, -1.0, -1.0, 0.0, 0.5, 1.0, 0.5, 0.0, -1.0, -1.0]

[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, -1.0, -1.0, -1.0, -1.0]

[-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]

Код программы:

h = 10
w = 10
rm = [[-1.00 for k in range(w)] for g in range(h)]


def generate_move_map(x, y, moves=3):

    if rm[x][y] < float(moves):
        rm[x][y] = float(moves)
        for _x in range(-1, 2):  # Проходит циклом вокруг центра
            for _y in range(-1, 2):
                if (_x, _y) != (0, 0):
                    nX = _x + x
                    nY = _y + y
                    if 0 <= nX < w and 0 <= nY < h:  # w = 10, h = 10
                        if abs(_x) + abs(_y) == 2:
                            move_weight = 1.5
                        else:
                            move_weight = 1
                        t = moves - move_weight * pm[nX][nY]
                        if t >= 0:
                            generate_move_map(nX, nY, t)
                _y += 1
            _x += 1


generate_move_map(5, 5)

for f in rm:
    print(f)

Ответы (0 шт):