java初学者:一个经典又全新改造的游戏——打地鼠

🎮 打地鼠游戏:挑战你的反应速度和策略思维!

嘿,大家好!今天我想和大家分享一个经典又全新改造的游戏——打地鼠!这个游戏不仅有趣,而且充满挑战,非常适合用来锻炼你的反应速度。
更棒的是,我将带你深入了解这个游戏的机制,以及背后的代码实现,让你感受编程的魅力!

🌟 游戏特色

1. 多样道具系统:

  • 时间增加道具:当你点击这个道具时,可以增加额外的10秒时间,帮助你在游戏中争取更多得分机会。
  • 得分加倍道具:这可是游戏中的“秘密武器”!点击后,你的得分会在短时间内翻倍,让你迅速拉开与对手的差距。

2. 丰富的地鼠种类:

  • 普通地鼠:点击得1分,基本款。
  • 快速地鼠:击中后能得2分,快速出现,增加难度。
  • 隐形地鼠:不小心点击会扣1分,考验你的判断力。
  • 炸弹地鼠:一不小心就扣分,小心踩到哦!
  • 道具地鼠:随机出现的时间和得分道具,让游戏更具变数。

3. 紧张刺激的音效和动画:

	背景音乐和点击音效为游戏增添了很多乐趣,击中地鼠时的小动画效果,让整个游戏更加生动。

4. 关卡挑战:

	游戏分为多个关卡,每个关卡的时间限制和地鼠出现频率不同,随着难度增加,挑战也会变得更大!

5. 结束画面与高分记录:

  游戏结束时,会显示你的得分和历史高分,激励你不断挑战自我。

📜 代码讲解

下面我将为大家简要介绍游戏的主要代码部分,帮助你理解其背后的逻辑。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;public class WhackAMoleGame extends JFrame {private JButton[] holes; // 地鼠洞按钮数组private int score; // 当前得分private JLabel scoreLabel; // 得分标签private JLabel timerLabel; // 倒计时标签private Timer gameTimer; // 游戏倒计时private Timer moleTimer; // 地鼠出现计时private Random random; // 随机数生成器private int remainingTime; // 剩余时间private int currentLevel; // 当前关卡private final int GAME_TIME[] = {30, 20, 15}; // 各关卡时间限制private final int MOLE_INTERVAL[] = {800, 600, 400}; // 各关卡地鼠出现间隔private int highScore = 0; // 历史高分private ImageIcon moleNormal; // 普通地鼠图标private ImageIcon moleFast; // 快速地鼠图标private ImageIcon moleHidden; // 隐形地鼠图标private ImageIcon moleBomb; // 炸弹地鼠图标private ImageIcon timeBonus; // 时间增加道具图标private ImageIcon scoreBonus; // 得分加倍道具图标public WhackAMoleGame() {// 初始化地鼠图标moleNormal = new ImageIcon("mole_normal.png");moleFast = new ImageIcon("mole_fast.png");moleHidden = new ImageIcon("mole_hidden.png");moleBomb = new ImageIcon("mole_bomb.png");timeBonus = new ImageIcon("time_bonus.png");scoreBonus = new ImageIcon("score_bonus.png");setTitle("打地鼠游戏");setSize(400, 400);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(new GridLayout(3, 3));holes = new JButton[9]; // 创建9个地鼠洞按钮random = new Random();score = 0;currentLevel = 0;for (int i = 0; i < holes.length; i++) {holes[i] = new JButton();holes[i].setBackground(Color.GREEN);holes[i].setFocusPainted(false);holes[i].addActionListener(new MoleClickListener(i));add(holes[i]);}scoreLabel = new JLabel("得分: 0", SwingConstants.CENTER);timerLabel = new JLabel("剩余时间: 30", SwingConstants.CENTER);add(scoreLabel);add(timerLabel);JButton startButton = new JButton("开始游戏");startButton.addActionListener(e -> startGame());add(startButton);setVisible(true);}private void startGame() {score = 0;currentLevel = 0;startLevel(); // 启动当前关卡}private void startLevel() {remainingTime = GAME_TIME[currentLevel];scoreLabel.setText("得分: " + score);timerLabel.setText("剩余时间: " + remainingTime);resetHoles();gameTimer = new Timer(1000, e -> {remainingTime--;timerLabel.setText("剩余时间: " + remainingTime);if (remainingTime <= 0) {endLevel(); // 结束当前关卡}});gameTimer.start();moleTimer = new Timer(MOLE_INTERVAL[currentLevel], e -> showMole()); // 定时显示地鼠moleTimer.start();}private void resetHoles() {for (JButton hole : holes) {hole.setIcon(null);hole.setBackground(Color.GREEN);}}private void showMole() {resetHoles();int molePosition = random.nextInt(holes.length);int moleType = random.nextInt(5); // 随机生成地鼠类型switch (moleType) {case 0:holes[molePosition].setIcon(moleNormal);break;case 1:holes[molePosition].setIcon(moleFast);break;case 2:holes[molePosition].setIcon(moleHidden);break;case 3:holes[molePosition].setIcon(moleBomb);break;case 4:if (random.nextBoolean()) {holes[molePosition].setIcon(timeBonus);} else {holes[molePosition].setIcon(scoreBonus);}break;}}private void endLevel() {gameTimer.stop();moleTimer.stop();showEndScreen(); // 显示结束画面}private void showEndScreen() {String message = "游戏结束!你的得分是: " + score + "\n高分: " + highScore;if (score > highScore) {highScore = score;message = "新高分!" + message;}JOptionPane.showMessageDialog(this, message);resetHoles();}private class MoleClickListener implements ActionListener {private int index;public MoleClickListener(int index) {this.index = index;}@Overridepublic void actionPerformed(ActionEvent e) {// 处理点击事件,根据不同地鼠类型调整分数if (holes[index].getIcon() == moleNormal) {score++;} else if (holes[index].getIcon() == moleFast) {score += 2; } else if (holes[index].getIcon() == moleHidden) {score--; } else if (holes[index].getIcon() == moleBomb) {score -= 5; JOptionPane.showMessageDialog(null, "你踩到炸弹了!扣除5分!");} else if (holes[index].getIcon() == timeBonus) {remainingTime += 10; JOptionPane.showMessageDialog(null, "时间增加了10秒!");} else if (holes[index].getIcon() == scoreBonus) {score += 5; JOptionPane.showMessageDialog(null, "得分增加了5分!");}scoreLabel.setText("得分: " + score);holes[index].setIcon(null); // 点击后清除图标}}public static void main(String[] args) {SwingUtilities.invokeLater(WhackAMoleGame::new);}
}

