model-view-controller - 游戏逻辑应该位于 JavaFx 应用程序中的哪个位置?

标签 model-view-controller javafx

作为 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;
}

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

最佳答案

您可以使用模型- View - Controller (+网络,如果需要)架构来设计您的系统。 JavaFX 在使用 MVC 时非常有用。

经验法则:

1- 不要将游戏逻辑放入模型、网络和 View (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”的 Controller 类来执行有关游戏逻辑的所有计算。从按钮的处理 Action 事件方法调用 GameEngine 的方法。

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

关于model-view-controller - 游戏逻辑应该位于 JavaFx 应用程序中的哪个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43936123/

相关文章:

javascript - 为页面中的所有元素执行按钮上的主干事件

java - 将 FXML 文件添加到 ControlsFX 弹出窗口中

Javafx 按钮保持 "enabled"

java - ProgressBar 不适用于 fxml 文件和 Controller

JavaFX - 在 crunchbang linux 中删除窗口阴影

java - 通过 Scene Builder 的 ComboBox 项目?

java - 为 Android 警报对话框创建模型类

php - codeigniter:实体去哪儿了?

testing - Spring MVC 模拟错误

javascript - 如何更改 AngularJS 中的一次性绑定(bind)数据?