1

好的,所以我有一个计算机科学项目,我需要有关网格世界的帮助。我已经编写了代码,所以我可以单击一个小动物,但我想单击该小动物一次,然后单击网格上的一个空白点以将小动物移动到。但它不起作用。我需要让它工作,我不知道我的代码有什么问题。看一看。感谢你的帮助

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);
    }
}
4

1 回答 1

0

这超出了我对 Gridworld 的了解,但我发现了一些可能有帮助的东西。


如何拦截鼠标点击和击键

该类World具有拦截鼠标点击和击键的学生友好机制。不需要了解 AWT 事件。

当用户单击网格位置时,调用的locationClicked方法。World默认情况下,该方法返回false,它告诉框架启动默认操作,即移动选择方块并显示构造函数或方法菜单。

要拦截鼠标单击,请覆盖该locationClicked方法。执行任何所需的操作并返回true。用户单击的网格位置作为参数传递。典型的操作包括翻转图块、填充空白位置等。

有时,您需要在单击鼠标后询问用户其他信息。最简单的方法是使用JOptionPane.

让我们考虑一个常见的情况。在游戏中,用户选择一块。您想询问用户要将作品移动到哪里。您可以等待再次单击鼠标。这意味着,您的locationClicked方法需要跟踪点击状态(片段选择与目标选择)。或者您可以枚举所有合法目标并调用JOptionPane.showOptionDialog.

当用户点击一个键时,调用的keyPressed方法。World默认情况下,该方法返回false,它告诉框架启动默认键操作。如果用户点击光标键,则移动选择方块。如果用户按 Enter 键,则显示构造函数或方法菜单。所有其他键都被忽略。

要拦截击键,请覆盖该keyPressed方法。java.awt.KeyStroke该方法接收当前位置和击键字符串,以与该类使用的相同格式进行编码。示例击键字符串是“INSERT”或“alt shift X”。您的keyPressed方法应该检查击键字符串。如果字符串与您要拦截的击键匹配,则执行任何所需的操作并返回true。返回false所有其他击键。返回false光标键和 Enter 键是个好主意。否则,您的世界将禁用标准操作。


来源(第 16 页)

于 2014-03-28T14:23:10.677 回答