设计题目——石头剪刀布游戏

1.问题描述

用 JAVA 语言设计如下界面的石头剪刀布游戏。游戏的一方点击界面上石头、剪刀、布按钮,游戏的另一方计算机随机选择,然后给出游戏结果。

2.基本要求

按照下面给出的步骤设计石头剪刀布游戏,并完成以下工作:

  1. 在“//”后给出必要的注释;
  2. 为程序添加菜单;至少 2 个菜单:结果显示方式和关于游戏;结果显示方式菜单有 3 个菜单项:文本
    显示、图形显示、结束游戏;实现菜单中的功能,自行搜索能体现石头、剪刀、布的图形或图片,用
    这些图形或图片显示游戏结果。
注意: 加注释的代码直接在代码块中体现。不重复写了!

3.设计方案

1.定义work11方法 继承 JFrame 成为一个窗体。
2.在窗体中,声明 Jpanel JButton 组件
3.为每一个组件 注册事件监听器
4.在触发事件以后,给出事件处理机制。

4.功能模块划分

  1. GUI图形界面
  2. 事件处理机制
  3. 菜单栏选择结果显示
  4. Main方法

5.算法思想

在GUI编程中,使用对应的布局管理器。设置Jpanel 和 Jbutton 的样式
事件处理机制中,在触发事件源以后,进行事件处理。能够在不同的模块之间反复跳跃。
改变结果显示,使之前的显示消失。并且不能重新声明对象。

6.代码实现

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.yellow); // 修改panel1的背景颜色 黄色shitou = new JButton("石头"); // 实例化 Jbutton 对象jiandao =new JButton("剪刀"); //实例化 Jbutton 对象bu = new JButton("布"); //实例化 Jbutton 对象clear = new JButton("清空"); //实例化 Jbutton 对象panel2=new JPanel(); // 实例化 JPanel2 对象panel2.setBackground(Color.green); // 修改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("");//设置文本为空break;case 2:label.setIcon(new ImageIcon("src\\FingerGuess\\buequalbu.png"));//label 显示图片label.setText("");//设置文本为空break;}}else if(e.getSource() == clear) {label.setText("选择剪刀, 石头, 布开始游戏!");//label 显示文本label.setIcon(new ImageIcon("sec\\FingerGuess\\white.png"));//设置显示图片为空}}}
}//ItenListener 实现ActionListener接口,用于给菜单栏添加事件处理机制public class ItemListener implements ActionListener {public void actionPerformed(ActionEvent e) {//JMenuItem menuItem = (JMenuItem) e.getSource();//System.out.println("您单击的是菜单项:" + menuItem.getText());测试点击菜单按钮是否有相应的过程代码if(e.getActionCommand().equals("图形显示")) {ImageIcon icon1 = new ImageIcon("src\\FingerGuess\\shitou.png");//实例化图片对象ImageIcon icon2 = new ImageIcon("src\\FingerGuess\\jiandao.png");ImageIcon icon3 = new ImageIcon("src\\FingerGuess\\bu.png");ImageIcon icon4 = new ImageIcon("src\\FingerGuess\\clear.jpg");icon1.setImage(icon1.getImage().getScaledInstance(40,40,0));//设置图片大小 ,适配按钮大小icon2.setImage(icon2.getImage().getScaledInstance(40,40,0));icon3.setImage(icon3.getImage().getScaledInstance(40,40,0));icon4.setImage(icon4.getImage().getScaledInstance(40,40,0));shitou.setText("");//修改按钮文本为空jiandao.setText("");bu.setText("");clear.setText("");shitou.setIcon(icon1);//给按钮添加图片jiandao.setIcon(icon2);bu.setIcon(icon3);clear.setIcon(icon4);//修改label 显示图形flag = false;//修改flag 改变显示效果}if(e.getActionCommand().equals("文本显示")) {shitou.setText("石头");jiandao.setText("剪刀");bu.setText("布");clear.setText("清空");shitou.setForeground(Color.black);jiandao.setForeground(Color.black);bu.setForeground(Color.black);clear.setForeground(Color.black);ImageIcon icon1 = new ImageIcon(" ");shitou.setIcon(icon1);jiandao.setIcon(icon1);bu.setIcon(icon1);clear.setIcon(icon1);//修改label 显示文本flag = true;//修改flag 改变显示方式label.setIcon(new ImageIcon(" "));//设置显示图片为空label.setText("选择剪刀, 石头, 布开始游戏!");//设置文本显示文字}if(e.getActionCommand().equals("结束游戏")) {System.exit(0);//退出}}}//主函数 测试public static void main(String[] args) {work11 frame = new work11();  //声明并实例化对象frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // 设置窗体关闭按钮frame.setVisible(true);                                  // 使窗体可见}
}
注:程序中使用的图片链接 链接:https://pan.baidu.com/s/1luqkXfWbQvVRse8GlImCag

提取码:dc1j
若失效 请私信我!

