【问题标题】:Add Score Counter for Java GUI Project为 Java GUI 项目添加分数计数器
【发布时间】:2015-04-23 05:55:43
【问题描述】:

我正在开发一个使用 java GUI 的石头剪刀布游戏,并且一切正常,但我想为用户和计算机添加一个分数计数器,它们都位于屏幕的角落,并且 1 是每次任何一方赢得比赛时添加。我没有做到最好的三分之二或类似的东西,这只是一场无休止的比赛,我希望它随着你的发展而加起来。这是我的代码,.jpg 和 .png 文件只是我用于背景和其他内容的图像。我已经尝试创建一种方法来保持分数(方法 Score 和其他与 yourScore 和 compScore 相关的东西),但我无法显示它并且欢迎任何新想法,尽管我几乎所有东西都使用了 JLabels。

public class main extends JFrame implements ActionListener {
    JButton rock;
    JButton scissors;
    JButton paper;
    JLabel left;
    ImageIcon rock1;
    ImageIcon scissors1;
    ImageIcon scissors2;
    ImageIcon paper2;
    ImageIcon paper1;
    ImageIcon rock2;
    ImageIcon back;
    ImageIcon scissorsb;
    JLabel right;
    String[] RPS = { "Rock", "Paper", "Scissors" };
    Random rand = new Random();
    int num = rand.nextInt(RPS.length);
    int yourChoice = -1;
    JTextField texter;
    JLabel winner;
    Container contentPane = this.getContentPane();
    SpringLayout layout = new SpringLayout();
    String Tie = "Tie";
    String compwins = "Computer wins!";
    String youwin = "You win!";
    int yourNum = 9;
    JLabel yourScore;
    int compNum = 0;
    JLabel compScore;
    Font winnerFont = new Font("Font", Font.PLAIN, 35);

    public main() {
        super("Rock Paper Scissors");
        back = new ImageIcon("image1233450665506.png");
        paper1 = new ImageIcon("paper1.png");
        paper2 = new ImageIcon("paper2.png");
        scissors1 = new ImageIcon("scissors1.png");
        scissors2 = new ImageIcon("scissors2.png");
        rock1 = new ImageIcon("rock1.png");
        rock2 = new ImageIcon("rock2.png");

        JLabel background = new JLabel(back);
        left = new JLabel();
        right = new JLabel();
        winner = new JLabel();
        yourScore = new JLabel();
        compScore = new JLabel();
        right.setVisible(true);
        this.setVisible(true);
        this.setSize(1280, 985);
        winner.setFont(winnerFont);
        winner.setHorizontalAlignment(SwingConstants.CENTER);
        yourScore.setFont(winnerFont);
        compScore.setFont(winnerFont);

        contentPane.setLayout(layout);

        contentPane.add(winner);
        contentPane.add(left);
        contentPane.add(right);
        contentPane.add(yourScore);
        contentPane.add(compScore);
        layout.putConstraint(SpringLayout.NORTH, left, 300, SpringLayout.NORTH,
                contentPane);
        layout.putConstraint(SpringLayout.NORTH, right, 300,
                SpringLayout.NORTH, contentPane);
        layout.putConstraint(SpringLayout.EAST, right, 0, SpringLayout.EAST,
                contentPane);

        rock = new JButton("Rock");
        paper = new JButton("Paper");
        scissors = new JButton("Scissors");

        layout.putConstraint(SpringLayout.WEST, rock, 500, SpringLayout.WEST,
                contentPane);
        this.add(rock, BorderLayout.NORTH);
        layout.putConstraint(SpringLayout.SOUTH, rock, -30, SpringLayout.SOUTH,
                contentPane);
        layout.putConstraint(SpringLayout.WEST, rock, 40, SpringLayout.NORTH,
                contentPane);
        this.add(paper, BorderLayout.NORTH);
        layout.putConstraint(SpringLayout.SOUTH, paper, -30,
                SpringLayout.SOUTH, contentPane);
        layout.putConstraint(SpringLayout.WEST, paper, 200, SpringLayout.NORTH,
                contentPane);
        this.add(scissors, BorderLayout.NORTH);
        layout.putConstraint(SpringLayout.SOUTH, scissors, -30,
                SpringLayout.SOUTH, contentPane);
        layout.putConstraint(SpringLayout.WEST, scissors, 360,
                SpringLayout.NORTH, contentPane);
        rock.setBackground(Color.GRAY);
        rock.setPreferredSize(new Dimension(140, 50));
        paper.setBackground(Color.WHITE);
        paper.setPreferredSize(new Dimension(140, 50));
        scissors.setBackground(Color.LIGHT_GRAY);
        scissors.setPreferredSize(new Dimension(140, 50));
        rock.repaint();
        scissors.repaint();
        paper.repaint();
        contentPane.add(background);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        rock.doClick();
        paper.doClick();
        scissors.doClick();
        rock.addActionListener(this);
        paper.addActionListener(this);
        scissors.addActionListener(this);

    }

