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); // 使窗体可见 } }