我正在开发Java中的网格基于SIM卡的比赛,我想知道是否有做以下的标准方法。 我有一个面板,是游戏面板,并且有被点击面板时可能会发生许多不同的事情。例如,建设机房时,有几个阶段,其中拖动鼠标左击将有不同的动作。 现在,我已经做了它的方式,就是用布尔值来检查什么正在建造,那么它是在什么阶段。

有没有处理这样的事情没有更好的或者标准的方式?我有一个快速谷歌,但正如我之前所说,人们对堆栈溢出总是给一个更好的,更具相关性,最新的答案。

我觉得自己还是比较新到Java。

预先感谢。

有帮助吗?

解决方案

您可以尝试寻找到类似的策略模式的东西。

基本上,您可以通过单击工具栏上的按钮,房间开始。工具栏经过,并告诉使用的房间的地方“的ActionListener电网。据推测除去任何先前的动作侦听器是听

在室温地方的ActionListener又将实现逻辑的所有有趣的位为左/右点击,拖拉等

如果你有多个阶段建立一个房间(比如,放置门,然后窗,然后活板门);的动作侦听器将负责移交控制到下一个阶段:有限状态机的一个位。

因此,通过点击“房间”按钮来启动,“地点室”侦听器添加。拖出你想要的房间是面积,“处室”修改游戏状态,然后更改ActionListener添加到“地方窗口”的听众。循环往复......直到完成为止。

一个非常简单的(非可编译)示例:

class GridPanel extends JPanel
{
    void SetMouseListener(MouseListener newListener)
    {
        for(MouseListener ml : getMouseListeners())
            removeMouseListener(ml);
        addMouseListener(newListener);
    }
}

class ControlPanel extends JPanel
{
    GridPanel gameGrid;

    void OnRectangleButtonClicked(some stuff)
    {
        gameGrid.SetMouseListener(new PlaceRoomListener(gameGrid));
    }
}

class PlaceRoomListener extends MouseAdapter
{
    GridPanel gameGrid;

    //constructor, etc

    void OnClick(mouse event)
    {
        gameGrid.doCoolStuff();
        gameGrid.SetMouseListener(new PlaceTrapDoorListener());
    }
}

//etc

现在,非编译例子不谈,Pyrolistical确实有一点:你通常不希望你的游戏模型和图形界面结合成类单一水珠。所需的模型从GUI分离,并且通过良好定义的接口来操作它。

(另外,也有可能是去有关删除鼠标监听器,然后只是随机删除所有听众更好的方法......我是有点仓促,抱歉)

其他提示

这听起来像你需要确定你的游戏模式/状态,并保持它从你的鼠标操作分开。

您使用MVC?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top