🔍 代码解析

🌟 游戏界面设置

首先,游戏界面是通过 JFrame 和 JButton 来构建的。我们用 GridLayout 布局将9个地鼠洞排列成3x3的方阵,这样一来,视觉上就非常整齐易懂!

setLayout(new GridLayout(3, 3));

这行代码的作用就是让每个按钮(地鼠洞)在界面上排列得像个棋盘,简单明了,一目了然。

⏰ 定时器
接下来是我们游戏的核心——定时器!我们使用了 Timer 类来实现游戏的倒计时和地鼠出现的频率。

gameTimer = new Timer(1000, e -> {remainingTime--;timerLabel.setText("剩余时间: " + remainingTime);
});

这里的代码设置了一个每秒钟触发的计时器,它会减少剩余时间并更新界面。当时间到达0时,游戏就结束了,紧张感满满!

🎯 关卡机制

我们把每个关卡的时间和地鼠出现的间隔分别存储在数组中,这样一来,调整游戏难度就变得非常简单!

private final int GAME_TIME[] = {30, 20, 15}; // 各关卡时间限制
private final int MOLE_INTERVAL[] = {800, 600, 400}; // 各关卡地鼠出现间隔

想要增加挑战,只需修改这些值即可!这是一个极具灵活性的设计,让玩家每一轮都能感受到不同的挑战。

🐹 随机地鼠的显示
在 showMole 方法中,我们通过随机选择地鼠洞来显示地鼠或道具。

int molePosition = random.nextInt(holes.length);

💥 点击事件处理

当你点击地鼠时,会触发 MoleClickListener 类中的 actionPerformed 方法。根据你点击的地鼠类型,分数会有所不同。

if (holes[index].getIcon() == moleNormal) {score++;
}

🏁 结束与高分记录

游戏结束时,endLevel 方法会被调用,显示你的得分和历史高分。如果你刷新了自己的高分,还会有额外的成就感!

String message = "游戏结束!你的得分是: " + score + "\n高分: " + highScore;

🎮 打地鼠游戏总结

