[JAVA]如何创建排名系统然后将其保存到 .txt 文件?
[JAVA]How to create a Ranking System then saving it to a .txt file?
所以,我有一个"Memory Game",你可以输入你的名字,选择难度(4x4或6x6游戏)然后开始游戏。
当您点击开始时,会弹出一个新的面板并开始游戏。
按钮将是随机的,您每犯一个错误,您就会失去 2 分,而对于每个正确的组合,您将获得 10 分。
最后或者如果您单击退出按钮,将弹出一条消息,说明玩家的姓名、他尝试了多少次(单击 2 个不同的按钮)以及他有多少点数。然后游戏结束并且不保存玩家的分数。
现在,我的问题是,我不知道如何在我的代码中实现排名系统。这将是一些基本的东西,比如,比较所有分数并将它们重新排列为得分最高的分数,依此类推。
所以根据我的研究,我需要一个 Save 方法,当有人完成游戏时,它会将他们的分数保存在一个 .txt 文件中,以及一个 Array 方法,它将分数从最好到最差排列。
这是完整的代码;
private void mostrarResumoJogo() {
resumoJogo = "Jogador: " + objJogadorJogada.getNome() + " " +
"Pontos: " + objJogadorJogada.getPontos() + " " +
"Quantidade de tentativas: " + qtdeTentativas;
JOptionPane.showMessageDialog( null, "" + resumoJogo, "Resumo do Jogo",
JOptionPane.INFORMATION_MESSAGE );
BufferedWriter writer = null;
try {
writer = new BufferedWriter( new FileWriter("Ranking.txt") );
writer.write(resumoJogo);
}
catch ( IOException e) { }
finally {
try {
if (writer != null)
writer.close( );
}
catch ( IOException e) { }
}
setVisible( false );
}
问题是文件总是被新的 .txt 覆盖
我已经尝试创建一个类型文件属性,这样他就不会总是创建另一个 .txt 但没有成功。
这是我需要对这段代码做的最后一件事,但我似乎无法弄清楚,请帮忙。
可能这就是您要找的东西
只需将 APPEND 参数指定为 true,您的更改将不会被覆盖
为了使其不被覆盖,而是在调用 FileWriter 构造函数时附加而不是传递 append=true。
虽然我建议每次只读取和写入整个文件,但我不会这样做。这是因为必须对分数进行排序并重写到文件中。
我建议使用 JAXB 创建一个 XML 文件。这是使用 JAXB 执行此操作的教程:http://www.mkyong.com/java/jaxb-hello-world-example/
The problem is that the file is always overwritten with a new .txt
问题出在这里
writer = new BufferedWriter( new FileWriter( "Ranking.txt"));
每次调用 new FileWriter( "Ranking.txt")
它都会创建一个新的空文件。如果您想向现有文件添加更多数据,您需要通过
以追加模式打开它
writer = new BufferedWriter( new FileWriter( "Ranking.txt", true));
// add this part -^^^^
所以,我有一个"Memory Game",你可以输入你的名字,选择难度(4x4或6x6游戏)然后开始游戏。 当您点击开始时,会弹出一个新的面板并开始游戏。
按钮将是随机的,您每犯一个错误,您就会失去 2 分,而对于每个正确的组合,您将获得 10 分。 最后或者如果您单击退出按钮,将弹出一条消息,说明玩家的姓名、他尝试了多少次(单击 2 个不同的按钮)以及他有多少点数。然后游戏结束并且不保存玩家的分数。
现在,我的问题是,我不知道如何在我的代码中实现排名系统。这将是一些基本的东西,比如,比较所有分数并将它们重新排列为得分最高的分数,依此类推。
所以根据我的研究,我需要一个 Save 方法,当有人完成游戏时,它会将他们的分数保存在一个 .txt 文件中,以及一个 Array 方法,它将分数从最好到最差排列。
这是完整的代码;
private void mostrarResumoJogo() {
resumoJogo = "Jogador: " + objJogadorJogada.getNome() + " " +
"Pontos: " + objJogadorJogada.getPontos() + " " +
"Quantidade de tentativas: " + qtdeTentativas;
JOptionPane.showMessageDialog( null, "" + resumoJogo, "Resumo do Jogo",
JOptionPane.INFORMATION_MESSAGE );
BufferedWriter writer = null;
try {
writer = new BufferedWriter( new FileWriter("Ranking.txt") );
writer.write(resumoJogo);
}
catch ( IOException e) { }
finally {
try {
if (writer != null)
writer.close( );
}
catch ( IOException e) { }
}
setVisible( false );
}
问题是文件总是被新的 .txt 覆盖 我已经尝试创建一个类型文件属性,这样他就不会总是创建另一个 .txt 但没有成功。
这是我需要对这段代码做的最后一件事,但我似乎无法弄清楚,请帮忙。
可能这就是您要找的东西
只需将 APPEND 参数指定为 true,您的更改将不会被覆盖
为了使其不被覆盖,而是在调用 FileWriter 构造函数时附加而不是传递 append=true。
虽然我建议每次只读取和写入整个文件,但我不会这样做。这是因为必须对分数进行排序并重写到文件中。
我建议使用 JAXB 创建一个 XML 文件。这是使用 JAXB 执行此操作的教程:http://www.mkyong.com/java/jaxb-hello-world-example/
The problem is that the file is always overwritten with a new .txt
问题出在这里
writer = new BufferedWriter( new FileWriter( "Ranking.txt"));
每次调用 new FileWriter( "Ranking.txt")
它都会创建一个新的空文件。如果您想向现有文件添加更多数据,您需要通过
writer = new BufferedWriter( new FileWriter( "Ranking.txt", true));
// add this part -^^^^