2015-11-21 44 views
2

因此,我正在爲一個課程開展一個項目,我仍然試圖找出如何去做某件事。Python 3圖形編程:如何在多邊形內點擊鼠標?

我正在製作一個遊戲,其中有一塊正方形或六邊形,它們是黑色或白色,每個都處於「翻轉」狀態,當您單擊一個正方形/六邊形時,它會翻轉所有相鄰形狀也一樣。

這是我打算創建的圖像。 Assignment images

我已經得到它與正方形運行,但現在我需要與六邊形。使用正方形我註冊了一個鼠標點擊,因爲它位於點擊的x和y位置的平方參數內,並且狀態更改被分配給類似於如何在列表內分配形狀的值的列表。

我將在我要鏈接的文件夾中包含正在運行的方形程序的快速錄製。

現在,我相信我不能將這種系統應用於六邊形,因爲它們並不像廣場那樣排列整齊。

那麼我會如何去在網格上的單個六邊形內進行點擊註冊?我已經繪製了網格,但是我堅持要做些什麼來註冊點擊以允許六邊形將其從未翻轉狀態更改爲翻轉狀態。我很確定我知道該怎麼做,以改變狀態,但我不知道該怎麼做,是否會涉及到製作單獨的類或其他東西?我將不勝感激任何幫助。

我將在這裏放置一個Dropbox鏈接,以瞭解我迄今取得的進展,以及一份pdf.php手冊。

Dropbox: Python files

您可以查看在您的網頁瀏覽器的Dropbox的Python代碼也一樣,我真的不希望填補的代碼整個事情本頁面拉..

任何幫助和反饋將是美好的,謝謝你c:

所以,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類型一起工作。

其餘的你應該能夠弄清楚,特別是考慮到你管理輸入處理和正方形網格的繪圖。