打地鼠游戏是一个经典的反应力测试游戏,通过简单而富有趣味的设计,让玩家在轻松愉快的氛围中锻炼手眼协调能力。以下是对这个游戏的全面总结:

  1. 游戏玩法
    目标:玩家需要快速点击随机出现的地鼠,获取分数,同时避免点击炸弹和隐形地鼠。
    道具机制:引入了道具地鼠(如时间增加和得分加倍),增加了策略性和多样性,提升了游戏的趣味性。
  2. 关卡设计
    游戏分为多个关卡,每个关卡的时间限制和地鼠出现频率逐渐增加,提升了游戏难度。
    玩家可以在不同的关卡中体验不同的挑战,保持了游戏的新鲜感。
  3. 技术实现
    界面:使用 Java Swing 创建了一个直观的用户界面,简单易用的按钮和标签使得操作非常方便。
    随机性:通过随机生成地鼠出现的位置和类型,确保每局游戏都有不同的体验。
    计时器:利用 Timer 实现倒计时和地鼠出现间隔的管理,使游戏的节奏紧凑。
  4. 用户体验
    反馈机制:游戏中及时的提示和反馈让玩家在每次操作后都有明确的结果,这增强了参与感和成就感。
    高分记录:高分的展示激励玩家不断挑战自我,提升了游戏的趣味性和重玩价值。
  5. 学习价值
    通过开发这个游戏,初学者不仅能学习到 Java 编程和图形界面设计的基本知识,还能掌握事件处理、定时器使用和简单的游戏逻辑设计。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

煤矸石检测数据集(yolo)

yolo煤矸石检测 数据集 pt模型 界面&#xff0c; ✓3091张图片和txt标签&#xff0c;标签类别两类&#xff1a;“coal”、“rock”。 ✓适用于煤矸石识别&#xff0c;深度学习&#xff0c;机器学习&#xff0c;yolov5 yolov6 yolov7 yolov8 yolov9 yolov10&#xff0c;Python 煤…

Nvidia的高级研究科学家Jim Fan预计在未来两到三年内,机器人技术将取得重大进展

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Wacom 和 Splashtop 携手共赴 IBC 2024 展会,宣布向欧洲市场隆重推出 Wacom Bridge

2024年9月10日 荷兰阿姆斯特丹&德国杜塞尔多夫 Wacom 是数位笔技术的全球领袖&#xff0c;Splashtop 是高性能远程访问解决方案领域的先驱&#xff0c;双方宣布已在欧洲隆重推出 Wacom Bridge&#xff0c;目前 Splashtop Enterprise 和 Splashtop Business Access Perform…

【算法】BFS 系列之 多源 BFS

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;01 矩阵 .1- 题目解析 .2- 代码编写 2&#xff09;飞地的数量 .1- 题目解析 .2- 代码编写 3&#xff09;地图中的最高点 .1- 题目解析 .2- 代码编写 4&#xff09;地图分析 .1- 题…

英集芯IP5912:集成开关充电功能的低功耗8位POWER MCU芯片

英集芯IP5912是一款功能丰富的、集成了降压充电管理功能的8位MCU芯片&#xff0c;它内置了一个5V输入的同步降压充电DC-DC&#xff0c;功率管也是内置的&#xff0c;同时提供最大1.5A的充电电流。封装方式采用SOP16&#xff0c;方案应用时只需要很少的外围器件&#xff0c;就可…

Visual Studio 2022 - QT 环境中文字符乱码问题

Visual Studio 2022 - QT 环境中文字符乱码问题 一、Visual Studio 2022 - Qt 环境 在 QT 中使用中文字符串常会出现乱码现象&#xff0c;如下&#xff1a;以下提供了几个解决方法&#xff0c;仅供参考 QString str "百香果真是一直可爱的小猫咪"; qDebug() <…

大数据-142 - ClickHouse 集群 副本和分片 Distributed 附带案例演示

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Tcping:一款实用的端口存活检测工具

简介 tcping 是一个基于TCP协议的网络诊断工具,通过发送 TCP SYN/ACK包来检测目标主机的端口状态。 官网:tcping.exe - ping over a tcp connection 优点: (1)监听服务器端口状态:tcping 可以检测指定端口的状态,默认是80端口,也可以指定其他端口。 (2)显示ping返…

ESXI主机证书报错

