Я делаю игру с Python-> PyGame-> Albow и столкнулся с проблемой генерации доски.Однако я попытаюсь объяснить проблему языковым способом.Я полагаю, что это не относится к питону.
Я разделил поколение игровых досок на несколько частей.
Первая часть создает отверстия для досок.
Отверстия содержатся в списке / массиве.Каждый объект отверстия имеет отображение углов, относящихся к другим отверстиям, которые его окружают, каждое из этих отверстий также связано с ним.(Вроде как родные элементы HTML DOM, возможна разница под любым углом)
Отверстие - это что-то вроде:
hole = {
empty: True,
links: {
90: <other hole>,
270: <another hole>,
etc...
}
}
Часть вторая , вычислить положение отверстияКод выглядит примерно так:
def calculate_position(hole):
for linked_hole in hole.links:
if linked_hole.position == None:
#calculate linked hole's position relative to this hole
linked_hole.position = [position relative to first hole]
calculate_position(linked_hole)
first_hole.position = (0, 0) #x, y
calculate_position( first_hole )
Часть третья , чертежная доска.
Найдите высоту окна, увеличьте положения отверстий (рассчитано на втором шаге)соответствовать окну.Нарисуйте все.
Я считаю, что проблема на втором шаге. Я вычисляю каждую лунку относительно предыдущей лунки.Ошибки округления складываются, и доска становится косой в форме, чем дальше от начального отверстия отверстия и тем больше доска.Это происходит только при создании досок, которые не являются прямоугольными, потому что в противном случае нет ошибок округления.
Я использую простую тригонометрию для вычисления относительных положений отверстий путем преобразования угла в радианы и использования встроенного sin /cos functions.
Любая идея относительно решения или, если я ошибаюсь относительно проблемы, полезна:)
PS: я опубликуюИсходный код, если это поможет, однако чувствую, что он загромождает вещи
Спасибо за все ответы.
Люди, которые сказали, что округление, вероятно, не собиралосьчтобы быть проблемой были на месте.Я имел другой взгляд через код с учетом этого.Мне стыдно сказать, что я генерировал неправильные углы в первой части генерации платы, часть рендеринга была правильной.
Я пометил ответ Нормана как правильный, потому что он объясняет, как использовать линейную комбинациювекторов для решения проблемы.