我正试图将国际象棋引擎作为一个有趣的项目,但为此我真的想制作一个GUI。问题是我没有这方面的经验,所以我有点停滞不前。我设法创建了董事会,但有两件事我不知道该怎么做,而在网上查找只会让我更加困惑。
-
如何根据板在计算机内存中的外观将块添加到板中。(例如,如果引擎移动,我希望移动也发生在gui上,我将如何将两者链接起来?(
-
如何计算用户在gui中单击的是哪个方块?
这是我迄今为止为gui编写的代码,不多,但它是诚实的工作
private final JFrame gameFrame;
private Board board;
public Table() {
this.board = new Board();
this.gameFrame = new JFrame("Chess");
this.gameFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.gameFrame.setSize(527, 550);
JPanel panel = new JPanel() {
@Override
public void paint(Graphics g) {
boolean white = true;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (white) {
g.setColor(new Color(240, 217, 181));
}
else {
g.setColor(new Color(181, 136, 99));
}
g.fillRect(j * 64, i * 64, 64, 64);
white = !white;
}
white = !white;
}
}
};
this.gameFrame.add(panel);
this.gameFrame.setVisible(true);
}
我知道我可能会问一些答案复杂的问题,但我只是在寻找一些我可以查找的东西或一些大致的方向
一种可能也是最有用的方法是实现mouseListener
,然后从其中一个方法获取x y
位置。
- 编写一个类来扩展
MouseAdapter
- 重写所需的空方法
- 则经由CCD_ 4(并且可能经由
addMouseMotionListener
(将该类的实例添加到帧
然后,当你用鼠标做一些动作时,你可以从MouseEvent.
中获得坐标。在每个方法中放入一些打印语句有助于观察发生了什么(什么方法处理鼠标移动(。
以上内容将用于演示该过程。但稍后您应该在JPanel
上添加侦听器,并将JPanel
添加到帧中。