关于使用Java语言编写打地鼠游戏

2024-06-08 1081阅读

用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.开始界面

        关于使用Java语言编写打地鼠游戏

        2.打地鼠布局

        关于使用Java语言编写打地鼠游戏

        3.小锤子

        未击打时的形状

        关于使用Java语言编写打地鼠游戏

        击打老鼠时的形状

        关于使用Java语言编写打地鼠游戏

        4.老鼠的家

        关于使用Java语言编写打地鼠游戏

        5.老鼠

        居中的图片: 关于使用Java语言编写打地鼠游戏

        运行效果

        关于使用Java语言编写打地鼠游戏

        结言

        使用者可以进行功能的扩充,比如添加代码实现多种地鼠的效果,当击打炸弹鼠时就就扣掉相应的分数,击打发财的老鼠加更多的分数。这样就让游戏更加多元化、样式更加丰富。

        博主用心写,读者点关注;互动传真情,知识不迷路呦。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]