Я изо всех сил пытаюсь создать простую игру с картой мира, на которой игрок будет перемещаться, используя клик и вперед -линейный метод. Для этого я пытаюсь сделать простую функцию, чтобы вычислить список XY пикселей для прохода игрока.Нарисуйте линию от начала (X, Y) до пункта назначения (X, Y)
Большинство из них отлично работает, но у меня возникают проблемы с этим, умножая один из результатов на 2, когда назначения X и Y не равны. У меня очень трудное время, чтобы устранить эту проблему, и если кто-то подумает о том, как ее улучшить или исправить, я был бы очень благодарен.
import math
def linePath(start, finish):
if start[0] == finish[0]:
a = 1
else:
a = (finish[1] - start[1])/float((finish[0] - start[0]))
b = start[1] - (a * start[0])
if abs(a) >= 1:
rng = xrange(start[1], finish[1] + 1) or reversed(xrange(finish[1], start[1] + 1))
else:
rng = xrange(start[0], finish[0] + 1) or reversed(xrange(finish[0], start[0] + 1))
for i in rng:
if abs(a) >= 1:
y = i
x = int(math.ceil((y - b)/ a))
else:
x, y = i, start[1] + int(math.ceil(a * i + b))
if start[0] != finish[0]:
yield x, y
else:
yield start[0], y
start = (10, 10)
destination = (15, 15)
print list(linePath(start, destination))
#Bugs: when start[0] > start[1] and start > destination (eg. destination = (16, 15))
#when start[0] < start[1] and start < destination (eg. destination = (5, 6))
Также забыл упомянуть (и не может изменить сам вопрос еще) - целевой диапазон для любого кортежей XY кортежей будет от 0 до 400, без отрицательных чисел. – kuro