石头剪刀布

本文介绍如何使用Java Swing库创建一个具有图形界面的石头剪刀布游戏。游戏界面包含石头、剪刀、布和清空按钮,玩家选择后,计算机随机出招并显示游戏结果。此外,还增加了菜单选项,包括文本和图形两种结果显示方式,以及关于游戏的信息。图形结果显示使用了预设的石头、剪刀、布的图片来增强游戏体验。
摘要由CSDN通过智能技术生成

2.1【问题描述】 用 JAVA 语言设计如下界面的石头剪刀布游戏。游戏的一方点击界面上石头、剪刀、布按钮,游戏的 另一方计算机随机选择,然后给出游戏结果。 2.2【基本要求】 按照下面给出的步骤设计石头剪刀布游戏,并完成以下工作: 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); //使窗体可见; } }

代码如下:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class test extends JFrame {
    // 主函数
    static JFrame frm;
    public static void main(String[] args) {
    // 设置窗体
        frm = new JFrame();
        frm.setTitle("石头剪刀布游戏");    // 石头剪刀布游戏
        frm.setLocation(250, 250);        // 设置窗体坐上顶点坐标
        frm.setSize(300, 300);            // 设置窗体大小

        // 建立对象
        JPanel panel1 = new JPanel();
        panel1.setBackground(Color.yellow);
        JButton shitou = new JButton("石头");
        JButton jiandao = new JButton("剪刀");
        JButton bu = new JButton("布");
        JButton clear = new JButton("清空");
        JPanel panel2 = new JPanel();
        panel2.setBackground(Color.green);
        JLabel label = new JLabel("选择剪刀, 石头, 布开始游戏");
        JLabel label1 = new JLabel();
        JLabel label2 = new JLabel();
        // 给所有 JBUtton 对象添加事件约束

        // 把所有的新添加的对象都放进去窗体里面,先放进组件类,再放进窗体类
        panel1.add(shitou);
        panel1.add(jiandao);
        panel1.add(bu);
        panel1.add(clear);
        panel2.add(label);
        panel2.add(label1);
        panel2.add(label2);
        frm.add(panel1, BorderLayout.NORTH);
        frm.add(panel2, BorderLayout.CENTER);

        //设置菜单
        JMenuBar mbar = new JMenuBar();
        frm.setJMenuBar(mbar);
        JMenu m1 = new JMenu("结果显示方式");  //设置第一个
        JMenuItem m11 = new JMenuItem("文本显示");    //设置菜单里面的选项
        JMenuItem m12 = new JMenuItem("图形显示");
        JMenuItem m13 = new JMenuItem("结束游戏");
        JMenuItem m2 = new JMenuItem("关于游戏");    //设置第二个
        mbar.add(m1);
        mbar.add(m2);
        m1.add(m11);
        m1.add(m12);
        m1.add(m13);
        //设置关于文本显示的事件监听
        m11.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jiandao.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int i = ((int) (Math.random() * 10)) % 3;
                        switch (i) {
                            case 0:
                                label.setText("你出剪刀,电脑出剪刀,平局!");
                                break;
                            case 1:
                                label.setText("你出剪刀,电脑出布,恭喜你赢了!");
                                break;
                            case 2:
                                label.setText("你出剪刀,电脑出石头,很遗憾你输了!");
                                break;
                        }
                    }
                });
                shitou.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int i = ((int) (Math.random() * 10)) % 3;
                        switch (i) {
                            case 0:
                                label.setText("你出石头,电脑出石头,平局!");
                                break;
                            case 1:
                                label.setText("你出石头,电脑出剪刀,恭喜你赢了!");
                                break;
                            case 2:
                                label.setText("你出石头,电脑出布,很遗憾你输了!");
                                break;
                        }
                    }
                });
                bu.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int i = ((int) (Math.random() * 10)) % 3;
                        switch (i) {
                            case 0:
                                label.setText("你出布,电脑出布,平局!");
                                break;
                            case 1:
                                label.setText("你出布,电脑出石头,恭喜你赢了!");
                                break;
                            case 2:
                                label.setText("你出布,电脑出剪刀,很遗憾你输了!");
                                break;
                        }
                    }
                });
                clear.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        label.setText("选择剪刀、石头、布开始游戏");
                    }
                });
            }
        });
        //设置关于图片显示的事件监听
        m12.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jiandao.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int i = ((int) (Math.random() * 10)) % 3;
                        label1.setIcon(new ImageIcon("D:/石头剪刀布/剪刀.jpg"));
                        switch (i) {
                            case 0:
                                label.setText("你出剪刀,电脑出剪刀,平局!");
                                label2.setIcon(new ImageIcon("D:/石头剪刀布/剪刀.jpg"));
                                break;
                            case 1:
                                label.setText("你出剪刀,电脑出布,恭喜你赢了!");
                                label2.setIcon(new ImageIcon("D:/石头剪刀布/布.jpg"));
                                break;
                            case 2:
                                label.setText("你出剪刀,电脑出石头,很遗憾你输了!");
                                label2.setIcon(new ImageIcon("D:/石头剪刀布/石头.jpg"));
                                break;
                        }
                    }
                });
                shitou.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int i = ((int) (Math.random() * 10)) % 3;
                        label1.setIcon(new ImageIcon("D:/石头剪刀布/石头.jpg"));
                        switch (i) {
                            case 0:
                                label.setText("你出石头,电脑出石头,平局!");
                                label2.setIcon(new ImageIcon("D:/石头剪刀布/石头.jpg"));
                                break;
                            case 1:
                                label.setText("你出石头,电脑出剪刀,恭喜你赢了!");
                                label2.setIcon(new ImageIcon("D:/石头剪刀布/剪刀.jpg"));
                                break;
                            case 2:
                                label.setText("你出石头,电脑出布,很遗憾你输了!");
                                label2.setIcon(new ImageIcon("D:/石头剪刀布/布.jpg"));
                                break;
                        }
                    }
                });
                bu.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int i = ((int) (Math.random() * 10)) % 3;
                        label1.setIcon(new ImageIcon("D:/石头剪刀布/布.jpg"));
                        switch (i) {
                            case 0:
                                label.setText("你出布,电脑出布,平局!");
                                label2.setIcon(new ImageIcon("D:/石头剪刀布/布.jpg"));
                                break;
                            case 1:
                                label.setText("你出布,电脑出石头,恭喜你赢了!");
                                label2.setIcon(new ImageIcon("D:/石头剪刀布/石头.jpg"));
                                break;
                            case 2:
                                label.setText("你出布,电脑出剪刀,很遗憾你输了!");
                                label2.setIcon(new ImageIcon("D:/石头剪刀布/剪刀.jpg"));
                                break;
                        }
                    }
                });
                clear.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        label1.setVisible(false);
                        label2.setVisible(false);
                        label.setText("选择剪刀、石头、布开始游戏");
                    }
                });
            }
        });
        //设置关于结束游戏的事件监听
        m13.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        //设置关于游戏菜单的事件监听
        m2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(test.frm,"游戏名称:石头剪刀布\n游戏版本:1.0.1");
            }
        });
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // 设置窗体关闭按钮
        frm.setVisible(true);                                   // 使窗体可见
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值