永发信息网

java 小游戏

答案:5  悬赏:0  手机版
解决时间 2021-11-13 21:47
  • 提问者网友:不爱我么
  • 2021-11-13 11:17
java 小游戏
最佳答案
  • 五星知识达人网友:十鸦
  • 2021-11-13 12:46
import java.util.Random;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.*;

public class SmallGame extends JFrame {
private Random r;

private String[] box = { "剪刀", "石头", "布" };

private JComboBox choice;

private JTextArea ta;

private JLabel lb;

private int win = 0;

private int loss = 0;

private int equal = 0;

public SmallGame() {
initial();//调用initial方法,就是下面定义的那个.该方法主要是初始界面.
pack();
setTitle("游戏主界面");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(400, 300);
setVisible(true);
}

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

public void initial() {
r = new Random(); // 生成随机数
choice = new JComboBox();//初始化choice这个下拉框.也就是你选择出剪子还是石头什么的那个下拉框..
for (int i = 0; i < box.length; i++) {//为那个下拉框赋值.用前面定义的private String[] box = { "剪刀", "石头", "布" };附值.这样下拉框就有三个选项了..
choice.addItem(box[i]);
}
ta = new JTextArea(3, 15);//初始化那个文本域3行15列
ta.setEditable(false);//让用户不能编辑那个文本域即不能在里面写东西
JButton okBut = new JButton("出招");//新建一个出招的按钮
okBut.addActionListener(new ActionListener() {//给出招按钮加个监听.意思就是监听着这个按钮看用户有没有点击它..如果点击就执行下面这个方法
public void actionPerformed(ActionEvent e) {//就是这个方法
ta.setText(getResult());//给那个文本域赋值..就是显示结果 赋值的是通过getResult()这个方法得到的返回值 getResult()这个方法下面会讲
lb.setText(getTotal());//给分数那个LABEL赋值..就是显示分数..赋值的是通过getTotal()这个方法得到的返回值
}
});
JButton clearBut = new JButton("清除分数");//新建一个清楚分数的按钮
clearBut.addActionListener(new ActionListener() {//同上给他加个监听
public void actionPerformed(ActionEvent e) {//如果用户点击了就执行这个方法
ta.setText("");//给文本域赋值为""..其实就是清楚他的内容
win = 0;//win赋值为0
loss = 0;//同上
equal = 0;//同上
lb.setText(getTotal());//给显示分数那个赋值..因为前面已经都赋值为0了..所以这句就是让显示分数那都为0
}
});
lb = new JLabel(getTotal());//初始化那个显示分数的东西
JPanel choicePanel = new JPanel();//定义一个面板..面板就相当于一个画图用的东西..可以在上面加按钮啊文本域什么的..
choicePanel.add(choice);//把下拉框加到面板里
choicePanel.add(okBut);//把出招按钮加到面板里
choicePanel.add(clearBut);//把清楚分数按钮加到面板里
JScrollPane resultPanel = new JScrollPane(ta);//把文本域加到一个可滚动的面板里面..JScrollPane就是可滚动的面板..这样如果那个文本域内容太多就会出现滚动条..而不是变大
JPanel totalPanel = new JPanel();//再定义个面板..用来显示分数的..
totalPanel.add(lb);//把那个显示分数的label加到里面去
Container contentPane = getContentPane();//下面就是布局了..
contentPane.setLayout(new BorderLayout());
contentPane.add(choicePanel, BorderLayout.NORTH);
contentPane.add(resultPanel, BorderLayout.CENTER);
contentPane.add(totalPanel, BorderLayout.SOUTH);
}

public String getResult() {//获得结果的方法 返回值是一个String..这个返回值会用来显示在文本域里面
String tmp = "";
int boxPeop = choice.getSelectedIndex();//获得你选择的那个的索引..从0开始的..
int boxComp = getBoxComp();//获得电脑出的索引..就是随机的0-2的数
tmp += "你出:\t" + box[boxPeop];//下面你应该明白了..
tmp += "\n电脑出:\t" + box[boxComp];
tmp += "\n结果:\t" + check(boxPeop, boxComp);
return tmp;
}

public int getBoxComp() {//就是产生一个0-2的随机数..
return r.nextInt(3);//Random的nextInt(int i)方法就是产生一个[0-i)的随机整数 所以nextInt(3)就是[0-2]的随机数
}

public String check(int boxPeop, int boxComp) {//这个就是判断你选择的和电脑选择的比较结果..是输是赢还是平..boxPeop就是你选择的..boxComp就是电脑选择的..
String result = "";
if (boxPeop == (boxComp + 1) % 3) {//(boxComp + 1) % 3 电脑选择的加上1加除以3取余..也就是如果电脑选0这个就为1..这个判断的意思就是如果电脑选0并且你选1..那么就是电脑选了
//private String[] box = { "剪刀", "石头", "布" };这里面下标为0的..你选了下标为1的..就是电脑选剪刀你选石头..所以你赢了..如果电脑选1..(boxComp + 1) % 3就为2..意思就是
//电脑选了石头你选了布..所以你赢了..另外一种情况你明白了撒..只有三种情况你赢..所以这里都包含了..也只包含了那三种..
result = "你赢了!";
win++;//赢了就让记你赢的次数的那个变量加1
} else if (boxPeop == boxComp) {//相等当然平手了
result = "平";
equal++;//同上了
} else {//除了赢和平当然就是输了..
result = "你输了!";
loss++;//同上
}
return result;
}

public int getPoint() {
return (win - loss) * 10;
}

public String getTotal() {
return "赢:" + win + " 平:" + equal + " 输:" + loss + " 得分:"
+ getPoint();
}
}