VCENTER提示主机证书状态异常 没有虚拟机运行 查看状态发现即将过期&#xff08;但其实已经过期了&#xff09; 点击更新即可&#xff0c;当有虚拟机运行时&#xff0c;不能直接更新证书。

探索自闭症寄宿学校的专属教育模式

在自闭症儿童教育的探索之路上&#xff0c;寄宿学校作为一种特殊的教育形式&#xff0c;正逐渐展现出其独特的优势与价值。这些学校不仅为自闭症儿童提供了一个安全、稳定的生活环境&#xff0c;更通过专属的教育模式&#xff0c;帮助他们逐步克服障碍&#xff0c;实现潜能的最…

掌握数据中心虚拟化:关键挑战与解决方案

数据中心虚拟化是使用云软件平台将物理数据中心转变为数字数据中心的过程&#xff0c;使企业能够远程访问信息和应用程序。它包括在数据中心内创建物理基础设施的多个虚拟版本&#xff0c;通过将服务器、存储和网络等资源划分为虚拟实体来实现资源的高效利用。 虚拟化环境中的关…

关于 NLP 深度学习的核心流程

基本流程实现的先后顺序&#xff08;每一步都包含很多技术点&#xff09;&#xff1a; 选定语言模型结构 关于语言模型&#xff1a; 作用 判断那一句话相对更合理&#xff0c;相对不合理的会得到较底的分值&#xff1a; 挑选成句概率分值最高的评价指标&#xff1a;PPL&…

微服务架构中的负载均衡与服务注册中心(Nacos)

1. 负载均衡&#xff1a;解决实际业务问题 1.1 业务场景思考 想象一个电子商务平台的微服务架构。我们有一个订单服务和多个用户服务实例。当订单服务需要调用用户服务时&#xff0c;它如何选择具体调用哪一台用户服务器&#xff1f;这就是负载均衡要解决的核心问题。 1.2 常…

主流卷积神经网络CNN总结

ResNet&#xff08;2015&#xff09;残差神经网络 残差结构 ResNet50具体卷积结构图 ResNeXt&#xff08;2016&#xff09;加入了分组卷积的思想&#xff0c;将原ResNet网络中的block替换成由group分组的block&#xff0c;两者得到的feature map一致&#xff0c;只是参数量更少…

《微软飞行模拟2024》储存空间需求仅不到前作的1/5

根据微软在最新一期 Xbox Wire 中的介绍&#xff0c;将于今年11 月登陆 Xbox Series X|S 主机的《微软飞行模拟2024》将比前作占用空间小很多。 微软解释了为何新作的文件大小仅为30GB&#xff0c;约为前作的五分之一。简单来说&#xff0c;微软使用了云流媒体传输技术。公司还…

SEC重拳打击币安

美国SEC于上周四提交针对币安的拟议修订投诉&#xff0c;重点关注交易所的代币上市流程。 1.美国证券交易委员会对币安提出拟议的修订申诉。 2.SEC在驳回币安最初诉讼的动议中基本获胜&#xff0c;但在驳回动议的命令中&#xff0c;关于某些代币的若干问题仍未得到解答。 3.SEC…

木马加载器通用套路

木马加载器通用套路 加载器 木马有两种类型&#xff0c;第一种是自己写的木马&#xff0c;作为远控客户端&#xff0c;第二种是加载器 加载器就是把C2的shellcode加载到目标机器的过程。目前攻防场景下&#xff0c;主流手段是通过加载器的方式实现远控 既然是加载器&#xff…

C#开源的一个能利用Windows通知栏背单词的软件

前言 今天给大家推荐一个C#开源且免费的能利用Windows通知栏背单词的软件&#xff0c;可以让你在上班、上课等恶劣环境下安全隐蔽地背单词&#xff08;利用摸鱼时间背单词的软件&#xff09;&#xff1a;ToastFish。 操作系统要求 目前该软件只支持Windows10及以上系统&…

基于uniapp的民宿酒店预订系统(后台+小程序)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Maven Helper 插件

推荐指数&#xff1a;★★★★★ 分析依赖冲突插件 Maven Helper插件就可免去命令行困扰。通过界面解决依赖冲突。 点击此按钮&#xff0c;切换到此工具栏 可进行相应操作&#xff1a; Conflicts&#xff08;查看冲突&#xff09;All Dependencies as List&#xff08;列表形…