【经典项目】Java实现打地鼠小游戏(附源码)

一、游戏回顾

打地鼠游戏是一款简单而有趣的反应游戏。游戏中,你需要在地洞中出现的地鼠出现时迅速点击它们,以获得分数。以下是一般的打地鼠游戏玩法介绍:

  1. 准备阶段:游戏开始时,你会看到一个由多个地洞组成的游戏界面。地洞中会随机出现地鼠。

  2. 游戏开始:地鼠会在不同的地洞中随机出现,你的任务是在它们消失之前尽快点击它们。

  3. 点击地鼠:当地鼠出现时,你需要迅速将光标移动到它所在的地洞,并点击鼠标或触摸屏上的相应区域,以消灭地鼠。

  4. 计分规则:每次成功点击地鼠都会获得一定的分数,分数通常会在地鼠消失后显示出来。你可以尝试在规定的时间内获得尽可能高的分数。

  5. 时间限制:游戏通常会设定一个时间限制,比如60秒。你需要在规定的时间内点击尽可能多的地鼠,以获得最高分数。

  6. 结束游戏:当时间用尽后,游戏结束,你可以看到你的分数以及其他相关信息,比如最高分、击中率等。

【预期效果】

击打地鼠可以加分,如果是炸弹,就会发生爆炸进行扣分。

二、分析实现

1、添加地鼠

维护一个mouses数组,随机往里面添加老鼠或者是炸弹。

    //添加地鼠方法public void addMouses() {imgMouse = new ImageIcon(this.getClass().getResource("image/ms.png"));imgMouseHit = new ImageIcon(this.getClass().getResource("image/mss.png"));imgBomb = new ImageIcon(this.getClass().getResource("image/bomb.png"));imgBoom = new ImageIcon(this.getClass().getResource("image/boom.png"));mouses = new JLabel[9];for (int i = 0; i < mouses.length; i++) {mouses[i] = new JLabel();mouses[i].setSize(imgMouse.getIconWidth(), imgMouse.getIconHeight());//mouses[i].setIcon(imgMouse);mouses[i].addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e) {Object obj = e.getSource();if (obj instanceof JLabel) {JLabel label = (JLabel) obj;if (label.getIcon() != null && label.getIcon() == imgMouse) {qiao.play();label.setIcon(imgMouseHit);label.setSize(imgMouseHit.getIconWidth(), imgMouseHit.getIconHeight());score += 10;shows[1].setText("当前分数:" + score);} else if (label.getIcon() != null && label.getIcon() == imgBomb) {boom.play();label.setIcon(imgBoom);label.setSize(imgBoom.getIconWidth(), imgBoom.getIconHeight());life--;shows[0].setText("剩余生命:" + life);}}}public void mousePressed(MouseEvent e) {setCursor(myCursor2);}public void mouseReleased(MouseEvent e) {setCursor(myCursor);}});this.getContentPane().add(mouses[i]);}mouses[0].setLocation(213, 140);mouses[1].setLocation(382, 140);mouses[2].setLocation(552, 140);mouses[3].setLocation(185, 267);mouses[4].setLocation(382, 267);mouses[5].setLocation(578, 267);mouses[6].setLocation(160, 405);mouses[7].setLocation(382, 405);mouses[8].setLocation(600, 405);}

 【初始化9个洞】

    //线程public void run() {while (true) {while (isPause) {try {Thread.sleep(100);} catch (Exception e) {}}int i = (int) (Math.random() * 9);int j = (int) (Math.random() * 9);try {Thread.sleep(500);if (mouses[i].getIcon() == null) {mouses[i].setIcon(imgMouse);}if (mouses[j].getIcon() == null && i != j) {mouses[j].setIcon(imgBomb);}x = 2500 - 20 * tb.getValue();if (x >= 2100) {level = "菜鸟";shows[2].setText("当前难度:" + level);} else if (x >= 1300) {level = "入门";shows[2].setText("当前难度:" + level);} else if (x >= 700) {level = "中级";shows[2].setText("当前难度:" + level);} else {level = "大师";shows[2].setText("当前难度:" + level);}Thread.sleep(x);if (mouses[i].isShowing()) {mouses[i].setIcon(null);}if (mouses[j].isShowing()) {mouses[j].setIcon(null);}} catch (Exception e) {}if (life == 0) {winMessage("you are die!");}if (time == 0) {winMessage("时间到");}}}

 2、计时器的实现

