好吧,我有一个计算机科学项目,我需要帮助网格世界。我已经编写了代码,所以我可以点击一个生物,但我想点击一次生物,然后点击网格上的一个开放点来移动生物。但它不起作用。我需要让这个工作,我不知道我的代码有什么问题。看一看。谢谢你的帮助
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);
}
}
答案 0 :(得分:0)
这超出了我对Gridworld的了解,但我找到了可能有用的东西。
World
课程具有拦截鼠标点击和击键的学生友好机制。不需要了解AWT事件。
当用户点击网格位置时,会调用locationClicked
的{{1}}方法。默认情况下,该方法返回World
,它告诉框架启动默认操作,即移动选择方块并显示构造函数或方法菜单。
要拦截鼠标单击,请覆盖false
方法。执行任何所需操作并返回locationClicked
。用户单击的网格位置作为参数传递。典型的操作包括翻转磁贴,填充空位置等。
有时,您需要在单击鼠标后询问用户其他信息。最简单的方法是使用true
。
让我们考虑一下常见情况。在游戏中,用户选择一块。你想问一下用户想要移动这件作品的位置。您可以等待另一次鼠标单击。那意味着,
您的JOptionPane
方法需要跟踪点击状态(片段选择与目标选择)。或者,您可以枚举所有合法目标并致电locationClicked
当用户点击某个键时,会调用JOptionPane.showOptionDialog.
的{{1}}方法。默认情况下,该方法返回keyPressed
,它告诉框架启动默认密钥操作。如果用户点击光标键,则移动选择方块。如果用户按Enter键,则显示构造函数或方法菜单。所有其他键都被忽略。
要拦截击键,请覆盖World
方法。该方法接收当前位置和击键字符串,其编码方式与false
类使用的格式相同。示例击键字符串是&#34; INSERT&#34;或&#34; alt shift X&#34;。您的keyPressed
方法应该检查击键字符串。如果字符串与您要拦截的击键相匹配,请执行任何所需操作并返回java.awt.KeyStroke
。所有其他击键都返回keyPressed
。最好为光标键和Enter键返回true
。否则,您的世界将禁用标准操作。