想起了了大学那会做过这个小游戏,今天重新写一下

首先准备几个素材图片,搜了半天没有,只好自己找了个图片截了一下(如果侵权了联系我删除)。

JFrame画一个主页面,设置了全局的行、列和总数,循环添加所有的地鼠洞并注册点击事件,我把所有的洞存在了一个ArrayList里面(随机访问,减少循环判断)

开一个线程用于地鼠钻出的事件,生成随机数,此位置是空洞的话(否则重新生成),添加地鼠,等设置时间结束,如果没有改变就消失,如此循环执行

添加点击事件,打中地鼠,调用一个线程,执行地鼠消失的事件

/*** 打地鼠页面* Created by will on 2020/7/27.*/
public class MouseFrame extends JFrame implements MouseListener {// 行,列,总数private int row = 6;private int column = 8;private int count = row * column;// 存储每个画面List<JLabel> labelList = new ArrayList();//private JPanel mainPanel = new JPanel(new GridLayout(row, column));// 图片ImageIcon hole = new ImageIcon("./src/main/resources/images/hole.png");ImageIcon mouse1 = new ImageIcon("./src/main/resources/images/mouse1.png");ImageIcon mouse2 = new ImageIcon("./src/main/resources/images/mouse2.png");ImageIcon hit = new ImageIcon("./src/main/resources/images/hit.png");/*** 打地鼠主页面*/public MouseFrame() {// 窗口大小this.setSize(800, 600);// 把窗口位置设置到屏幕中心this.setLocationRelativeTo(null);// 关闭窗口时退出程序this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);this.setTitle("打地鼠");for (int i = 0; i < row; i++) {for (int j = 0; j < column; j++) {JLabel holeLabel = new JLabel(hole);holeLabel.addMouseListener(this);labelList.add(holeLabel);mainPanel.add(holeLabel);}}// 地鼠刷新new Thread(new MouseThread()).start();this.setContentPane(mainPanel);this.setVisible(true);}/*** 鼠标点击事件** @param e*/@Overridepublic void mouseClicked(MouseEvent e) {JLabel holeLabel = (JLabel) e.getSource();// 存在地鼠,调用消失事件if (holeLabel.getIcon() == mouse2) {new Thread(new MouseDisThread(holeLabel)).start();}}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}/*** 地鼠钻出的事件*/class MouseThread implements Runnable {@Overridepublic void run() {while (true) {// 生成随机位置int num = new Random().nextInt(count);// 此位置如果是空的才进行出现的动作,否则生成新位置while (labelList.get(num).getIcon() != hole) {num = new Random().nextInt(count);}// 地鼠出现的动作try {labelList.get(num).setIcon(mouse1);Thread.sleep(100);labelList.get(num).setIcon(mouse2);Thread.sleep(1500);} catch (InterruptedException e) {e.printStackTrace();}// 时间结束还是未点击的装态,设置为消失if (labelList.get(num).getIcon() == mouse2) {labelList.get(num).setIcon(hole);}}}}/*** 被打消失*/class MouseDisThread implements Runnable {JLabel holeLabel;public MouseDisThread(JLabel holeLabel) {this.holeLabel = holeLabel;}@Overridepublic void run() {holeLabel.setIcon(hit);try {Thread.sleep(800);} catch (InterruptedException e1) {e1.printStackTrace();} finally {holeLabel.setIcon(hole);}}}}

java做一个打地鼠小游戏相关推荐

  1. 100行Python代码,做一个打地鼠小游戏

    游戏画面 首先先进行游戏画面排版, class TopWindow(QWidget):def __init__(self, parent=None):super().__init__(parent)s ...

  2. android打地鼠设计报告,android开发中利用handler制作一个打地鼠小游戏

    android开发中利用handler制作一个打地鼠小游戏 发布时间:2020-11-25 15:21:11 来源:亿速云 阅读:136 作者:Leah 这期内容当中小编将会给大家带来有关androi ...

  3. java做过的小游戏

    写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐.代码写的很 ...

  4. 《看聊天记录都学不会Python到游戏实战?太菜了吧》(8)我们开始做一个数字小游戏吧

    本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题.此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将 ...

  5. python大作业数独_python做一个数独小游戏

    最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...

  6. 用C语言做一个迷宫小游戏

    用C语言做一个迷宫小游戏,以下是代码段 这个迷宫游戏使用了递归回溯算法来寻找通往出口的路径.迷宫中的墙用'#'表示,路径用空格表示,入口和出口分别用'S'和'E'表示,已走过的路径用'*'表示.在生成 ...

  7. 基于java制作一个飞机小游戏(学习心得)

    emmm,第一篇博客 用了这么久的csdn,都是在观摩大佬们发帖,一只小萌新瑟瑟发抖,不敢说话,甚 至连代码也不能完全读懂.假期在b站自学(可以说是复习)了java课程,尚学堂的 2018版.链接如下 ...

  8. 用swing设计一个打地鼠小游戏_我用PPT做了这几款互动小游戏,再也不用担心孩子不爱听课了(附可编辑模板)...

    最近小伙伴们留言问的比较多的一个问题是:有没有适合上网课的互动小游戏?我本来想给大家推荐手指操.身体律动的一些小活动,但是我觉得这些你们肯定都已经在用了,我一周磨磨唧唧就写一两篇文章,还是介绍点儿有份 ...

  9. 用swing设计一个打地鼠小游戏_我用PPT做了这几款互动小游戏,再也不用担心孩子不爱听课了...

    ​最近小伙伴们留言问的比较多的一个问题是:有没有适合上网课的互动小游戏?我本来想给大家推荐手指操.身体律动的一些小活动,但是我觉得这些你们肯定都已经在用了,我一周磨磨唧唧就写一两篇文章,还是介绍点儿有 ...

最新文章

  1. Leetcode: Maximal Rectangle
  2. FreePascal - 如何在各个平台中安装CodeTyphon!
  3. flink网络缓冲池
  4. 为什么hbase里没有表会显示表已经存在_0712-6.2.0-HBase快照异常
  5. Kelvin’s Ship-Wave Pattern
  6. mqttnet 详解_MQTT协议详解
  7. 【转】jquery文件上传插件uploadify在.NET中session丢失的解决方案
  8. vscode 设置指南
  9. 17.高性能MySQL --- MySQL 分支与变种
  10. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
  11. 罗马仕php30重量,认真测评 篇三:罗马仕sence8P+两年使用报告
  12. ALM11(QC11)官方中文安装包下载
  13. 去A片马赛克,开发者被抓了。
  14. Hexo博客NexT主题开启文章目录和调整样式
  15. nvidia jetson xavier打开风扇,并设置开机启动
  16. Mysql个人学习总结
  17. 浅析ERP系统--财务
  18. 谷歌发现利用零日漏洞的攻击、黑客通过漏洞入侵红十字会|2月17日全球网络安全热点
  19. 数据库分类和负载均衡方案
  20. mac iPhone更换账号id:app store app更新的问题

热门文章

  1. echarts setoption 不生效
  2. 一个获取ip地址的命令详解
  3. 魔兽争霸war3在笔记本电脑windows7 无法全屏 解决方案
  4. Flutter MaterialApp 和 Scaffold 组件
  5. QT修改应用图标,给按钮添加监听器
  6. win 2008 创建密码重置盘
  7. Java中的三种代理模式解释
  8. SQL存储过程之Insert插入存储过程的创建以及调用
  9. MIDI文件深入剖析
  10. Ubuntu播放midi文件