利用sleep方法,代码如下。

    //时间倒计时public void timeCount() {timerCount.schedule(new TimerTask() {public void run() {while (true) {while (isPause) {try {Thread.sleep(100);} catch (Exception e) {}}time--;shows[3].setText("剩余时间:" + time);if (time == 0) {shows[3].setText("剩余时间:" + time);}try {Thread.sleep(1000);} catch (Exception e) {}}}}, 1000);}

三、效果展示

【进度条】

【打地鼠】

【打到炸弹】

四、源码获取

Java实现的打地鼠小游戏资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/457601.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用python编写爬虫,爬取房产信息

题目 报告要求 工程报告链接放在这里 https://download.csdn.net/download/Samature/88816284使用 1.安装jupyter notebook 2.用jupyter notebook打开工程里的ipynb文件&#xff0c;再run all就行 注意事项 可能遇到的bug 暂无&#xff0c;有的话私信我

C:\Users\ShuYixiao>mysql ‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

这个错误信息表明 mysql 命令在你的系统中没有被识别。这通常意味着 MySQL 没有安装在你的电脑上&#xff0c;或者它的可执行文件路径没有添加到系统的环境变量中。以下是一些解决这个问题的步骤&#xff1a; 确认 MySQL 是否已安装&#xff1a; 如果你还没有安装 MySQL&#x…

Oracle Vagrant Box 扩展根文件系统

需求 默认的Oracle Database 19c Vagrant Box的磁盘为34GB。 最近在做数据库升级实验&#xff0c;加之导入AWR dump数据&#xff0c;导致空间不够。 因此需要对磁盘进行扩容。 扩容方法1&#xff1a;预先扩容 此方法参考文档Vagrant, how to specify the disk size?。 指…

【ADI PLL 】时序小结

原文地址&#xff1a;https://ez.analog.com/cn/support-reference-library/rf/f/forum/95507/thread ADI的图一如既往的需要“推敲” ADI的所有锁相环产品控制接口均为三线串行控制接口。如上所示。要注意的是&#xff1a;在ADI的PLL产品中&#xff0c;大多数的时序图如图上所…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(六)NodeJS入门——http模块

047_http模块_获取请求行和请求头 hello&#xff0c;大家好&#xff0c;那第二节我们来介绍一下如何在这个服务当中来提取 HTT 请求报文的相关内容。首先先说一下关于报文的提取的方法&#xff0c;我在这个文档当中都已经记录好了&#xff0c;方便大家后续做一个快速的查阅。 …

腾讯云游戏联机服务器配置价格表,4核16G/8核32G/4核32G/16核64G

2024年更新腾讯云游戏联机服务器配置价格表&#xff0c;可用于搭建幻兽帕鲁、雾锁王国等游戏服务器&#xff0c;游戏服务器配置可选4核16G12M、8核32G22M、4核32G10M、16核64G35M、4核16G14M等配置&#xff0c;可以选择轻量应用服务器和云服务器CVM内存型MA3或标准型SA2实例&am…

Leetcode刷题笔记题解(C++):590. N 叉树的后序遍历

思路&#xff1a;类似于二叉树的排序&#xff0c;这里需要将子树进行依次递归遍历&#xff0c;前序遍历也与之类似 /* // Definition for a Node. class Node { public:int val;vector<Node*> children;Node() {}Node(int _val) {val _val;}Node(int _val, vector<N…

mysql 多数据源

依赖 <dependencies><!--mysql连接--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--多数据源--><dependency><g…

14.0 Zookeeper环球锁实现原理

全局锁是控制全局系统之间同步访问共享资源的一种方式。 下面介绍zookeeper如何实现全民锁&#xff0c;讲解他锁和共享锁两类全民锁。 排他锁 排他锁&#xff08;Exclusive Locks&#xff09;&#xff0c;又被称为写锁或独占锁&#xff0c;如果事务T1对数据对象O1加上排他锁…

成功解决RuntimeError: batch2 must be a 3D tensor

成功解决RuntimeError: batch2 must be a 3D tensor。 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;问题初探&#xff1a;为什么会出现这个错误&#xff1f;&#x1f333;&#x1f333;解决方案&#xff1a;如何避免和修复这个错误&#x…

【漏洞复现】飞鱼星路由器COOKIE.CGI权限绕过漏洞

Nx01 产品简介 成都飞鱼星科技股份有限公司是服务于企业、商业和家庭用户&#xff0c;提供智能易用的网络通讯管理设备与创新科技的增值服务。 Nx02 漏洞描述 飞鱼星家用智能路由存在逻辑缺陷漏洞。攻击者利用该漏洞可直接登录系统后台&#xff0c;操作访问后台任意页面。 Nx…

【数据分享】1929-2023年全球站点的逐月平均降水量(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全…