gpt4 book ai didi

java - 在java swing中创建石头、剪刀、布游戏的建议

转载 作者:行者123 更新时间:2023-12-02 06:26:28 26 4
gpt4 key购买 nike

我正在自学 Java,我想用 GUI 创建一个石头、剪刀、布游戏。我已经使用扫描仪创建了一个基于文本的版本,但我还有很多工作要做。

import javax.swing.JFrame;
import javax.swing.JPanel;

import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;

public class RPS extends JFrame {

JRadioButton rock, paper, scissors;
ButtonGroup choices;

public static void main(String[] args) {
new RPS();
}
public RPS() {
super("Rock, Paper, Scissors");

setSize(400,300);
setResizable(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel p=new JPanel();

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

choices = new ButtonGroup();
choices.add(rock);
choices.add(paper);
choices.add(scissors);

p.add(rock);
p.add(paper);
p.add(scissors);

add(p);

setVisible(true);
}
}

这是我的代码。我已经创建了一个窗口并显示 3 个单选按钮,仅允许选择一个选项。从这里开始,我想实现一个下一个按钮,并创建逻辑以根据这两个选择生成答案。我相信我需要卡片布局,但 Oracle 文档对我没有帮助。我也不知道如何绕过实现逻辑。感谢您的帮助,对于这么长的帖子表示歉意。再次感谢!

抱歉我没说清楚,我想设计这个让一个人轮流,按嵌套按钮,然后第二个人轮流,按完成并得到结果。我会将其呈现给我的八年级类(class)。

最佳答案

现在很高兴在您的程序中实现 CardLayout。此布局的目的是对组件进行分层。就您而言,您需要为每个玩家提供一个面板。所以你需要两个面板。

  1. 玩家 1 的 JPanel(带有自己的三个单选按钮)
  2. 玩家 2 的 JPanel(带有自己的三个单选按钮)

以上两者构成了Card(layered)Layout(您可以将一个堆叠在另一个之上。

  1. 您需要一个标签来显示获胜者
  2. 您需要一个 JPanel 来容纳“下一步”按钮

总而言之,您的布局应该如下所示

  Wrapped in JPanel(new BoderLayout())
-------------------------------------
| label to show status | BorderLayout.NORTH
-------------------------------------
| |
| CardLayout holding |
| two JPanels with RBs | BorderLayout.CENTER
|___________________________________|
|(JPanel) Next JButton | BorderLayout.SOUTH
-------------------------------------

当点击下一个按钮时,可以调用CardLayoutnext()方法来显示下一个面板

示例

private CardLayout cardLayout = new CardLayout(10, 10); // hgap and vgap args
private JPanel cardPanel = new JPanel(cardLayout);

JPanel panel1 = new JPanel(); // holds first player
JPanel panel2 = new JPanel(); // holds second player

cardPanel.add(panel1);
cardPanel.add(panel2);

nextButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
cardLayout.next(cardPanel);
}
});

参见CardLayout docs对于其他移动方法

逻辑部分

  1. 正如我之前建议的,您应该有六个单选按钮(每个玩家三个)
  2. 在您的逻辑中,您可以检查选择了哪些内容
  3. 您可能需要 checkWinner JButton 来执行该操作。

示例

 JRadioButton p1Scissors = new JRadioButton("Scissors");
JRadioButton p1Paper = new JRadioButton("Paper");
JRadioButton p1Rock = new JRadioButton("Rock");
// group them

JRadioButton p2Scissors = new JRadioButton("Scissors");
JRadioButton p2Paper = new JRadioButton("Paper");
JRadioButton p2Rock = new JRadioButton("Rock");
// group them

JLabel statusLabel = new JLabel(" ");

JButton checkWinner = new JButton("Check Winner"); // You can add to bottom panel

checkWinner.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if (p1Scissors.isSelected() && p2Rock.isSelected()){
statusLabel.setText("Player 2 wins: Rock beats Scissors");
} else if ( ..... ) {
...
}

...
}
});

关于java - 在java swing中创建石头、剪刀、布游戏的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com