2015-11-21 5 views
2

Так что я работаю над проектом для класса, и я все еще пытаюсь понять, как это сделать.Python 3 Графическое программирование: как я могу получить щелчок мыши в форме многоугольника?

Я делаю игру, где есть доска квадратов или шестиугольников, они либо черные, либо белые, каждый из которых является состоянием «Перевернуто», и когда вы нажимаете один квадрат/шестиугольник, он переворачивает все соседние формы тоже.

Вот изображение того, что я собираюсь создать. Assignment images

Я получил это бег с квадратами, но теперь мне нужно сделать это с шестиугольниками. С квадратами я зарегистрировал mouseclick как находящийся в квадратных параметрах местоположения x и y клика, а изменения состояния присваиваются списку значений, назначенных аналогично тому, как фигуры были назначены в списке.

Я включу быструю запись квадратной программы, запущенной в папке, которую я собираюсь связать.

Теперь, я считаю, что я не могу применять эту систему к шестиугольникам, так как они действительно не выстраиваются в линию, как квадраты.

Так как же я могу сделать регистрацию кликов в одном шестиугольнике на сетке? Я уже нарисовал сетку, но я зациклился на том, что делать, чтобы зарегистрировать щелчок, чтобы позволить шестиугольнику изменить его состояние от неперевернутого до щелчка. Я уверен, что знаю, что делать для изменения состояния, но я не знаю, как это сделать, будет ли это связано с созданием отдельного класса или чего-то еще? Я был бы признателен за любую помощь в этом.

Я положу ссылку на канал для получения прогресса, который я сделал до сих пор, и руководство по pdf для graphics.py.

Dropbox: Python files

Вы можете просмотреть код питона в вашем веб-браузере с раздаточной тоже, я действительно не хочу, чтобы заполнить эту страницу тянуть целой вещи кода ..

Любая помощь и обратная связь будет замечательной, спасибо c:

so, TL; DR: Как вы регистрируете щелчок в форме многоугольника в python, который позволяет ему изменять значение (в списке?) и изменять его внешний вид.

ответ

1

Только для общей части вашего вопроса вы можете использовать тест, чтобы проверить, находится ли точка (x, y) внутри многоугольника (образована списком x, y пар).

Вот один из таких решений: http://www.ariel.com.au/a/python-point-int-poly.html

# determine if a point is inside a given polygon or not 
# Polygon is a list of (x,y) pairs. 
def point_inside_polygon(x,y,poly): 
    n = len(poly) 
    inside =False 

    p1x,p1y = poly[0] 
    for i in range(n+1): 
     p2x,p2y = poly[i % n] 
     if y > min(p1y,p2y): 
      if y <= max(p1y,p2y): 
       if x <= max(p1x,p2x): 
        if p1y != p2y: 
         xinters = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x 
        if p1x == p2x or x <= xinters: 
         inside = not inside 
     p1x,p1y = p2x,p2y 
    return inside 

Это может быть использовано таким образом, что вполне симметричны кода рисования, как вы также полигоны таким же образом, для рисования, как вы бы, чтобы проверить, см., если курсор находится внутри шестнадцатеричного.

Вы можете изменить приведенную выше реализацию также для работы с этим типом Point, который используется для рисования многоугольников.

В остальном вы должны быть в состоянии выяснить, особенно учитывая, что вам удалось управлять вводами и рисовать квадратную сетку.