2012-10-01 52 views
1

我正在學習wxPython來製作國際象棋GUI,但我不完全知道它應該如何完成,使用的是什麼窗口小部件。我在想每個方塊都帶有一張照片,然後將它們放在相鄰的電路板上,所以我在電路板上有64個按鈕。在wxpython中建模國際象棋棋盤

當我移動一塊時,我將按鈕放在目標方塊上,原點方塊將被替換爲代表空方塊的按鈕。

這是在wxPython中做到這一點的正確方法嗎?我真的被困在這裏,因爲在wxPython中沒有關於國際象棋GUI的例子。

+0

聽起來像你有一個體面的想法,如何實現它,只需要信心前進。我們相信你:-) – Kevin

+0

這太寬泛了...但是我不會那麼做...我會使用DrawingDC製作電路板,然後我會將它安裝在自己的面板中並移動它董事會 –

回答

2

啊,用wxPython創建一個國際象棋程序就是我十多年前自學python程序的時候;-)祝你好運。

首先,您需要爲電路板繪製網格。這很容易。然後你需要一個數據結構來記住所有碎片的位置。爲此我在這裏使用模塊:http://www.alcyone.com/pyos/chess/。接下來,您需要一個例程,假定Board將在適當的位置繪製碎片。

要移動棋子,您可能需要使用拖放操作。通過這種方式,您可以製作一個方形(或在該方形上繪製的部分)可拖動。您需要定期從屏幕座標計算平方,例如screen_to_board()。在放置事件中,您將使用相同的例程計算目標方塊。然後,您只需更新電路板狀態(使用Board.move())並重新繪製屏幕。

+0

非常感謝。但是,我將如何繪製網格?我難以理解的是我應該如何表示棋子(或其上有圖片的64個方格)。作爲按鈕? – geekkid

+0

我不會使用按鈕。我只是畫了一個網格。這可以通過獲取設備上下文,然後重複調用'DrawLine()'和'FillSquare()'來完成。 (我是從記憶中引用的。)對於棋子,我將圖像放在winboard/Xboard包中,並簡單地將它們畫在畫布上的網格上。我想我使用了'dc.DrawBitmap()'。 –

+0

+1:我喜歡這個系統的概念,你可以拖放這些部分,這需要一個畫布,比如在wx demo中的DragImage中。 (按鈕可能工作,如果你只想點擊,但是當你點擊時會發生什麼,想要移動的部分。) – tom10