现在我正在做一个石头剪刀布项目。
这很简单,但我是 Java 新手,并且在游戏的一些方面苦苦挣扎。
我的基本游戏一切正常,但我正在尝试添加一个得分系统,它显示在顶角或底角,每次你赢了你的分数都会上升,和电脑一样,我没有不过,真的决定把它们放在哪里。
我使用JLabel
s 作为数字并且我一直在尝试一些方法,但一些失败的方法仍然存在。
我一直在使用整数到字符串作为标签。我在有人得分时更新数字和定位JLabel
s 时都遇到了麻烦。
到目前为止,与分数有关的大部分内容都在代码底部附近的 score 方法中,并且大多数评分事物的变量是yourNum
, yourScore
, compScore
, compNum
.
对于定位问题,我希望使用绝对定位,但我不完全理解如何将它与我的 一起使用JLabel
,所以如果有人能解释如何在我的情况下使用它,那就太好了。这是我的完整代码。
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) {
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();
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);
}
}
}