gpt4 book ai didi

java - GridLayout 的移动限制仅限于相邻的网格按钮

转载 作者:行者123 更新时间:2023-11-30 03:54:31 24 4
gpt4 key购买 nike

我正在制作一个游戏,可以在 jbutton 的网格布局上移动,只允许移动到相邻的网格 jbutton。目标是尝试到达左上角(从 btm 右侧)。我认为这就是所有相关的:

//这是我确定是否是有效移动的方法(我不希望你能够移动到除相邻点之外的任何地方

    public boolean goodMove(int x, int y) {

int val = Math.abs(current.x - x) + Math.abs(current.y - y);

return val == 1;
}

//这是actionlister中的逻辑,一个大的if else循环,现在仅引用我的网格布局(游戏面板)中的jbutton

      public void actionPerformed(ActionEvent e) {

JButton clicked = (JButton) e.getSource();

if (clicked == SHOWMINES) {

if (SHOWMINES.getText().equals("Show Mines")) {
showMines();
SHOWMINES.setText("Hide Mines");
} else {
hideMines();
}
} else {
if (clicked == NEWGAME) {
newGame();
} else {
if (clicked == SHOWPATH) {
if (SHOWPATH.getText().equals("Show Path")) {
showPath();
SHOWPATH.setText("Hide Path");
} else {
hidePath();
}
} else {
if (clicked == OKAY) {
resetGridSize(Integer.parseInt(gridSizeInput.getText()));
newGame();
} else {

}
int gs = Integer.parseInt(gridSizeInput.getText());
for (int i = 0; i < gs - 1; i++) {
for (int j = 0; j < gs - 1; j++) {
if (clicked == grid[i][j]) {
if (goodMove(i, j)) {//debug tester ,this is where the problem is.
System.out.println("TEST");
current = new Point(i, j);
grid[i][j].setBackground(Color.green);
grid[i][j].setText("=");
}else{System.out.println("TEST2");}
}
}
}
}
}
}
}// end of action listener

Grid[][] 是我的网格按钮数组,gridSizeInput 是您可以调整网格大小的文本字段。

提前致谢(我是编程新手,所以如果可以的话请保持简单:)

编辑:我忘了提及,它没有识别我的 if(goodMove()) 循环,它只是为我的 else 打印出两个。

编辑:我的问题是为什么不起作用,在我的网格中没有任何按钮被识别为单击,我想我是在问我写的东西是否明显错误。谢谢。

编辑:好的,这是我所有按钮的整个 Action 监听器。这是我的第一篇文章,抱歉我没有提供更多帮助 - 如果我还可以添加其他内容,请告诉我。

最佳答案

您的问题可能很简单,因为您没有将 for 循环扩展得足够远。尝试改变这个:

for (int i = 0; i < gs - 1; i++) {
for (int j = 0; j < gs - 1; j++) {

对此:

for (int i = 0; i < gs; i++) {
for (int j = 0; j < gs; j++) {
<小时/>

编辑
这是我为测试这个概念而创建的最小代码示例:

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.*;

import javax.swing.*;

public class Foo extends JPanel {
public static final int GRID_SIZE = 10;
private Point current;
private JButton[][] grid;

public Foo() {
ButtonListener listener = new ButtonListener();
setLayout(new GridLayout(GRID_SIZE, GRID_SIZE));
grid = new JButton[GRID_SIZE][GRID_SIZE];
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
grid[i][j] = new JButton(" ");
grid[i][j].addActionListener(listener);
add(grid[i][j]);
}
}

current = new Point(GRID_SIZE - 1, GRID_SIZE - 1);
}

private class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton clicked = (JButton) e.getSource();
// !! int gs = Integer.parseInt(gridSizeInput.getText());
int gs = GRID_SIZE;
// !! for (int i = 0; i < gs - 1; i++) {
// for (int j = 0; j < gs - 1; j++) {
for (int i = 0; i < gs; i++) {
for (int j = 0; j < gs; j++) {

if (clicked == grid[i][j]) {
if (goodMove(i, j)) {
System.out.println("TEST");
current = new Point(i, j);
grid[i][j].setBackground(Color.green);
grid[i][j].setText("=");
} else {
System.out.println("TEST2");
}
}
}
}
}
}

public boolean goodMove(int x, int y) {
int val = Math.abs(current.x - x) + Math.abs(current.y - y);
return val == 1;
}

private static void createAndShowGui() {
Foo mainPanel = new Foo();
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

关于java - GridLayout 的移动限制仅限于相邻的网格按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23586973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com