有人帮我看看这个吗?
这是一个石头剪刀布的小游戏;
但是结果和实际不符合 比如我出剪刀 机器人出布 会显示平手或输等等
中间有很多是布局 其实核心就几句话
大家可以帮我看看吗qaq
package com.rps.swing;
import javax.swing.;
import javax.swing.GroupLayout.;
import javax.swing.LayoutStyle.;
import javax.swing.border.;
import java.awt.*;
import java.util.Random;
/**
主界面
/
class MainFrm extends JFrame {
private JPanel contentPane;
public int plchoice;
public String str;
public int rochoice(){
Random rd=new Random();
if(rd.nextInt(99)<=32){
return 1;
}else if(rd.nextInt(99)>=66){
return 3;
}else{
return 2;
}
}
JButton rock = new JButton("石头");
JButton scis = new JButton("剪刀");
JButton paper = new JButton("布");
public int win(int x,int y){
if((x==1)&&(y==3)){
return 3;
}else if((x==3)&(y==1)){
return 3;
}else{
if(x>y){
return y;
}else {
return x;
}
}
}
public String run(){
int t=win(plchoice,rochoice());
if(plchoice==rochoice()){
str="打成平手了哦。"+String.valueOf(plchoice)+String.valueOf(rochoice());
}else{
if(plchoice==t){
str="恭喜您获得胜利!"+String.valueOf(plchoice)+String.valueOf(rochoice());
}else{
str="失败也不要气馁哦!"+String.valueOf(plchoice)+String.valueOf(rochoice());
}
}
return str;
}
public MainFrm(){
setResizable(false);
setVisible(true);
setTitle("石头剪刀布");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 770, 707);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
//label
JLabel label = new JLabel("石头剪刀布");
label.setFont(new Font("幼圆", Font.BOLD, 52));
//label1
JLabel lb1 = new JLabel("您的手势:");
lb1.setFont(new Font("宋体", Font.BOLD, 30));
//label2
JLabel lb2 = new JLabel("机器人的手势:");
lb2.setFont(new Font("宋体", Font.BOLD, 30));
//label3
JLabel lb3 = new JLabel("VS");
lb3.setFont(new Font("方正姚体", Font.BOLD, 50));
//图片label1
JLabel lbpic1 = new JLabel(new ImageIcon(MainFrm.class.getResource("/com/rps/swing/lbnull.jpg")));
//图片label2
JLabel lbpic2 = new JLabel(new ImageIcon(MainFrm.class.getResource("/com/rps/swing/lbnull.jpg")));
//展示结果
JTextField txt = new JTextField(10);
txt.setFont(new Font("华文新魏", Font.PLAIN, 40));
//Button
rock.setFont(new Font("隶书", Font.BOLD, 40));
scis.setFont(new Font("隶书", Font.BOLD, 40));
paper.setFont(new Font("隶书", Font.BOLD, 40));
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addContainerGap(56, Short.MAX_VALUE)
.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(lbpic1, GroupLayout.PREFERRED_SIZE, 236, GroupLayout.PREFERRED_SIZE)
.addGap(47)
.addComponent(lb3)
.addGap(49)
.addComponent(lbpic2, GroupLayout.PREFERRED_SIZE, 244, GroupLayout.PREFERRED_SIZE)
.addGap(21))
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(rock, GroupLayout.PREFERRED_SIZE, 144, GroupLayout.PREFERRED_SIZE)
.addGap(110)
.addComponent(scis, GroupLayout.PREFERRED_SIZE, 132, GroupLayout.PREFERRED_SIZE)
.addGap(111)
.addComponent(paper, GroupLayout.PREFERRED_SIZE, 126, GroupLayout.PREFERRED_SIZE)
.addGap(35))))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(77)
.addComponent(lb1, GroupLayout.PREFERRED_SIZE, 170, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, 239, Short.MAX_VALUE)
.addComponent(lb2)
.addGap(9)))
.addGap(32))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(157)
.addComponent(txt, GroupLayout.PREFERRED_SIZE, 427, GroupLayout.PREFERRED_SIZE)
.addContainerGap(162, Short.MAX_VALUE))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(233)
.addComponent(label)
.addContainerGap(245, Short.MAX_VALUE))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addContainerGap(138, Short.MAX_VALUE)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(lb1, GroupLayout.PREFERRED_SIZE, 51, GroupLayout.PREFERRED_SIZE)
.addComponent(lb2, GroupLayout.PREFERRED_SIZE, 51, GroupLayout.PREFERRED_SIZE))
.addGap(31)
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING, false)
.addComponent(lbpic2, 0, 0, Short.MAX_VALUE)
.addComponent(lbpic1, GroupLayout.PREFERRED_SIZE, 241, Short.MAX_VALUE))
.addGap(18))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(57)
.addComponent(label, GroupLayout.PREFERRED_SIZE, 54, GroupLayout.PREFERRED_SIZE)
.addGap(188)
.addComponent(lb3)
.addGap(122)))
.addComponent(txt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(30)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(rock)
.addComponent(paper)
.addComponent(scis, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE))
.addContainerGap(48, Short.MAX_VALUE))
);
contentPane.setLayout(gl_contentPane);
rock.addActionListener(e -> {
plchoice=1;
run();
lbpic1.setIcon(new ImageIcon(MainFrm.class.getResource("/com/rps/swing/1.jpg")));
txt.setText(str);
lbpic2.setIcon(new ImageIcon(MainFrm.class.getResource("/com/rps/swing/"+String.valueOf(rochoice())+".jpg")));
});
scis.addActionListener(e -> {
plchoice=2;
run();
lbpic1.setIcon(new ImageIcon(MainFrm.class.getResource("/com/rps/swing/2.jpg")));
txt.setText(str);
lbpic2.setIcon(new ImageIcon(MainFrm.class.getResource("/com/rps/swing/"+String.valueOf(rochoice())+".jpg")));
});
paper.addActionListener(e -> {
plchoice=3;
run();
lbpic1.setIcon(new ImageIcon(MainFrm.class.getResource("/com/rps/swing/3.jpg")));
txt.setText(str);
lbpic2.setIcon(new ImageIcon(MainFrm.class.getResource("/com/rps/swing/"+String.valueOf(rochoice())+".jpg")));
});
}
你win的代码写错了
return x,y,3是想干什么?
不是1代表你赢,2代表电脑赢,3代表平手吗
x是个变量,你咋知道会return个什么玩意,那不变成出锤子就赢,出布就输,这跟出什么不应该有关系,只应该和x与y的关系有关系才对
其实就这样就对了:
if(x==y+1 || x+2==y)
{
return 1;//你赢
}
else if(x==y)
{
return 3;//平手
}
else
{
return 2;//电脑赢
}
归根结底,是你没理解return的到底是个什么东西
你把x和y理解成玩家和电脑两个对象,return谁就是谁赢
但是x和y并不是对象,只不过是锤子剪刀布的其中一种状态
还有,x==1&&y==3,x==3&&y==1,两种截然相反的状态,都返回3,你是认真的吗,这不管把return理解成什么,都说不过去吧