読者です 読者をやめる 読者になる 読者になる

pythonでブレゼンハムアルゴリズムを実装した

python プログラミング

またまた壁にぶつかったのでメモ。

ダンジョン内におけるリアルな視界を表現するのに、直線を表現するアルゴリズムが必要でした。

googleで「ダンジョン 視界 アルゴリズム」とかでググっても、あんまり情報が出てこなかったので後発の方のために情報を残しておきます。

基本的には、「ゲーム開発者のためのAI入門」を参考にしました。

 

path_y = y
path_x = x
path = []
delta_y = pos[0] - y
delta_x = pos[1] - x
path_lists = []
while (path_y, path_x) != tuple(pos):
    if delta_y < 0:
        step_y = -1
    else:
        step_y = 1
    if delta_x < 0:
        step_x = -1
    else:
        step_x = 1

    delta_y = abs(delta_y * 2)
    delta_x = abs(delta_x * 2)

    path.append([path_y, path_x])

    if delta_x > delta_y:
        fraction = delta_y - delta_x / 2
        while path_x != pos[1]:
            if fraction >= 0:
                path_y += step_y
                fraction -= delta_x
            path_x += step_x
            fraction += delta_y
            path.append([path_y, path_x])
    else:
        fraction = delta_x - delta_y / 2
        while path_y != pos[0]:
            if fraction >= 0:
                path_x += step_x
                fraction -= delta_y
            path_y += step_y
            fraction += delta_x
            path.append([path_y, path_x])
try:
    for lists in path:
        if self.field[lists[0]][lists[1]] == 0:
            path_lists.append(0)
        else:
            path_lists.append(self.field[lists[0]][lists[1]])
except Exception as e:
    print(e)
    input()