- 石头剪刀布
1.问题描述
【问题描述】
用 JAVA 语言设计如下界面的石头剪刀布游戏。游戏的一方点击界面上石头、剪刀、布按钮,游戏的
另一方计算机随机选择,然后给出游戏结果。
【基本要求】
按照下面给出的步骤设计石头剪刀布游戏,并完成以下工作:
1. 在“//”后给出必要的注释;
2. 为程序添加菜单;至少 2 个菜单:结果显示方式和关于游戏;结果显示方式菜单有 3 个菜单项:文本
显示、图形显示、结束游戏;实现菜单中的功能,自行搜索能体现石头、剪刀、布的图形或图片,用
这些图形或图片显示游戏结果。
第一步,引用需要的包或类;
import java.awt.*;
//引入抽象窗口工具类包;
import java.awt.event.*; //
import javax.swing.*;
//
第二步,定义一个窗口类,并实现 ActionListener 接口,把需要的组件定义放到类里;
//定义一个窗口类,该类实现 ActionListener 接口;
public class work11 extends JFrame implements ActionListener{
JButton jiandao,shitou,bu,clear;
//定义 JButton 对象;
JPanel pane12,panel1;
//
JLabel label;
//
第三步,设置窗体。
public work11() {
setTitle("窗体");
//设置窗体标题,修改标题为“石头剪刀布游戏”;
setLocation(250,250);
//设置窗体左上顶点坐标;- 4 -
setSize(300,300);
//设置窗体大小,修改窗体大小为:350×350;
第四步,根据需求建立对象,这里只需要 4 个 JButton 对象,2 个 JPanel 对象,1 个 JLabel 对象;
panel1 =new JPanel();
//
panel1.setBackground(Color.yellow); //
shitou = new JButton("石头");
//
jiandao =new JButton("剪刀");
//
bu = new JButton("布");
//
clear = new JButton("清空");
//
pane12=new JPanel();
//
pane12.setBackground(Color.green);
//
label =new JLabel("选择剪刀、石头、布开始游戏"); //
第五步,给所有 JButton 对象注册事件监听器;
shitou.addActionListener(this);
//给 shitou 添加事件监听器;
bu.addActionListener(this);
//
jiandao.addActionListener(this);
//
clear.addActionListener(this);
//
第六步,把所有新添加的对象都逐次放进窗体中,例如下面,先放进面板里面,然后再把面板放进窗体中,
放置位置可以自定义;
panel1.add(shitou);
//把 shitou 放进 panel1 中;
panel1.add(jiandao);
//
panel1.add(bu);
//
panel1.add(clear);
//
pane12.add(label);
//
add(panel1,BorderLayout.NORTH);
//
add(pane12,BorderLayout.CENTER);
//
}
第七步,实现 ActionListener 接口方法,使得按下按钮后执行方法里的代码;
//实现 ActionListener 接口方法,当按下按钮就会调用该方法,可以称为事件响应器;
public void actionPerformed(ActionEvent e) {
if(e.getSource()==shitou) {
//如果你按下的是 shitou 按键时,就会执行以下操作;
int i=((int)(Math.random()*10))%3; //定义一个 int 型变量 i,利用 Math.random()函数获取
随机数,因为*10 所以随机数区间为[0,10),最后强制转换为 int 型,再除 3 取余,最后的赋值给 i;
switch(i)
//i 为 0 时就执行 case 0 操作,以此类推;
{
case 0 :label.setText("你出石头,电脑出石头,平局!");break;
//当 i=0 时,执行后续
操作,到 break 结束;(必须要添加 break,不然会一直执行下去);
case 1 :label.setText("你出石头,电脑出剪子,恭喜你赢了!");break;
//当 i=1 时,与上
同理;- 5 -
case 2 :label.setText("你出石头,电脑出布,很遗憾你输了!");break;
//当 i=2 时,与上
同理;
}}
else if (e.getSource()==bu) {
//如果你按下的是 bu 按键时,与上同理;
int i=((int)(Math.random()*10))%3;
switch(i)
{
case 0 :label.setText("你出布,电脑出布,平局!");break;
case 1 :label.setText("你出布,电脑出石头,恭喜你赢了!");break;
case 2 :label.setText("你出布,电脑出剪刀,很遗憾你输了!");break;
}}
else if (e.getSource()==jiandao) {
//当你按下 jiandao 按键时,与上同理;
int i=((int)(Math.random()*10))%3;
switch(i)
{
case 0 :label.setText("你出剪刀,电脑出剪刀,平局!");break;
case 1 :label.setText("你出剪刀,电脑出布,恭喜你赢了!");break;
case 2 :label.setText("你出剪刀,电脑出石头,很遗憾你输了!");break;
}}
else if(e.getSource()==clear)//当你按下 clear 按键时,直接输出 label.setText();
{ label.setText("选择剪刀、石头、布开始游戏"); }
}
第八步,添加主方法,进行测试;
public static void main(String agrs[]) {//添加一个主函数,对窗体显示情况进行测试;
work11 frame =new work11();
//初始化窗体对象;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体关闭按钮;
frame.setVisible(true);
//使窗体可见;
}
}
package 石头剪刀布;
import java.awt.*;//引入抽象窗口工具包;
import java.awt.event.*;//
import java.util.Calendar;
import javax.swing.*;//
import javax.swing.border.Border;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;
@SuppressWarnings("serial")
class work11 extends JFrame implements ActionListener{
JButton jiandao,shitou,bu,clear;
JPanel panel12,panel11;
JLabel label;
public work11() {
setTitle("石头剪刀布");//窗体标题
setLocation(250,250);//设置窗体左上顶点坐标
setSize(350,350);//窗体大小
JMenuBar mbar=new JMenuBar();//创建菜单栏
setJMenuBar(mbar);
JMenu m1=new JMenu("结果显示方式");
JMenu m2=new JMenu("关于游戏");
mbar.add(m1);
mbar.add(m2);
JMenuItem mil1=new JMenuItem("文本显示");//实现菜单项
JMenuItem mil2=new JMenuItem("图形显示");
mil2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
work13 frame2=new work13();
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setVisible(true);
}
});
final JMenuItem mil3=new JMenuItem("结束游戏");
mil3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int t=JOptionPane.showConfirmDialog(mil3, "确定要结束游戏吗?");
if(t==JOptionPane.YES_OPTION) {
System.exit(0);
}
else if(t==JOptionPane.NO_OPTION) {
System.out.println(" ");
}
else {
System.out.println();
}
}
});
m1.add(mil1);
m1.add(mil2);
m1.add(mil3);
panel11=new JPanel();
panel11.setBackground(Color.yellow);
shitou=new JButton("石头");
jiandao=new JButton("剪刀");
bu=new JButton("布");
clear=new JButton("清空");
panel12=new JPanel();
panel12.setBackground(Color.green);
label=new JLabel("选择剪刀,石头,布开始游戏");
shitou.addActionListener(this);//给shitou添加事件监听器;
bu.addActionListener(this);
jiandao.addActionListener(this);
clear.addActionListener(this);
//把对象放入面板里,将面板放入窗体里
panel11.add(shitou);
panel11.add(jiandao);
panel11.add(bu);
panel11.add(clear);
panel12.add(label);
add(panel11,BorderLayout.NORTH);
add(panel12,BorderLayout.CENTER);
}
//实现ActionListener接口方法
public void actionPerformed(ActionEvent e) {
if(e.getSource()==shitou) {
int i=((int)(Math.random()*10))%3;
switch(i) {
case 0:label.setText("你出石头,电脑出石头,平局!");
break;
case 1:label.setText("你出石头,电脑出剪刀,恭喜你赢了!");
break;
case 2:label.setText("你出石头,电脑出布,很遗憾你输了!");
break;
}
}
else if(e.getSource()==bu) {
int i=(int)(Math.random()*10)%3;
switch(i) {
case 0:label.setText("你出布,电脑出布,平局!");break;
case 1:label.setText("你出布,电脑出石头,恭喜你赢了!");break;
case 2:label.setText("你出布,电脑出剪刀,很遗憾你输了!");break;
}
}
else if(e.getSource()==jiandao) {
int i=(int)((Math.random()*10))%3;
switch(i) {
case 0:label.setText("你出剪刀,电脑出剪刀,平局!");break;
case 1:label.setText("你出剪刀,电脑出布,恭喜你赢了!");break;
case 2:label.setText("你出剪刀,电脑出石头,很遗憾你输了!");break;
}
}
else if(e.getSource()==clear) {
label.setText("选择剪刀,石头,布开始游戏");
}
}
}
class work13 extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JButton jiandao,shitou,bu,clear;
JPanel panel2,panel1;
JLabel label;
public work13() {
ImageIcon a=new ImageIcon("D:\\jiandao.jpg");
ImageIcon b=new ImageIcon("D:\\shitou.jpg");
ImageIcon c=new ImageIcon("D:\\bu.jpg");
a.setImage(a.getImage().getScaledInstance(50, 50, 0));
b.setImage(b.getImage().getScaledInstance(50, 50, 0));
c.setImage(c.getImage().getScaledInstance(50, 50, 0));
setTitle("图像");
setLocation(250,250);
setSize(300,300);
panel1=new JPanel();
panel1.setBackground(Color.yellow);
shitou =new JButton();
shitou.setIcon(b);
jiandao =new JButton();
jiandao.setIcon(a);
bu=new JButton();
bu.setIcon(c);
clear=new JButton("清空");
panel2=new JPanel();
panel2.setBackground(Color.green);
label=new JLabel("选择剪刀石头布开始游戏");
shitou.addActionListener(this);
bu.addActionListener(this);
jiandao .addActionListener(this);
clear.addActionListener(this);
panel1.add(shitou);
panel1.add(jiandao);
panel1.add(bu);
panel1.add(clear);
panel2.add(label);
add(panel1,BorderLayout.NORTH);
add(panel2,BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==shitou) {
int i=((int)(Math.random()*10))%3;
switch(i) {
case 0:label.setText("你出石头,电脑出石头,平局!");
break;
case 1:label.setText("你出石头,电脑出剪刀,恭喜你赢了!");
break;
case 2:label.setText("你出石头,电脑出布,很遗憾你输了!");
break;
}
}
else if(e.getSource()==bu) {
int i=(int)(Math.random()*10)%3;
switch(i) {
case 0:label.setText("你出布,电脑出布,平局!");break;
case 1:label.setText("你出布,电脑出石头,恭喜你赢了!");break;
case 2:label.setText("你出布,电脑出剪刀,很遗憾你输了!");break;
}
}
else if(e.getSource()==jiandao) {
int i=(int)((Math.random()*10))%3;
switch(i) {
case 0:label.setText("你出剪刀,电脑出剪刀,平局!");break;
case 1:label.setText("你出剪刀,电脑出布,恭喜你赢了!");break;
case 2:label.setText("你出剪刀,电脑出石头,很遗憾你输了!");break;
}
}
else if(e.getSource()==clear) {
label.setText("选择剪刀,石头,布开始游戏");
}
}
}
public class Two{
public static void main(String[] args) {
work11 frame=new work11();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}