package FingerGuess;
import java.awt.*; //引入抽象窗口工具包 setVisible BorderLayout JFrame 继承
import java.awt.event.*; //引入事件处理机制 panel ActionListener Actionevent
import javax.swing.*;//引入swing 组件 设置窗口 setDefaultCloseOperation setText(JLabel)组件
//第二步,定义一个窗口类,并实现 ActionListener 接口,把需要的组件定义放到类里为了方便调用;
public class work11 extends JFrame {
/*这涉及到序列化机制的问题,序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
当把对象写进流里就会根据此机制生成一个相应的序号,从流里读取对象时就根据这个序号来检查对象的完整性,
生成序号的过程有点繁琐,而当你在一个实现了serializable的类里声明一个static final serialVersionUID的long型常量以后,
序列化机制就不会计算它的序号了,而是直接使用这个常量作为以后提取对象的依据。
*/
//如果不添加这两个字段会有程序警告:serializable 类 work11 未声明类型为 long 的静态终态 serialVersionUID 字段
private static long xxxxxxL;
private static final long serialVersionUID = xxxxxxL;
JButton jiandao,shitou,bu,clear; //定义 JButton 对象;
JPanel panel2,panel1; // 定义 JPanel 对象
JLabel label; // 定义JLabel对象
//设置窗体。构造函数
public work11() {
setTitle("石头剪刀布游戏"); //设置窗体标题,修改标题为“石头剪刀布游戏”;
setLocation(250,250); //设置窗体左上顶点坐标;- 4 -
setSize(400,350); //设置窗体大小,修改窗体大小为:350×350; 这里为例方便之后的图形显示,我将长度改为了400px。
//根据需求建立对象,这里只需要 4 个 JButton 对象,2 个 JPanel 对象,1 个 JLabel 对象;
panel1 =new JPanel(); // 实例化JPanel对象
panel1.setBackground(Color.red); // 修改panel1的背景颜色 红色
shitou = new JButton("石头"); // 实例化 Jbutton 对象
jiandao =new JButton("剪刀"); //实例化 Jbutton 对象
bu = new JButton("布"); //实例化 Jbutton 对象
clear = new JButton("清空"); //实例化 Jbutton 对象
panel2=new JPanel(); // 实例化 JPanel2 对象
panel2.setBackground(Color.blue); // 修改JPanel2 背景颜色 为蓝色
label =new JLabel("选择剪刀、石头、布开始游戏"); // 新建一个Jlabel对象
//设置按钮大小
shitou.setPreferredSize(new Dimension(80,40));
jiandao.setPreferredSize(new Dimension(80,40));
bu.setPreferredSize(new Dimension(80,40));
clear.setPreferredSize(new Dimension(80,40));
//给所有 JButton 对象注册事件监听器;
shitou.addActionListener(new jbutton()); //在事件触发后,调用actionPerformed 做相应处理
jiandao.addActionListener(new jbutton()); //这里的this 指的是 本类中的成员方法(事件处理机制)
bu.addActionListener(new jbutton());
clear.addActionListener(new jbutton());
// 把所有的新添加的对象都放进去窗体里面,先放进组件类,再放进窗体类
panel1.add(shitou);//JPanel 默认布局 FlowLayOut 一直水平排列按钮。窗口大小不合适,可能会导致按钮无法显示
panel1.add(jiandao);
panel1.add(bu);
panel1.add(clear);
panel2.add(label);
//定义 panel1 和panel2的 位置
add(panel1, BorderLayout.NORTH); //JFrame类 继承的方法 用于添加组件
add(panel2, BorderLayout.CENTER);//该语法 相当于 this.add this 指的是窗体
//创建菜单
JMenuBar menuBar = new JMenuBar();// 创建菜单栏对象
setJMenuBar(menuBar);// 将菜单栏对象添加到窗体的菜单栏中
JMenu menu1 = new JMenu("结果显示方式");// 创建菜单对象
menuBar.add(menu1);// 将菜单对象添加到菜单栏对象中
JMenuItem menuItem1 = new JMenuItem("文本显示");// 创建菜单项对象
menuItem1.addActionListener(new ItemListener());// 为菜单项添加事件监听器
menu1.add(menuItem1);// 将菜单项对象添加到菜单对象中
JMenuItem menuItem2 = new JMenuItem("图形显示");// 创建菜单项对象
menuItem2.addActionListener(new ItemListener());// 为菜单项添加事件监听器
menu1.add(menuItem2);// 将菜单项对象添加到菜单对象中
JMenuItem menuItem3 = new JMenuItem("结束游戏");// 创建菜单项对象
menuItem3.addActionListener(new ItemListener());// 为菜单项添加事件监听器
menu1.add(menuItem3);// 将菜单项对象添加到菜单对象中
JMenu menu2 = new JMenu("关于游戏");// 创建菜单对象
menuBar.add(menu2);// 将菜单对象添加到菜单栏对象中
JMenuItem menuItem4 = new JMenuItem("小帅工作室");
//menuItem4.addActionListener(new ItemListener());// 为菜单项添加事件监听器
menu2.add(menuItem4);// 将菜单项对象添加到菜单对象中
JMenuItem menuItem5 = new JMenuItem("联系方式:");
//menuItem5.addActionListener(new ItemListener());// 为菜单项添加事件监听器
menu2.add(menuItem5);// 将菜单项对象添加到菜单对象中
JMenuItem menuItem6 = new JMenuItem("QQ:88888");
//menuItem6.addActionListener(new ItemListener());// 为菜单项添加事件监听器
menu2.add(menuItem6);// 将菜单项对象添加到菜单对象中
}
boolean flag = true;
//jbutton实现 ActionListener 接口方法,使得按下按钮后执行方法里的代码 可以称为事件响应器;
public class jbutton implements ActionListener{
public void actionPerformed(ActionEvent e) {
int i = ((int)(Math.random()*10))%3;
//System.out.print(i + " ");测试点击按钮是否正确相应代码
if(flag) {
if(e.getSource() == shitou) {
//int i = ((int)(Math.random()*10))%3;//电脑随机出拳 0代表石头 1代表剪刀 2代表布
switch(i) {
case 0:
label.setText("你出石头,电脑出石头,平局!"); //label 显示文本
break;
case 1:
label.setText("你出石头,电脑出剪刀,恭喜你赢了!");//label 显示文本
break;
case 2:
label.setText("你出石头,电脑出布,很遗憾你输了!");//label 显示文本
break;
}
}else if(e.getSource() == jiandao){
//int i = ((int)(Math.random()*10))%3;//电脑随机出拳 0代表石头 1代表剪刀 2代表布
switch(i) {
case 0:
label.setText("你出剪刀,电脑出石头,很遗憾你输了!");//label 显示文本
break;
case 1:
label.setText("你出剪刀,电脑出剪刀,平局!");//label 显示文本
break;
case 2:
label.setText("你出剪刀,电脑出布,恭喜你赢了!");//label 显示文本
break;
}
}else if(e.getSource() == bu){
//int i = ((int)(Math.random()*10))%3;//电脑随机出拳 0代表石头 1代表剪刀 2代表布
switch(i) {
case 0:
label.setText("你出布,电脑出石头,恭喜你赢了!");//label 显示文本
break;
case 1:
label.setText("你出布,电脑出剪刀,很遗憾你输了!");//label 显示文本
break;
case 2:
label.setText("你出布,电脑出布,平局!");//label 显示文本
break;
}
}else if(e.getSource() == clear) {
label.setText("选择剪刀, 石头, 布开始游戏!");//label 显示文本
}
}else {
if(e.getSource() == shitou) {
//int i = ((int)(Math.random()*10))%3;//电脑随机出拳 0代表石头 1代表剪刀 2代表布
switch(i) {
case 0:
label.setIcon(new ImageIcon("src\\FingerGuess\\shitouequalshitou.png")); //label 显示图片
label.setText("");//设置文本为空
break;
case 1:
label.setIcon(new ImageIcon("src\\FingerGuess\\shitouwinjiandao.png"));//label 显示图片
label.setText("");//设置文本为空
break;
case 2:
label.setIcon(new ImageIcon("src\\FingerGuess\\shitoudefeatbu.png"));//label 显示图片
label.setText("");//设置文本为空
break;
}
}else if(e.getSource() == jiandao){
//int i = ((int)(Math.random()*10))%3;//电脑随机出拳 0代表石头 1代表剪刀 2代表布
switch(i) {
case 0:
label.setIcon(new ImageIcon("src\\FingerGuess\\jiandaodefeatshitou.png"));//label 显示图片
label.setText("");//设置文本为空
break;
case 1:
label.setIcon(new ImageIcon("src\\FingerGuess\\jiandaoequaljiandao.png"));//label 显示图片
label.setText("");//设置文本为空
break;
case 2:
label.setIcon(new ImageIcon("src\\FingerGuess\\jiandaowinbu.png"));//label 显示图片
label.setText("");//设置文本为空
break;
}
}else if(e.getSource() == bu){
//int i = ((int)(Math.random()*10))%3;//电脑随机出拳 0代表石头 1代表剪刀 2代表布
switch(i) {
case 0:
label.setIcon(new ImageIcon("src\\FingerGuess\\buwinshitou.png"));//label 显示图片
label.setText("");//设置文本为空
break;
case 1:
label.setIcon(new ImageIcon("src\\FingerGuess\\budefeatjiandao.png"));//label 显示图片
label.setText("");//设置文本为�
11李畅源代码.rar
需积分: 6 124 浏览量
2022-11-30
11:34:52
上传
评论
收藏 3KB RAR 举报
2201_75528740
- 粉丝: 0
- 资源: 1
最新资源
- 基于yolov5识别算法实现的DNF自动脚本源码.zip
- 基于Python实现的自动化办公项目.zip
- 基于python实现的基于PyQt5和爬虫的小说阅读系统.zip
- 机械设计整经机上纱自动化sw20非常好的设计图纸100%好用.zip
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