关于使用Java语言编写打地鼠游戏
用Java语言书写打地鼠游戏
- 关于游戏的介绍
- 《打地鼠游戏》Java代码的实现
- PlayMouse.java
- StartGame.java
- MusicPlay.java
- MusicPlayTest.java
- 游戏所需图片
- 运行效果
- 结言
关于游戏的介绍
打地鼠游戏是一款非常受欢迎的敏捷类游戏,它的基本规则简单易懂,同时又充满了挑战性和趣味性。
在游戏中,玩家通常需要在一个方形区域内,面对多个地洞,这些地洞中会不定时地冒出地鼠。玩家的主要任务就是在地鼠冒出头来的短时间内,用工具(如锤子)迅速而准确地击打它们。成功打中地鼠,玩家就能获得相应的分数。
玩者可以自己设置游戏的难度,地鼠的出现频率和速度都会加快,这就要求玩家不仅要有快速的反应能力,还需要有良好的手眼协调能力和预判能力。
打地鼠游戏不仅锻炼了玩家的反应速度和手眼协调能力,同时也考验了他们的注意力和耐心。因此,无论是孩子还是成年人,都能在这款游戏中找到属于自己的乐趣和挑战。
《打地鼠游戏》Java代码的实现
PlayMouse.java
package com.briup.game; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.GridLayout; import java.awt.Image; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.net.MalformedURLException; import java.util.Random; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; /** * 打地鼠 1.布局 2.功能 * */ public class PlayMouse implements ActionListener { // 构建容器 private JFrame jFrame; // 构建面板northJpanel centerJpanel private JPanel northJPanel, centerJPanel; // 构建六个标签,分别用来显示等级,分数,时间,音效 private JLabel leveLabel, timeLabel, timeVaLabel, centerJLabel, cenVaLabel, musicLabel; // 构建下拉框,分别用来显示等级、音效 private JComboBox jComboBox, musicBox; // 构建开始按钮 private JButton jButton; // 构建按钮组,保存十六个按钮 private JButton[] btsButtons; // 构建时间定时器、老鼠定时器 private Timer timer, mouseTimer; // 构建老鼠、老鼠洞图片 private ImageIcon holeiImage, mouseImgIcon; // 记录上一次老鼠出现的位置 private int last; // 设置游戏等级 初级:900毫秒 中级:600毫秒 高级:100毫秒 private int level; // 记录老鼠是否加过分 flase:新老鼠 ,没加过分 true:旧老鼠 private boolean flag; 鼠标的形状 private Cursor cursor, cursor2; // 文件对象 private File file; // 背景音乐对象 private MusicPlay play; // 游戏暂停按钮 private JButton pauseButton; private boolean isPaused; // 构建游戏继续按钮 private JButton resumeButton; // 初始化JFrame public PlayMouse() { // 1.创建容器 jFrame = new JFrame("打地鼠"); // 2.创建面板 northJPanel = new JPanel(); centerJPanel = new JPanel(); // 3.设置布局管理器 // JFrame默认是边界管理器 // JPanel默认是流式布局管理器1 centerJPanel.setLayout(new GridLayout(4, 4)); // 4.创建组件 leveLabel = new JLabel("等级"); jComboBox = new JComboBox(new String[] { "初级", "中级", "高级" }); // 等级选择框绑定点击事件 jComboBox.addActionListener(this); timeLabel = new JLabel("time:"); timeVaLabel = new JLabel("10"); centerJLabel = new JLabel("cent:"); cenVaLabel = new JLabel("0"); musicLabel = new JLabel("音效"); musicBox = new JComboBox(new String[] { "开", "关" }); // 音效下拉框绑定点击事件 musicBox.addActionListener(this); jButton = new JButton("开始游戏"); pauseButton = new JButton("暂停游戏"); pauseButton.addActionListener(this); resumeButton = new JButton("继续游戏"); resumeButton.addActionListener(this); resumeButton.setVisible(false); holeiImage = new ImageIcon("src/com/briup/game/hole.png"); mouseImgIcon = new ImageIcon("src/com/briup/game/mouse.png"); cursor = create("src/com/briup/game/hammer1.png"); cursor2 = create("src/com/briup/game/hammer2.png"); // 点击开始按钮,游戏开始 jButton.addActionListener(this); btsButtons = new JButton[16]; for (int i = 0; i int int num = Integer.parseInt(timeVaLabel.getText()); if (num > 0) { num--; // 重新设置时间 timeVaLabel.setText(num + ""); } else { // 游戏结束 // 清除掉最后一只老鼠,将老鼠蹄片设置为老鼠洞 btsButtons[last].setIcon(holeiImage); // 关闭时间定时器 timer.stop(); // 关闭老鼠定时器 mouseTimer.stop(); // 开启开始按钮 jButton.setEnabled(true); // 开启等级按钮 jComboBox.setEditable(true); // 禁用十六个按钮 setButton(false); // 关闭背景音乐 play.stop(); // 重置游戏时间,分数 timeVaLabel.setText("10"); cenVaLabel.setText("0.0"); } } else if (object == mouseTimer) { // 开启老鼠定时器执行 // 将上一次老鼠出现的位置设为老鼠洞 btsButtons[last].setIcon(holeiImage); // 每隔1s随机产生一只老鼠 Random random = new Random(); int index = random.nextInt(btsButtons.length); last = index; flag = false; // 将按钮的背景图设置为老鼠 btsButtons[index].setIcon(mouseImgIcon); } else if (object == jComboBox) { // 获取下拉框中选择的文本值 String string = (String) jComboBox.getSelectedItem(); // 判断那个等级 if ("高级".equals(string)) { level = 500; } else if ("中级".equals(string)) { level = 1000; } else if ("初级".equals(string)) { level = 1400; } // 重新创建等级定时器 mouseTimer = new Timer(level, this); } else if (object == musicBox) { // 获取下拉框中选择的文本框 String chooseString = (String) musicBox.getSelectedItem(); if ("关".equals(chooseString)) { play.stop(); } else if ("开".equals(chooseString)) { play.start(); } } else { // 点击十六个按钮 for (int i = 0; i int int cent = Integer.parseInt(cenVaLabel.getText()); // 分值加1 cent++; flag = true; // 设置分数值 cenVaLabel.setText(cent + "");// 将int--》转换成String } } } } }开始游戏界面
StartGame.java
package com.briup.game; /** *开始游戏的界面 * */ import java.awt.GridLayout; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.net.MalformedURLException; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import sun.net.www.content.text.plain; public class StartGame implements ActionListener { // 构建容器对象 private JFrame jFrame; // 构建面板 private JPanel jPanel; // 构建按钮组件 private JButton jButton; // 构建文件对象 private File file; // 构建背景音乐对象 private MusicPlay play; // 构建背景图片 private ImageIcon startIcon; // 构造器 初始化Jframe public StartGame() { // 1.创建容器 jFrame = new JFrame("开始界面"); // 2.创建面板 默认流式布局管理器 jPanel = new JPanel(); // 3.面板设置布局管理器 网格布局管理器 jPanel.setLayout(new GridLayout(1, 1)); // 4.创建组件 jButton = new JButton(); jButton.addActionListener(this); // 5.添加组件到按钮 jPanel.add(jButton); // 6.添加面板到容器 jFrame.add(jPanel); // 7.设置容器大小 jFrame.setSize(1100, 1000); // 8.设置容器居中 jFrame.setLocationRelativeTo(null); // 9.设置容器大小不可调整 jFrame.setResizable(false); // 10.设置容器可见性 jFrame.setVisible(true); // 11.设置容器关闭方式 jFrame.setDefaultCloseOperation(3); // 12.设置背景图片 startIcon = new ImageIcon("src/com/briup/game/start.jpg"); startIcon.setImage( startIcon.getImage().getScaledInstance(jButton.getWidth(), jButton.getHeight(), Image.SCALE_DEFAULT)); jButton.setIcon(startIcon); // 13.开启背景音乐 try { file = new File("src/com/briup/game/开始游戏背景音乐.wav"); play = new MusicPlay(file.toURL()); play.start(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { new StartGame(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub // 关闭背景音乐 play.stop(); // 关闭当前窗口 jFrame.dispose(); // 开启游戏窗口 new PlayMouse(); } }添加音乐
MusicPlay.java
package com.briup.game; /** * 背景音乐 *IO流: * 类型:字节流 字符流 * 流向:输入流 输出流 *异常: * Error:错误 不可解决 * Exception:异常 可解决 * -编译时异常 * -运行时异常 */ import java.io.IOException; import java.net.URL; import javafx.scene.chart.PieChart.Data; import sun.audio.AudioData; import sun.audio.AudioPlayer; import sun.audio.AudioStream; import sun.audio.ContinuousAudioDataStream; public class MusicPlay { //单次播放声音 private AudioStream aStream; //循环播放声音 private ContinuousAudioDataStream casAudioDataStream; //构造器 public MusicPlay(URL url) { //打开一个声音文件流作为输入 try { aStream = new AudioStream(url.openStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //一次播放开始 public void start() { if (aStream == null) { System.out.println("AudioStream object is not created"); return; }else { AudioPlayer.player.start(aStream); } } //一次播放 停止 public void stop() { if (aStream == null) { System.out.println("AudioStream object is not created"); return; }else { AudioPlayer.player.stop(aStream); } } //循环播放 开始 public void continueStart() { AudioData data = null; try { data = aStream.getData(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } casAudioDataStream = new ContinuousAudioDataStream(data); AudioPlayer.player.start(casAudioDataStream); } //循环播放 停止 public void continueStop() { if (casAudioDataStream == null) { System.out.println("ContinousAudioDataStream object is not created"); return; }else { AudioPlayer.player.stop(casAudioDataStream); } } }测试界面
MusicPlayTest.java
package com.briup.game; import java.io.File; import java.net.MalformedURLException; public class MusicPlayTest { @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { try { // 1.创建文件对象 File file = new File("src/com/briup/game/打地鼠背景音乐.wav"); // 2.创建MusicPlay对象 MusicPlay play = new MusicPlay(file.toURL()); // 3.一次背景音乐 开启 // play.start(); // 4.循环播放背景音乐 开启 play.continueStart(); Thread.sleep(2000); play.continueStop(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }游戏所需图片
1.开始界面
2.打地鼠布局
3.小锤子
未击打时的形状
击打老鼠时的形状
4.老鼠的家
5.老鼠
运行效果
结言
使用者可以进行功能的扩充,比如添加代码实现多种地鼠的效果,当击打炸弹鼠时就就扣掉相应的分数,击打发财的老鼠加更多的分数。这样就让游戏更加多元化、样式更加丰富。
博主用心写,读者点关注;互动传真情,知识不迷路呦。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!







