我正在制作棋盘游戏,无法移动它们。棋子将根据骰子结果移动。以下是我尝试执行的操作,但它不起作用。(来自button []。addActionListener(new ActionListener())注:我已使用ImageIcon表示自己的作品,对您有帮助吗?

    //Puts the player 1 piece on button 1,3,5,7,9 and player 2 piece on button 2,4,6,8,10
    if ((btnNumber - 1) < 10)
    {
        if (((btnNumber - 1) % 2) == 0)
        {
            buttons[btnNumber - 1].setIcon(piece1);
        }
        else
        {
            buttons[btnNumber - 1].setIcon(piece2);
        }
    }
    centerPanel.add(buttons[btnNumber - 1]);
}

frame.add(centerPanel, BorderLayout.CENTER);

最佳答案

似乎有些基本的东西您尚未掌握。以下是一些接近目标的建议:

  • button[].addActionListener是一个荒谬的陈述。您不能一次将动作侦听器添加到整个数组。也许您是想说buttons[btnNumber - 1].addActionListener并将其放在for循环内。
  • buttons[]==ImageIcon("piece1")也是无意义的语句(甚至不应该编译)。您可以尝试buttons[btnNumber - 1] == ImageIcon("piece1"),尽管有一种更简单的方法(#3)。
  • 而不是根据作品是否等于图像图标实例来确定作品的位置,为什么不拥有随作品移动而不断更新的变量piece1Locationpiece2Location。然后,您将立即知道片段的位置,并且您的逻辑将简化为if (btnNumber - 1 == piece1Location)
  • 在Java中,数组从索引0开始。在Java中使用for循环处理数组的最干净方法是也从0启动索引变量,并将比较从<=更改为<。使用以下for(int i = 0; i < 30; i++),您不必一直说btnNumber - 1
  • 代码的组织有些混乱,并且在模型和表示之间紧密集成。您应该设法将处理展示棋盘和棋子(演示)的逻辑与处理游戏机制(掷骰子,移动棋子等)的逻辑分开。这将极大地帮助您维护代码并跟踪正在发生的事情。
  • 09-06 14:51