希望你能明白哈。。
全部回答
  • 1楼网友:走死在岁月里
  • 2021-11-13 14:31
SOFJ
  • 2楼网友:洎扰庸人
  • 2021-11-13 14:12
这个程序输出游戏结果的函数是这个:
public String check(int boxPeop, int boxComp) {
String result="";
// if(boxPeop == (boxComp+1)%3) {
result="你赢了!"; //这里就是判断输赢的 相等是平 因为他的数组里存的是 剪刀 石头 布 就是后面的比前面的厉害而且是循环 所以如果你出的和他选择的后一样的话(例:你出石头 他出剪刀)就说明你赢了 考虑到循环 因为数组大小是3 所以取余3
win++;
}
else if(boxPeop == boxComp) {
result="平";
equal++;
}
else {
result="你输了!";
loss++;
}
return result;
}
先说这个 不明白百度hi我~
  • 3楼网友:举杯邀酒敬孤独
  • 2021-11-13 13:39
initial(),调用后面的initial()方法,初始化程序界面
pack(),父类java.awt.Windows的方法,用于设置窗口大小适合窗口的内容。

后面initial()方法中:
JButton okBut ……
定义了一个“出招”按钮,用户按下后会做两件事:调用getResult()并显示在ta中,调用getTotal()并显示在lb中。

JButton clearBut……
定义了一个“清除分数”按钮,用户按下后会做:清除ta的内容、清除win, loss, equal的统计,调用getTotal()并显示在lb中。

JScrollPane resultPanel……
定义一个可滚动的面板resultPanel,显示ta(游戏结果)
定义一个普通面板totalPanel,显示lb(游戏统计)

getBoxComp()
返回一个3以内的随机整数(0~2),即计算机的出招(0表示剪刀、1表示石头、2表示布)

if(boxPeop == (boxComp+1)%3)
判断是否赢,因为:
1(石头)能胜 0(剪刀),而 1 == (0+1) % 3
2(布)能胜 1(石头), 而 2 == (1+1)% 3
0(剪刀)能胜 2(布),而 0 == (2+1) % 3
所以这个判断是正确的。
  • 4楼网友:从此江山别
  • 2021-11-13 13:06
import java.util.Random;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.*;
public class SmallGame extends JFrame{
private Random r;
private String[] box = {"剪刀","石头","布"};
private JComboBox choice;
private JTextArea ta;
private JLabel lb;
private int win=0;
private int loss=0;
private int equal=0;
public SmallGame(){
// initial(); //初始化控件
// pack(); //调整控件大小
setTitle("游戏主界面");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(400, 300);
setVisible(true);
}
public static void main(String []args){
new SmallGame();
}
public void initial(){
r = new Random(); //生成随机数
choice = new JComboBox();
for(int i=0; i }
ta = new JTextArea(3,15);
ta.setEditable(false);
// JButton okBut = new JButton("出招"); //okBut为出招按钮
// okBut.addActionListener(new ActionListener(){ //添加监听程序
// public void actionPerformed(ActionEvent e){ //动作响应
// ta.setText(getResult()); //取得结果每次的结果并显示
// lb.setText(getTotal()); //取得总得分并显示
// }
// });
// JButton clearBut = new JButton("清除分数"); //设置cleatBut,功能为清除分数
// clearBut.addActionListener(new ActionListener() { //添加监听
// public void actionPerformed(ActionEvent e){ //事件响应
// ta.setText(""); //清空当前结果里的内容
// win=0; //将win的次数清0
// loss=0; //lose清0
// equal=0; //equal清0
// lb.setText(getTotal()); //总分显示当前总分
// }
// });
// lb = new JLabel(getTotal()); //重新设置lb
JPanel choicePanel = new JPanel();
choicePanel.add(choice);
choicePanel.add(okBut);
choicePanel.add(clearBut);
// JScrollPane resultPanel = new JScrollPane(ta); //定义一个可滚动的面板
// JPanel totalPanel = new JPanel(); //定义一个新面板
// totalPanel.add(lb); //将lb添加至面板
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(choicePanel, BorderLayout.NORTH); contentPane.add(resultPanel, BorderLayout.CENTER); contentPane.add(totalPanel, BorderLayout.SOUTH);
}
public String getResult() {
String tmp = "";
int boxPeop = choice.getSelectedIndex();
int boxComp = getBoxComp();
tmp += "你出:\t" + box[boxPeop];
tmp += "\n电脑出:\t" + box[boxComp];
tmp += "\n结果:\t" + check(boxPeop, boxComp);
return tmp;
}
// public int getBoxComp() { //返回一个3之内的随机数的函数
// return r.nextInt(3); //return随机数字
// }
public String check(int boxPeop, int boxComp) {
String result="";
// if(boxPeop == (boxComp+1)%3) { //判断玩家赢的条件,(boxComp+1)%3 == boxPeop表示玩家出的招克电脑的招
result="你赢了!";
win++;
}
else if(boxPeop == boxComp) {
result="平";
equal++;
}
else {
result="你输了!";
loss++;
}
return result;
}
public int getPoint() {
return (win-loss)*10;
}
public String getTotal() {
return "赢:" + win + " 平:" + equal + " 输:" + loss + " 得分:" + getPoint();
}
}

帮你写了些注解,希望对你有帮助
至于如何判断赢的,由于所出的石头剪刀布是根据产生的随机数来确定的, 如果你的数字所表示的招总是克制对方数字表示的招,则你赢。例如:你是数字1剪刀,而电脑则是数字2,表示石头。根据判断的函数,你就赢了 。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