好吧,我有一个计算机科学项目,我需要网格世界方面的帮助。我编写了代码,这样我就可以单击小动物,但我想单击该小动物一次,然后单击网格上的空位以将小动物移动到。但这不起作用。我需要让它工作,但我不知道我的代码有什么问题。看一看。感谢您的帮助
Actor t;
public boolean locationClicked(Location loc)
{
Grid<Actor> gr = getGrid();
t = gr.get(loc);
Actor j;
//Location second;
if (t != null)
{
setMessage("Click on " + t);
numOfClicks++;
if(t instanceof BlackCheckers || t instanceof RedCheckers)
{
if(numOfClicks==0)
{
secondClick(second);
}
}
}
else
{
setMessage("Click on nothing");
}
return true;
}
Location second;
public void secondClick(Location second)
{
this.second=second;
Grid<Actor> op=getGrid();
Actor te=op.get(second);
if(te==null)
{
t.moveTo(second);
}
}
最佳答案
这超出了我对 Gridworld 的了解,但我发现了一些可能有帮助的东西。
<小时/>如何拦截鼠标点击和按键
World
类具有学生友好的机制来拦截鼠标点击和击键。无需了解 AWT 事件。
当用户单击网格位置时,将调用 World
的 locationClicked
方法。默认情况下,该方法返回false
,它告诉框架启动默认操作,即移动选择方 block 并显示构造函数或方法菜单。
要拦截鼠标单击,请重写 locationClicked
方法。执行任何所需的操作并返回true
。用户单击的网格位置作为参数传递。典型的操作包括翻转图 block 、填充空位置等。
有时,您需要在单击鼠标后向用户询问附加信息。最简单的方法是使用 JOptionPane
。
让我们考虑一个常见的情况。在游戏中,用户选择一 block 。您想询问用户想要将棋子移动到哪里。您可以等待再次单击鼠标。这意味着,
您的 locationClicked
方法需要跟踪点击状态(棋子选择与目标选择)。或者您可以枚举所有合法目标并调用 JOptionPane.showOptionDialog。
当用户按下某个键时,将调用 World
的 keyPressed
方法。默认情况下,该方法返回false
,这告诉框架启动默认的按键操作。如果用户按下光标键,选择方 block 就会移动。如果用户按下 Enter 键,则会显示构造函数或方法菜单。所有其他键都将被忽略。
要拦截击键,请重写 keyPressed
方法。该方法接收当前位置和击键字符串,其编码格式与 java.awt.KeyStroke 类使用的格式相同。示例击键字符串为“INSERT”或“alt shift X”。您的 keyPressed
方法应该检查击键字符串。如果该字符串与您要拦截的击键匹配,则执行任何所需的操作并返回 true
。对于所有其他击键,返回 false
。对于光标键和 Enter 键返回 false
是个好主意。否则,您的世界将禁用标准操作。
关于java - 网格世界帮助将小动物移动到空位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22441317/