我正在尝试用 java 制作一个小游戏来完成作业。
我们需要在具有 nxn(n= 一些合理的数字,如 5 或 7)字段(在本例中每个字段都是一个按钮)的 JFrame 窗口中有一个可调整大小的网格,并且在该字段上有以下规则:
中间按钮是一个“黑洞”,有2个玩家。每个玩家都有 N-1 艘船只供他们使用,他们必须将它们移入黑洞。第一个做到这一点的玩家获胜。两个玩家的船都朝向和远离中间(黑洞)对角对齐。
诀窍是,当您告诉一艘船朝某个方向行驶时,它会朝那个方向行驶,直到撞到墙壁或另一艘船。
以下是游戏在设置和移动飞船时的样子:
我的问题是,我已经成功地让所有船只和黑洞都处于正确的位置。它们都是按钮并且是可点击的,那么现在我如何实现以下目标:
在我用鼠标单击选择一个按钮后,系统应该将焦点设置在它上面(我通过 ActionListener 尝试了 requestFocus() 但它似乎没有做任何事情)。
然后在设置焦点之后,同一个按钮(上面已经有一个 ActionListener)将有一个 KeyListener,它等待箭头键输入。然后在您输入方向后,该按钮将移动其颜色 - 模拟移动 - 直到它撞到一艘船、墙壁,或者在它从 map 上清除时进入黑洞。
我的问题是,我如何让 Java 知道特定按钮上的 keyListener 应该只在我选择按钮后监听箭头键
另一个是 - 我如何实际模拟运动?
基本上,两队的飞船都是蓝色/红色的。除了中间的黑洞是黑色的,其余的方 block 都是白色的。
How do I make it so that when a selected button gets a movement command, it shifts its setBackGroundColoring so that it shifts over block by block until it hits a wall or another ship?我什至不知道从哪里开始,所以我想我应该在这里寻求一些帮助。
最佳答案
您还应该向按钮添加一个 KeyListener,并以 KeyAdapter 作为参数,当事件触发时,您可以获得事件的键代码,并根据值检查它:
KeyEvent.VK_UP
KeyEvent.VK_DOWN
KeyEvent.VK_LEFT
KeyEvent.VK_RIGHT
然后采取必要的行动。
关于模拟运动,您是想让三角形从一个按钮简单地“跳”到另一个按钮,还是更流畅的东西?
关于java - 如何模拟 JButton 数组中特定 JButton 的移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27191581/