2012-10-01 40 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