在代码中所用的图片我使用相对路径。大家把下载好的图片放到和java文件同一目录下即可。也可以使用绝对路径:加盘符哦!

JAVA课程设计——石头剪刀布相关推荐

  1. JAVA课程设计--石头剪刀布

    1.项目简介 设计并实现一个和计算机交互的剪刀.石头.布游戏.人和计算机各选择一项,然后决出胜负.程序必须随机选取一项但不表示出来,然后提示用户选择.当用户选择后,程序同时显示出计算机和用户的选择并且 ...

  2. java课程设计指导记录表_JAVA课程设计指导书ofr2012级.doc

    JAVA课程设计指导书ofr2012级 <Java面向对象程序设计> 课程设计指导书 专 业: XXX软服XX班 指导教师: XXXX 计算机与信息工程学院 2013年12月26日 一.目 ...

  3. JAVA课程设计——“小羊吃蓝莓”小游戏

    JAVA课程设计--"小羊吃蓝莓"小游戏 1. 团队课程设计博客链接 http://www.cnblogs.com/HXY071/p/7061216.html 2. 个人负责模块或 ...

  4. Java课程设计基于ssm的微信小程序

    Java课程设计, 基于ssm的微信小程序 后端涉及技术spring.mysql等 效果查看请扫一扫 喜欢可以点赞哟

  5. ATM柜员机JAVA课程设计_ATM柜员机学年论文设计(Java课程设计)

    内容简介: ATM柜员机学年论文设计(Java课程设计),共23页,4599字,附源程序. 一. 程序介绍3 二. 开发环境搭建3 1. MyEclipse 5.5.1 GA安装3 2. MyEcli ...

  6. java中国象棋网络对弈,java课程设计---中国象棋对弈系统

    java课程设计---中国象棋对弈系统 1 目目 录录 摘要 1 关键字 1 正文 2 1.程序设计说明. 2 1.1 程序的设计及实现 2 1.1.1搜索引擎的实现(engine包) . 2 1.1 ...

  7. 计算器小程序java课程设计,java课程设计----计算器小程序报告.doc

    java课程设计----计算器小程序报告.doc #####学院JAVA语言课程设计报告小程序计算器系统管理班级:#######姓名:#####指导老师:###时间:2012年6月25日至6月29日2 ...

  8. ATM柜员机JAVA课程设计_JAVA课程设计报告银行ATM机系统.doc

    JAVA课程设计报告银行ATM机系统 Java课程设计报告 题 目 银行ATM机系统 所在院系 软件学院 学生姓名 金磊 专 业 R机械+软件 班 级 R机械094 学 号 2011年 7 月 15日 ...

  9. java课程设计 考试系统,java课程设计考试系统.

    java课程设计考试系统.Tag内容描述: 1.目 录 第一章第一章 引言引言 3 1 1目的 3 1 2名词解释 3 1 3参考资料 3 1 4文档结构 3 第第 2 章章远景远景 4 2 1项目概 ...

最新文章

  1. 安装 WordPress 时一些常见问题
  2. SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具
  3. 【中级软考】函数参数传递传值与传引用的区别(global关键字,函数内定义全局变量)
  4. Golang之channel操作
  5. tomcat自动运行磁盘任意位置上的项目、使用Maven对tomcat进行自动部署
  6. Github 新学入门
  7. curl循环监控_阿里巴巴开源性能监控神器Arthas
  8. Knative Eventing 之 Sequence 介绍
  9. Qt工作笔记-对qmake的认识【两篇转载结合】
  10. 一个项目中能提出哪些数据库优化_阿里资深技术专家曲山:优秀的数据库存储引擎应具备哪些能力?...
  11. 利用MapShaper将.shp文件转换成JSON文件
  12. Java字符编码转换过程说明
  13. 野村综合研究所李智慧:日本金融科技是制度先行而非技术先行
  14. eclipserunas里没有选项_在电脑浏览器里阅读某一微信公众号所有文章
  15. web 原型设计工具_适用于Web设计人员的13+种原型设计工具
  16. 解决VScode终端管理员运行问题
  17. linux中pid gid tgid tid的区别和联系
  18. PTA L2-032 彩虹瓶(2019GPLT)
  19. 怎么求中位数和分位数 概率密度函数_计量经济学中的“条件”与“无条件”...
  20. (转)2008年精典骗术, 2009年你还会上当吗?

热门文章

  1. echarts:多组折线-图
  2. 抽样定理和奈奎斯特准的区别和联系
  3. matlab 基础函数
  4. Ubuntu系统安装中文输入法教程
  5. CSS3字体与文本效果
  6. WIN7开机蓝屏STOP:0x000000D1 ndis.sys文件出问题
  7. 钢琴瀑布流 Piano-MIDI(接入电钢琴等设备MIDI接口 通过钢琴的弹奏实时显示瀑布流线条)程序发布
  8. 基于微信小程序实现番茄钟专注时间项目演示【附项目源码+论文说明】分享
  9. 51单片机定时器实验
  10. 信息爆炸与信息加工增值