首页 > 解决方案 > 为猜谜游戏保存分数

问题描述

这是我目前在下面的代码。一切正常,但我不知道如何保持随机数的最低猜测分数。我如何跟踪高分(高分是猜测系统给出的随机数所需的最低猜测量)。我是一名初学者程序员,这是我第一次制作 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);
        
        
        
        

}
}

GUI 图像,bestScore 左上角。

标签: javaswinguser-interfaceserialization

解决方案


你看你在哪里:saveScore = clicked;?那是放置那行代码的坏地方。如果您设置saveScore为 equal clicked,然后在下一行代码中检查是否clicked小于或等于(<=) ,考虑到您设置为equalsaveScore的上一行代码,您认为会发生什么?saveScoreclicked

在其正下方saveScore = clicked;的语句代码块中作为第一行代码移动。只有在你知道确实小于之后才if使saveScore等于。clicked clickedsaveScrore


推荐阅读