【问题标题】:Where should a game logic be within a JavaFx application?游戏逻辑应该在 JavaFx 应用程序中的什么位置?
【发布时间】:2017-10-11 16:17:15
【问题描述】:

作为 Javafx 和 java 的新手,我无法想象国际象棋游戏的设计。 所以我的 JavaFX 应用程序扩展类中有如下启动方法:

public void start(Stage primaryStage) throws Exception{
     Scene scene = new Scene(createContent());
     primaryStage.setTitle("ChessGame");
     primaryStage.getIcons().add(new Image("file:images/icon.png"));
     primaryStage.setScene(scene);
     primaryStage.show();
}

protected Parent createContent(){
    Pane root = new Pane();
    root.setPrefSize(WIDTH*TILE_SIZE, HEIGHT*TILE_SIZE);
    boardInitialize("8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - -");
    root.getChildren().add(tileGroup);
    root.getChildren().add(pieceGroup);
    return root;
}

问题是,我不知道将游戏逻辑放在我的应用程序中的什么位置。游戏逻辑将处理玩家的回合,检查检查和将死,生成可能的移动等(如果可能的话,稍后还有一个非常粗糙的 AI)。我试图将它塞进启动方法,但它不起作用,因为启动方法只运行一次。 Pygame 和他们的游戏循环比这更有意义,我可以看到我将如何使用它。所以我的问题是:我在哪里把游戏逻辑放在我的应用程序中?

【问题讨论】:

  • 如果您正在创建一个国际象棋游戏,您的结构将不同于一个总是动画的游戏。您的游戏将根据动作进行。所以你的逻辑可能应该放在你的事件处理程序中。例如:移动完成后检查是否合法,检查是否有捕获,检查是否有队友或将死。

标签: model-view-controller javafx


【解决方案1】:

您可以使用 模型-视图-控制器(如果需要,还可以加上网络)架构来设计您的系统。 JavaFX 在使用 MVC 时非常有用。

经验法则:

1- 不要将游戏逻辑放在模型、网络和视图(FXML)类中。

2- 使用 FXML 作为设计的一部分(它将引导您的工作)。

3- 尝试实现“Low coupling & High Coherence

4- 来自一个完整工作的 MVC JavaFX 项目的一些示例。

>    /* WelcomeScreenController class (interacts with the FXML file)*/
>    @FXML  
>     void doSignup(ActionEvent event) {
> 
>         user = username.getText();
>         pass = password.getText();
> 
>         if(user != null && !user.isEmpty() && pass != null && !pass.isEmpty())
>             if (checkBox.isSelected())
>                 GameEngine.game().getAccessManager().callSignupService(user,pass);
>             else
>                 showNotification("You need to accept terms.");
>     }

5- 尝试处理来自特定 FXML 文件的 Controller 类的按钮逻辑。 http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm

6- 创建一个名为“GameEngine”的控制器类来执行有关游戏逻辑的所有计算。从按钮的句柄动作事件方法调用 GameEngine 的方法。

7- 尝试使用面向对象的编程方法。 (多态、继承、设计模式等)

【讨论】:

    【解决方案2】:

    我会站在别人的肩膀上,使用一个已经有一些结构的库。

    这样,您就可以遵循以他人经验为基础的模型,并使用他们的最佳实践并避免他们所经历的陷阱。

    对于 JavaFX,我知道 FXGL library,它附带了一个很好的 list of examples 如何在 JavaFX 中构建游戏。

    在 YouTube 上,您可以找到多个 examples 和此库的教程。

    【讨论】:

      【解决方案3】:

      首先,我想让您知道我从未编写过 Javafx 应用程序,我可能是错的。

      正如您正确指出的那样,start 方法是 Javafx 应用程序的主要入口点,正如您从 here 描述的 Javafx 应用程序的剖析中看到的那样。你可以在那里初始化你的游戏,但很自然地,这些动作将在开始运行之后发生。当玩家尝试移动时,您需要使用event handling 来处理这种情况。

      一旦您能够处理移动事件,您还可以检查移动是否正确,或者检查给定玩家可能的有效移动选项。我想建议您应该有自己的业务逻辑类,并避免将业务逻辑与事件处理混为一谈,即使事件处理程序会调用业务逻辑方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-24
        • 2015-04-10
        • 1970-01-01
        • 2014-10-23
        • 2016-01-18
        • 1970-01-01
        • 2021-04-30
        • 1970-01-01
        相关资源
        最近更新 更多