如何模拟特定JButton在JButton数组中的移动

3
我正在尝试为一个作业制作一个Java的小游戏。我们需要在JFrame窗口中拥有一个可调整大小的方格,其中每个方格是一个按钮,并且有以下规则:中间的按钮是一个“黑洞”,有两个玩家。每个玩家都有 N-1 艘飞船,他们必须将它们移动到黑洞里。第一个实现此目标的玩家获胜。两名玩家的飞船都沿着对角线朝向和远离中心(黑洞)。

问题在于,当你让一艘飞船朝一个方向前进时,它会一直向那个方向前进,直到撞墙或与另一艘飞船相撞。

以下是游戏设置时和移动飞船时的截图:

enter image description here

我的问题是:我已经成功地将所有的按钮放在了正确位置的方格中。它们都是可点击的按钮。现在我该如何实现以下功能:

鼠标单击选择一个按钮后,系统应设置焦点(我尝试通过ActionListener请求焦点,但似乎没有产生任何效果)。

然后,在焦点被设置后,同一个按钮(该按钮已经有一个ActionListener)将在其上等待箭头键输入的KeyListener。然后,在您输入方向后,该按钮将移动其颜色-模拟移动-直到它撞到飞船、墙壁或进入黑洞并从地图上清除。

我的问题是:如何让Java知道特定按钮上的keyListener只应在选中该按钮后才监听箭头键?

另一个问题是:如何实现移动?

基本上,两支队伍的太空飞船都是蓝色/红色的。其余的格子都是白色的,除了中间的黑洞是黑色的。

当选定一个按钮并且输入了移动命令时,我该如何使其背景颜色逐块移动,直到它撞到墙壁或另一艘飞船?我甚至不知道从哪里开始,所以我想在这里寻求一点帮助。


你是否在按钮中添加了“.addActionListener(this)”?如果没有添加,按钮将无法监听到操作。请确保像这样做:gameboardButton[i].addActionListener(this); - Marcelo Tataje
这个答案中展示了一个简单的例子,并引用了一个相关的例子。 - trashgod
@Marcelo Tataje 是的,我当然已经包含了那个。我已经实现了一些简单的东西,比如如果我点击按钮将它们变成红色等类似的操作,但我不知道如何“模拟”移动。 - user1966576
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - user1966576
1
@user1966576:从这里开始。 - trashgod
1个回答

1
你还需要给按钮添加一个KeyListener,以KeyAdapter作为参数。当事件触发时,你可以获取事件的键代码,并将其与以下值进行比较:
KeyEvent.VK_UP
KeyEvent.VK_DOWN
KeyEvent.VK_LEFT
KeyEvent.VK_RIGHT

然后采取必要的行动。

关于模拟移动,您希望三角形只是从一个按钮“跳”到另一个按钮,还是希望更流畅的效果?


简单的跳跃也足够了,尽管也许使它流畅起来不会太困难。这需要在每个单独块移动后重新绘制整个网格之类的操作。 - user1966576
我假设你现在拥有的图像是按钮上的图标,而不是浮动在按钮上的图像。如果是后者,那么它会更简单,因为你只需要每隔几毫秒移动一像素即可。如果是前者,则需要从按钮中删除图像,在相同的位置绘制它,然后再每隔几毫秒移动一像素。你还应该查找Swing中的双缓冲以了解如何实现并使其看起来更平滑。 - Sokratees9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接