java - javafx 游戏排行榜

标签 java javafx-8

stackoverflow 社区您好!我正在学习编程,并正在为移动设备开发“鸭子狩猎”风格的 javafx 游戏,其中 3 种鸭子在屏幕上水平移动。每次单击某种类型的鸭子时,该类型的鸭子就会在其名称旁边获得一个点。

我想做的是在游戏结束后显示一个全局排行榜,这样你就可以看到玩过游戏的每个人中哪种类型的鸭子被点击最多。每个人最喜欢的实现这样的方法是什么?如果您有任何疑问,请随时问我。谢谢,-H.J.

编辑(太平洋标准时间 2016 年 4 月 20 日下午 1:40(太平洋标准时间)):因为我原来的帖子因被认为含糊而被搁置,所以我编写了一个非常基本的示例程序来帮助解释我想要做的事情。在我的菜单场景中,我想检索全世界玩过该游戏的每个人对红色和绿色矩形的点击总数,当前为 globalScoreRedglobalScoreGreen 和设置为 0,因为这是我需要帮助的部分之一。

在 playGame 场景中,当您点击 GG 按钮时,我希望将 scoreRedscoreGreen 提交到排行榜,这将调整从菜单屏幕。

这是一个非常糟糕的游戏,我可以证明这不是我喜欢玩的游戏,但我正在尝试学习如何发送值和检索它们的概念。再次感谢您查看我的帖子并提供帮助,非常感谢。

package LeaderboardHelp;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class LeaderboardHelpMain extends Application {

Stage window;
Scene menu, playGame;

private Rectangle targetRed = new Rectangle(40, 40);
private Rectangle targetGreen = new Rectangle(40, 40);

private int scoreRed = 0;
private int scoreGreen = 0;

private Text redScoreText = new Text("Red: " + scoreRed);
private Text greenScoreText = new Text("Green: " + scoreGreen);

private int globalScoreRed = 0;
private int globalScoreGreen = 0;

private Text globalRedScoreText = new Text("Worldwide Red Clicks: " + globalScoreRed);
private Text globalGreenScoreText = new Text("Worldwide Green Clicks: " + globalScoreGreen);

private boolean playable = false;


public static void main(String[] args) { launch(args); }


@Override
public void start(Stage primaryStage) throws Exception {
    window =  primaryStage;

    Button startButton = new Button("Start!");
    startButton.setOnAction(e -> window.setScene(playGame));

    //menu scene layout
    VBox menuLayout = new VBox(20);
    menuLayout.getChildren().addAll(globalGreenScoreText, globalRedScoreText, startButton);

    menu = new Scene(menuLayout, 600, 600);

    Button ggButton = new Button("GG");
    ggButton.setOnAction(e -> window.setScene(menu));

    targetRed.setFill(Color.RED);
    targetRed.setOnMouseClicked(event -> {
        scoreRed += 1;
        redScoreText.setText("Red: " + scoreRed);
    });

    targetGreen.setFill(Color.GREEN);
    targetGreen.setOnMouseClicked(event -> {
        scoreGreen += 1;
        greenScoreText.setText("Green: " + scoreGreen);
    });

    targetRed.setTranslateX(50);
    targetRed.setTranslateY(50);

    targetGreen.setTranslateX(100);
    targetGreen.setTranslateY(50);

    greenScoreText.setTranslateX(500);
    greenScoreText.setTranslateY(50);

    redScoreText.setTranslateX(500);
    redScoreText.setTranslateY(70);

    ggButton.setTranslateX(250);
    ggButton.setTranslateY(250);
    //game layout
    Pane gameLayout = new Pane();
    gameLayout.getChildren().addAll(targetRed, targetGreen, redScoreText, greenScoreText, ggButton);
    playGame = new Scene(gameLayout, 600, 600);

    window.setScene(menu);
    window.setTitle("Leaderboard Helper");
    window.show();



    }
}

编辑(太平洋标准时间 2016 年 4 月 20 日 8:45PM PST)因此,经过更多阅读后,我遇到了 Oracle EchoServer 示例,它让我走上了正轨(不确定它是正确还是错误的轨道)。我正在考虑让服务器将提交的分数保存在文本文件中。当客户端调用menu场景时,它将连接到服务器并请求分数。服务器将读取文本文件并将分数发送到应用程序客户端。当按下GG按钮时,分数被发送到服务器,服务器读取文本文件,将新闻分数添加到旧分数,然后覆盖分数文本文件。有更好的方法吗?我确实希望它是可扩展的,允许大量用户同时添加他们的分数。

最佳答案

  1. 需要网络服务。一个简单的方法,可能需要鸭子的类型和它被点击的次数。

    POST/duck/{type}/{clicks}

  2. 网络服务需要使用 HTTPS 或 HMAC 进行保护,或者两者都使用更好。

  3. 对于 HMAC, key 需要在代码中隐藏和混淆。安全性总是容易被破坏,对于任何潜在的黑客来说,为了这么小的付出而付出的努力都是不值得的。
  4. 要正确执行 HMAC,应在创建摘要(也称为签名)时使用 NONCE。 NONCE 的过期时间应该很短。许多实现使用时间戳作为 NONCE,其他实现则由 Web 服务提供 NONCE。为了简单起见,我会选择前者。如果 NONCE 早于 2 或 3 秒,则拒绝该请求。

关于java - javafx 游戏排行榜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36732727/

相关文章:

java - SOAP wsdl 返回 404 未找到

intellij-idea - JavaFX 场景构建器去哪儿了?

JavaFX-8:限制文本字段中的字符数

java - TableView 未显示正确的内容

java - Spring 中的 LazyInitializationException 与 JPA 实体

java - Mac 和 Windows 的 "Valid System process"是什么? (java进程构建器)

java - 不可能的 NPE 被抛出(java)

java - Springfox Bean Validations @Size 注释在列表上无法正常工作

javafx - 如何在javaFX中使 Canvas 可调整大小?

java - 创建完全动态的 GUI