国际象棋 GUI - 在调用函数之前获得 2 次用户点击 - Java
Chess GUI - Getting 2 user clicks before calling a funtion - Java
我正在尝试制作一个简单的国际象棋 GUI,它只包含一个 gridLayout,其中每个方块由一个按钮组成,每个按钮都有一个 ActionListener 并且独立于实际游戏工作,只有 "printing out" 什么董事会正在发生 class.
private JButton[][] squares = new JButton[8][8];
private Color darkcolor = Color.decode("#D2B48C");
private Color lightcolor = Color.decode("#A0522D");
public ChessGUI(){
super("Chess");
contents = getContentPane();
contents.setLayout(new GridLayout(8,8));
ButtonHandler buttonHandler = new ButtonHandler();
for(int i = 0; i< 8; i++){
for(int j = 0;j < 8;j++){
squares[i][j] = new JButton();
if((i+j) % 2 != 0){
squares[i][j].setBackground(lightcolor);
}else{
squares[i][j].setBackground(darkcolor);
}
contents.add(squares[i][j]);
squares[i][j].addActionListener(buttonHandler);
squares[i][j].setSize(75, 75);
}
}
setSize(600, 600);
setResizable(true);
setLocationRelativeTo(null);
setVisible(true);
}
private class ButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
for(int i = 0;i< 8; i++){
for(int j = 0;j < 8;j++){
if(source == squares[i][j]){
//Pass set of coordinates to game.Move(...)
return;
}
}
}
}
}
我需要将 2 组坐标,"from" 和 "to" 传递给 game.Move(...) 函数(应用游戏移动逻辑的函数),其中每组坐标都是通过单击按钮给出的。
我应该如何处理在调用 game.Move(...) 函数之前需要等待用户进行 2 次点击的事实?好像一次只能传递一组坐标。
如有任何帮助,我们将不胜感激。
在游戏对象中,您可能应该有字段变量来存储起点和终点坐标,而不是将它们传递给 game.move 函数。你可以做一个从0开始的计数器,当它是0时,它会处理"from"点击(将Game中的"from"变量设置为被点击的坐标),当它是1时,它将处理 "to" 单击(在游戏中设置 "to" 变量),调用移动,并将计数器重置为 0。
我正在尝试制作一个简单的国际象棋 GUI,它只包含一个 gridLayout,其中每个方块由一个按钮组成,每个按钮都有一个 ActionListener 并且独立于实际游戏工作,只有 "printing out" 什么董事会正在发生 class.
private JButton[][] squares = new JButton[8][8];
private Color darkcolor = Color.decode("#D2B48C");
private Color lightcolor = Color.decode("#A0522D");
public ChessGUI(){
super("Chess");
contents = getContentPane();
contents.setLayout(new GridLayout(8,8));
ButtonHandler buttonHandler = new ButtonHandler();
for(int i = 0; i< 8; i++){
for(int j = 0;j < 8;j++){
squares[i][j] = new JButton();
if((i+j) % 2 != 0){
squares[i][j].setBackground(lightcolor);
}else{
squares[i][j].setBackground(darkcolor);
}
contents.add(squares[i][j]);
squares[i][j].addActionListener(buttonHandler);
squares[i][j].setSize(75, 75);
}
}
setSize(600, 600);
setResizable(true);
setLocationRelativeTo(null);
setVisible(true);
}
private class ButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
for(int i = 0;i< 8; i++){
for(int j = 0;j < 8;j++){
if(source == squares[i][j]){
//Pass set of coordinates to game.Move(...)
return;
}
}
}
}
}
我需要将 2 组坐标,"from" 和 "to" 传递给 game.Move(...) 函数(应用游戏移动逻辑的函数),其中每组坐标都是通过单击按钮给出的。
我应该如何处理在调用 game.Move(...) 函数之前需要等待用户进行 2 次点击的事实?好像一次只能传递一组坐标。
如有任何帮助,我们将不胜感激。
在游戏对象中,您可能应该有字段变量来存储起点和终点坐标,而不是将它们传递给 game.move 函数。你可以做一个从0开始的计数器,当它是0时,它会处理"from"点击(将Game中的"from"变量设置为被点击的坐标),当它是1时,它将处理 "to" 单击(在游戏中设置 "to" 变量),调用移动,并将计数器重置为 0。