java - 为猜谜游戏保存分数
问题描述
这是我目前在下面的代码。一切正常,但我不知道如何保持随机数的最低猜测分数。我如何跟踪高分(高分是猜测系统给出的随机数所需的最低猜测量)。我是一名初学者程序员,这是我第一次制作 gui,所以我为混乱道歉。
import java.awt.EventQueue;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import javax.swing.SwingConstants;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Image;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import java.awt.Component;
import javax.swing.Box;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
public class GuessingGUI {
private JFrame frmGuessinggame;
private JTextField enterNumber;
private int min = 1;
private int max = 100;
private int guessNumber;
private int guessedNumber;
private int previousGuess;
private int checkGuessedNumber;
double placeHolder;
private int i = 0;
private int l =1;
private JLabel newLabel;
private int seconds = 5;
private int clicked = 0;
private int saveScore = 100;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GuessingGUI window = new GuessingGUI();
window.frmGuessinggame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public GuessingGUI() {
initialize();
while(l>0) {
placeHolder = Math.random() * 100;
guessNumber = (int)placeHolder;
System.out.println(guessNumber);
--l;
}
}
public void reset() {
// Setup the instance
guessedNumber = 0;
guessNumber = 0;
placeHolder = 0;
l=0;
i=0;
placeHolder = Math.random() * 100;
guessNumber = (int)placeHolder;
System.out.println(guessNumber);
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmGuessinggame = new JFrame();
frmGuessinggame.setTitle("GuessingGame");
frmGuessinggame.setBounds(100, 100, 635, 416);
frmGuessinggame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmGuessinggame.getContentPane().setLayout(null);
JLabel winnerLabel = new JLabel("YOU WON!");
winnerLabel.setForeground(Color.YELLOW);
winnerLabel.setFont(new Font("Lucida Grande", Font.BOLD, 30));
winnerLabel.setBounds(15, 94, 193, 124);
frmGuessinggame.getContentPane().add(winnerLabel);
winnerLabel.setVisible(false);
JLabel lblNewLabel = new JLabel("Guess:");
lblNewLabel.setBounds(24, 6, 52, 16);
frmGuessinggame.getContentPane().add(lblNewLabel);
JLabel guessLabel = new JLabel("");
guessLabel.setBounds(68, 6, 61, 16);
frmGuessinggame.getContentPane().add(guessLabel);
JLabel lblNewLabel_1 = new JLabel("Best Score:");
lblNewLabel_1.setBounds(136, 6, 72, 16);
frmGuessinggame.getContentPane().add(lblNewLabel_1);
JLabel bestScore = new JLabel("");
bestScore.setBounds(212, 6, 61, 16);
frmGuessinggame.getContentPane().add(bestScore);
JLabel lblNewLabel_3 = new JLabel("Enter a number between 1 & 100");
lblNewLabel_3.setBounds(325, 94, 216, 16);
frmGuessinggame.getContentPane().add(lblNewLabel_3);
enterNumber = new JTextField();
enterNumber.setBounds(367, 122, 130, 26);
frmGuessinggame.getContentPane().add(enterNumber);
enterNumber.setColumns(10);
JLabel higherLabel = new JLabel("Higher");
higherLabel.setBounds(212, 138, 61, 16);
frmGuessinggame.getContentPane().add(higherLabel);
JLabel lowerLabel = new JLabel("Lower");
lowerLabel.setBounds(212, 178, 61, 16);
frmGuessinggame.getContentPane().add(lowerLabel);
JLabel lblNewLabel_4 = new JLabel("Number is :");
lblNewLabel_4.setBounds(15, 335, 78, 16);
frmGuessinggame.getContentPane().add(lblNewLabel_4);
JLabel numberIs = new JLabel("? ? ?");
numberIs.setBounds(100, 335, 61, 16);
frmGuessinggame.getContentPane().add(numberIs);
JButton guessButton = new JButton("GUESS");
guessButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String entertxt= enterNumber.getText(). replaceAll( " " , "" );
checkGuessedNumber = Integer.parseInt(entertxt);
if(1<=checkGuessedNumber && 100>=checkGuessedNumber) {
guessedNumber = checkGuessedNumber;
System.out.println(guessedNumber);
++i;
}
if(entertxt != "") {
clicked++;
if(guessedNumber == guessNumber) {
System.out.println("Perfect");
numberIs.setText(Integer.toString(guessedNumber));
enterNumber.setEditable( false );
winnerLabel.setVisible(true);
/*
This is where the score should be switched out and stored I think.
If the player guesses a lower number than before then the best score is kept and changed out.
saveScore = clicked;
if(clicked<=saveScore) {
bestScore.setText(Integer.toString(saveScore));
}
*/
}else if( guessNumber > guessedNumber) {
higherLabel.setForeground(Color.GREEN);
}else if (guessNumber < guessedNumber){
lowerLabel.setForeground(Color.RED);
}
guessLabel.setText(Integer.toString(i));
if(guessedNumber == guessNumber) {
}else {
enterNumber.setText("");
}
}
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
higherLabel.setForeground(Color.WHITE);
lowerLabel.setForeground(Color.WHITE);
}
},
1500
);
}
});
guessButton.setBounds(367, 290, 117, 29);
frmGuessinggame.getContentPane().add(guessButton);
JButton btnNewButton = new JButton("GIVE UP!");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String holder = Integer.toString(guessNumber);
numberIs.setText(holder);
enterNumber.setEditable( false );
}
});
btnNewButton.setBounds(265, 248, 117, 29);
frmGuessinggame.getContentPane().add(btnNewButton);
JButton playAgainButton = new JButton("PLAY AGAIN");
playAgainButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
reset();
numberIs.setText("? ? ?");
enterNumber.setEditable( true );
enterNumber.setText("");
guessLabel.setText("");
winnerLabel.setVisible(false);
clicked = 0;
}
});
playAgainButton.setBounds(471, 248, 117, 29);
frmGuessinggame.getContentPane().add(playAgainButton);
}
}
解决方案
你看你在哪里:saveScore = clicked;
?那是放置那行代码的坏地方。如果您设置saveScore
为 equal clicked
,然后在下一行代码中检查是否clicked
小于或等于(<=) ,考虑到您设置为equalsaveScore
的上一行代码,您认为会发生什么?saveScore
clicked
在其正下方saveScore = clicked;
的语句代码块中作为第一行代码移动。只有在你知道确实小于之后才if
使saveScore
等于。clicked
clicked
saveScrore
推荐阅读
- javascript - 打开新窗口并在新窗口中添加本地存储值
- kotlin - 如何做 livedata.postValue(any()) 的 coVerifyOrder - 它返回 io.mockk.MockKException:匹配模拟签名失败
- r - GGPlot2 中带有子组的森林图
- php - Ajax $_POST 发送到 php 时未设置
- c - 在C中,关闭程序后再次打开该程序然后如何存储该初始值
- amazon-web-services - 没有端口号,域无法工作
- java - 数组长度不同?
- ios - NSNotificationCenter 可以在不同框架之间进行通信吗?
- cmake - 不要展开 CMake 列表变量
- javascript - react-pose 延迟姿势组高度转换,直到孩子之后