    public static void main(String args[]) {
        main framer = new main();
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

        if (arg0.getSource() == rock) {
            left.setIcon(rock1);
            yourChoice = 0;
        } else if (arg0.getSource() == paper) {
            left.setIcon(paper1);
            yourChoice = 1;
        } else if (arg0.getSource() == scissors) {
            left.setIcon(scissors1);
            yourChoice = 2;
        }

        computerMove();

        // result.repaint();
        Score();
    }

    public void Score() {
        layout.putConstraint(SpringLayout.NORTH, winner, 50,
                SpringLayout.NORTH, contentPane);
        layout.putConstraint(SpringLayout.WEST, winner, 560, SpringLayout.WEST,
                contentPane);
        layout.putConstraint(SpringLayout.SOUTH, compScore, 100,
                SpringLayout.SOUTH, contentPane);
        layout.putConstraint(SpringLayout.EAST, compScore, 600,
                SpringLayout.EAST, contentPane);
        yourScore = new JLabel(Integer.toString(yourNum));
        compScore = new JLabel(Integer.toString(compNum));

        if (num == 0 && yourChoice == 0) {
            winner.setText(Tie);
            winner.repaint();
        } else if (num == 1 && yourChoice == 0) {
            yourNum++;
            yourScore.repaint();
            winner.setText(compwins);
            winner.repaint();
        } else if (num == 2 && yourChoice == 0) {
            compNum++;
            compScore.repaint();
            winner.setText(youwin);
            winner.repaint();
        } else if (num == 0 && yourChoice == 1) {
            yourNum++;
            yourScore.repaint();
            winner.setText(youwin);
            winner.repaint();
        } else if (num == 1 && yourChoice == 1) {
            winner.setText(Tie);
            winner.repaint();
        } else if (num == 2 && yourChoice == 1) {
            compNum++;
            compScore.repaint();
            winner.setText(compwins);
            winner.repaint();
        } else if (num == 0 && yourChoice == 2) {
            compNum++;
            compScore.repaint();
            winner.setText(compwins);
            winner.repaint();
        } else if (num == 1 && yourChoice == 2) {
            yourNum++;
            yourScore.repaint();
            winner.setText(youwin);
            winner.repaint();
        } else if (num == 2 && yourChoice == 2) {
            winner.setText(Tie);
            winner.repaint();
        }
        winner.repaint();
        yourScore.repaint();
        compScore.repaint();
        yourScore.setForeground(Color.RED);
        compScore.setForeground(Color.RED);
        winner.setForeground(Color.RED);

    }

    public void computerMove() {
        num = rand.nextInt(RPS.length);
        if (num == 0) {
            right.setIcon(rock2);
        } else if (num == 1) {
            right.setIcon(paper2);
        } else if (num == 2) {
            right.setIcon(scissors2);
        }

    }

}

【问题讨论】:

    标签: java swing user-interface jlabel


    【解决方案1】:

    如果您使用Absolute Positioning,这将非常容易,它允许您通过坐标设置 JLabels、JButton 等,而不必定位它们并使代码变得超级混乱。

    然后对于分数部分,我将创建一个新的 JLabel,一个用于计算机,一个用于播放器,显示在左/右上方并显示分数。

    希望对你有帮助!

    【讨论】:

    • 谢谢!我会尝试一下,我已经设置了 JLabels,但是我遇到了另一个问题,试图让它们在每次获胜时增加,我将 yourScore 和 compScore 整数设置为 yourNum 和 compNum 的字符串,但是我不太了解它是如何工作的以及如何处理它,所以如果你能解释整数到字符串的工作原理,那就太好了
    • 好吧,如果你有一个字符串并且想要将它更改为一个整数,那么尝试这样做: int myScore = Integer.parseInt(myStringScore);其中 myStringScore 是一个字符串。
    • 好的,我意识到使用整数到字符串我很好,但现在的问题是绝对定位对我不起作用,当我将面板布局设置为 null 时,就像在你放置的链接中一样,什么都没有出现了,我确定我应该在那里放些别的东西,但我不知道那是什么,而且当我把它不带空时,这个数字最终会在它的右边加上数字,因为我点击
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多