【问题描述】
用 JAVA 语言设计如下界面的石头剪刀布游戏。游戏的一方点击界面上石头、剪刀、布按钮,游戏的 另一方计算机随机选择,然后给出游戏结果。
2.2【基本要求】
按照下面给出的步骤设计石头剪刀布游戏,并完成以下工作:
1. 在“//”后给出必要的注释;
2. 为程序添加菜单;至少 2 个菜单:结果显示方式和关于游戏;结果显示方式菜单有 3 个菜单项:文本
显示、图形显示、结束游戏;实现菜单中的功能,自行搜索能体现石头、剪刀、布的图形或图片,用 这些图形或图片显示游戏结果。
第一步,引用需要的包或类;
第二步,定义一个窗口类,并实现 ActionListener 接口,把需要的组件定义放到类里;
第三步,设置窗体。
import java.awt.*; //引入抽象窗口工具类包; import java.awt.event.*; // |
import javax.swing.*; // |
//定义一个窗口类,该类实现 ActionListener 接口;
public class work11 extends JFrame implements ActionListener{
JButton jiandao,shitou,bu,clear; JPanel pane12,panel1;
JLabel label;
//定义 JButton 对象; //
//
public work11() {
setTitle("窗体"); //设置窗体标题,修改标题为“石头剪刀布游戏”; setLocation(250,250); //设置窗体左上顶点坐标;
-3-
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); panel1.add(jiandao); panel1.add(bu); panel1.add(clear); pane12.add(label);
//把 shitou 放进 panel1 中; //
//
//
//
add(panel1,BorderLayout.NORTH); // add(pane12,BorderLayout.CENTER); // }
第七步,实现 ActionListener 接口方法,使得按下按钮后执行方法里的代码;
//实现 ActionListener 接口方法,当按下按钮就会调用该方法,可以称为事件响应器;
public void actionPerformed(ActionEvent e) {
if(e.getSource()==shitou) { //如果你按下的是 shitou 按键时,就会执行以下操作; inti=((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; 操作,到 break 结束;(必须要添加 break,不然会一直执行下去);
case 1 :label.setText("你出石头,电脑出剪子,恭喜你赢了!");break; 同理;
//当 i=0 时,执行后续 //当 i=1 时,与上
-4-
case 2 :label.setText("你出石头,电脑出布,很遗憾你输了!");break; 同理; else if (e.getSource()==bu) { //如果你按下的是 bu 按键时,与上同理; int i=((int)(Math.random()*10))%3; case 0 :label.setText("你出布,电脑出布,平局!");break; //当 i=2 时,与上 |
}} int i=((int)(Math.random()*10))%3; else if(e.getSource()==clear)//当你按下 clear 按键时,直接输出 label.setText(); { label.setText("选择剪刀、石头、布开始游戏"); } |
第八步,添加主方法,进行测试;
}
package 实习;
import java.awt.*; //引入抽象窗口工具类包; import java.awt.event.*; //
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*; //
//author:Guo Jinglong
//school:taiyuanligong
//time:7/12
//定义一个窗口类,该类实现 ActionListener 接口;
public class demo02 extends JFrame implements ActionListener {
JButton jiandao, shitou, bu, clear; //定义 JButton 对象;
JPanel pane12, panel1; //定义 Jpanel 对象;
JLabel label; //定义 JLabel 对象;
public demo02() //定义一个窗口类,该类实现 ActionListener 接口;
{
setTitle("石头剪刀布游戏"); //设置窗体标题,修改标题为“石头剪刀布游戏”;
setLocation(250, 250); //设置窗体左上顶点坐标;
setSize(350, 350); //设置窗体大小,修改窗体大小为:350×350;
// 第四步,根据需求建立对象,这里只需要 4 个 JButton 对象,2 个 JPanel 对象,1 个 JLabel 对象;
panel1 = new JPanel(); // 建立Jpanel对象
panel1.setBackground(Color.yellow); // 给Jpanel对象创建背景
shitou = new JButton("石头"); // 建立JButton对象
jiandao = new JButton("剪刀"); //建立JButton对象
bu = new JButton("布"); // 建立JButton对象
clear = new JButton("清空"); // 建立JButton对象
pane12 = new JPanel(); // 建立Jpanel对象
pane12.setBackground(Color.green); // 给JPanel对象建立背景
label = new JLabel("选择剪刀、石头、布开始游戏"); // 建立JLabel对象
shitou.addActionListener(this); //给所有的Jbutton对象添加监听器 给 shitou 添加事件监听器;
bu.addActionListener(this); //给 bu 添加事件监听器;
jiandao.addActionListener(this); // 给 jiaodao 添加事件监听器;
clear.addActionListener(this); // 给 clear 添加事件监听器;
// 把所有的新添加的对象都放进去窗体里面,先放进组件类,再放进窗体类
panel1.add(shitou); //把 shitou 放进 panel1 中; //
panel1.add(jiandao); //把 jiandao 放进 panel1 中; //
panel1.add(bu); //把 bu 放进 panel1 中; //
panel1.add(clear); //把 clear 放进 panel1 中; //
pane12.add(label); //把 label 放进 pane12 中; //
add(panel1, BorderLayout.NORTH); // 把面板Panel1放到窗口中
add(pane12, BorderLayout.CENTER); // 把面板pane12放到窗口中
}
public static void main(String agrs[]) {//添加一个主函数,对窗体显示情况进行测试;
demo02 frame = new demo02(); //初始化窗体对象;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭按钮;
frame.setVisible(true); //使窗体可见;
}
// 事件响应器
@Override
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: //当 i=0 时,执行后续
label.setText("你出石头,电脑出石头,平局!");
break;
case 1: //当 i=1 时,与上
label.setText("你出石头,电脑出剪子,恭喜你赢了!");
break;
case 2: //当 i=2 时,与上
label.setText("你出石头,电脑出布,很遗憾你输了!");
break;
}
} 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("选择剪刀、石头、布开始游戏");
}
}
}