作为 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/