最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用Java語言編寫打地鼠游戲全過程

 更新時間:2024年06月17日 09:06:40   作者:傾聽一世,繁花盛開  
打地鼠是我們非常熟悉的一款小游戲,它的游戲結(jié)構(gòu)和規(guī)則也都比較簡單,那么如果能夠親自徒手開發(fā)這樣的一款經(jīng)典小游戲呢?這篇文章主要給大家介紹了關于如何使用Java語言編寫打地鼠游戲的相關資料,需要的朋友可以參考下

關于游戲的介紹

打地鼠游戲是一款非常受歡迎的敏捷類游戲,它的基本規(guī)則簡單易懂,同時又充滿了挑戰(zhàn)性和趣味性。

在游戲中,玩家通常需要在一個方形區(qū)域內(nèi),面對多個地洞,這些地洞中會不定時地冒出地鼠。玩家的主要任務就是在地鼠冒出頭來的短時間內(nèi),用工具(如錘子)迅速而準確地擊打它們。成功打中地鼠,玩家就能獲得相應的分數(shù)。

玩者可以自己設置游戲的難度,地鼠的出現(xiàn)頻率和速度都會加快,這就要求玩家不僅要有快速的反應能力,還需要有良好的手眼協(xié)調(diào)能力和預判能力。

打地鼠游戲不僅鍛煉了玩家的反應速度和手眼協(xié)調(diào)能力,同時也考驗了他們的注意力和耐心。因此,無論是孩子還是成年人,都能在這款游戲中找到屬于自己的樂趣和挑戰(zhàn)。

《打地鼠游戲》Java代碼的實現(xiàn)

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 {
	// 構(gòu)建容器
	private JFrame jFrame;
	// 構(gòu)建面板northJpanel centerJpanel
	private JPanel northJPanel, centerJPanel;
	// 構(gòu)建六個標簽,分別用來顯示等級,分數(shù),時間,音效
	private JLabel leveLabel, timeLabel, timeVaLabel, centerJLabel, cenVaLabel, musicLabel;
	// 構(gòu)建下拉框,分別用來顯示等級、音效
	private JComboBox<String> jComboBox, musicBox;
	// 構(gòu)建開始按鈕
	private JButton jButton;
	// 構(gòu)建按鈕組,保存十六個按鈕
	private JButton[] btsButtons;
	// 構(gòu)建時間定時器、老鼠定時器
	private Timer timer, mouseTimer;
	// 構(gòu)建老鼠、老鼠洞圖片
	private ImageIcon holeiImage, mouseImgIcon;
	// 記錄上一次老鼠出現(xiàn)的位置
	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;
	// 構(gòu)建游戲繼續(xù)按鈕
	private JButton resumeButton;

	// 初始化JFrame
	public PlayMouse() {
		// 1.創(chuàng)建容器
		jFrame = new JFrame("打地鼠");
		// 2.創(chuàng)建面板
		northJPanel = new JPanel();
		centerJPanel = new JPanel();
		// 3.設置布局管理器
		// JFrame默認是邊界管理器
		// JPanel默認是流式布局管理器1
		centerJPanel.setLayout(new GridLayout(4, 4));
		// 4.創(chuàng)建組件
		leveLabel = new JLabel("等級");
		jComboBox = new JComboBox<String>(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<String>(new String[] { "開", "關" });
		// 音效下拉框綁定點擊事件
		musicBox.addActionListener(this);
		jButton = new JButton("開始游戲");
		pauseButton = new JButton("暫停游戲");
		pauseButton.addActionListener(this);
		resumeButton = new JButton("繼續(xù)游戲");
		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 < btsButtons.length; i++) {
			btsButtons[i] = new JButton();
			// 禁用十六個按鈕
			btsButtons[i].setEnabled(false);
			// 給十六個按鈕綁定點擊事件
			btsButtons[i].addActionListener(this);
			// 給按鈕綁定鼠標按下或松開事件
			btsButtons[i].addMouseListener(new MyMouse(btsButtons[i]));
			// 添加到面板中
			centerJPanel.add(btsButtons[i]);
		}
		// 創(chuàng)建時間定時器
		timer = new Timer(1000, this);
		level = 1000;
		// 創(chuàng)建時間定時器
		mouseTimer = new Timer(level, this);
		// 5.添加組件到面板
		northJPanel.add(leveLabel);
		northJPanel.add(jComboBox);
		northJPanel.add(timeLabel);
		northJPanel.add(timeVaLabel);
		northJPanel.add(centerJLabel);
		northJPanel.add(cenVaLabel);
		northJPanel.add(musicLabel);
		northJPanel.add(musicBox);
		northJPanel.add(jButton);
		northJPanel.add(pauseButton);
		northJPanel.add(resumeButton);
		// 6.添加面板到容器中
		jFrame.add(northJPanel, BorderLayout.NORTH);
		jFrame.add(centerJPanel, BorderLayout.CENTER);
		// 7.設置容器的寬高
		jFrame.setSize(1100, 1000);
		// 8.設置容器窗口可變
		jFrame.setResizable(false);
		// 9.設置容器居中
		jFrame.setLocationRelativeTo(null);
		// 11.設置容器可見性
		jFrame.setVisible(true);
		// 10.設置容器關閉窗口
		jFrame.setDefaultCloseOperation(3);
		// 12.設置縮放圖片,圖片大小適配按鈕大小
		mouseImgIcon.setImage(mouseImgIcon.getImage().getScaledInstance(btsButtons[0].getWidth(),
				btsButtons[0].getHeight(), Image.SCALE_DEFAULT));
		holeiImage.setImage(holeiImage.getImage().getScaledInstance(btsButtons[0].getWidth(), btsButtons[0].getHeight(),
				Image.SCALE_DEFAULT));
		for (int i = 0; i < btsButtons.length; i++) {
			btsButtons[i].setIcon(holeiImage);
		}
		try {
			// 13.開啟背景音樂
			// 創(chuàng)建文件對象
			file = new File("src/com/briup/game/打地鼠背景音樂.wav");
			// 創(chuàng)建背景音樂對象
			play = new MusicPlay(file.toURL());
			// 開啟背景音樂
			play.start();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		PlayMouse playMouse = new PlayMouse();
	}

	// 開啟或禁用十六個按鈕
	public void setButton(boolean b) {
		for (int i = 0; i < btsButtons.length; i++) {
			btsButtons[i].setEnabled(b);
		}

	}

	// 創(chuàng)建鼠標的形狀
	private Cursor create(String imagePath) {
		Image myCursor = new ImageIcon(imagePath).getImage();
		// 參數(shù)一:自定義鼠標樣式對應的圖片對象
		// 參數(shù)二:對應的位置坐標
		// 參數(shù)三:字符串,給自定義鼠標樣式起的名字
		return Toolkit.getDefaultToolkit().createCustomCursor(myCursor, new Point(0, 0), null);
	}

	// 鼠標按下或松開的形狀
	private class MyMouse extends MouseAdapter {
		private JButton btnButton;

		public MyMouse(JButton btnButton) {
			this.btnButton = btnButton;
		}

		// 鼠標按下
		public void mousePressed(MouseEvent e) {
			btnButton.setCursor(cursor2);
		}

		// 鼠標松開
		public void mouseReleased(MouseEvent e) {
			btnButton.setCursor(cursor);
		}
	}

	public void pauseGame() {
		timer.stop();
		mouseTimer.stop();
		setButton(false);
		pauseButton.setVisible(false);
		resumeButton.setVisible(true);
	}

	private void resumeGame() {
		timer.start();
		mouseTimer.start();
		setButton(true);
		resumeButton.setVisible(false);
		pauseButton.setVisible(true);
		isPaused = false;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// 獲取事件源,看是誰點擊的
		Object object = e.getSource();
		if (object == pauseButton) {
			isPaused = !isPaused;
			if (isPaused) {
				pauseGame();
				resumeButton.setVisible(true);
			} else {
				resumeGame();
				resumeButton.setVisible(true);
			}
		}
		if (object == resumeButton) {
			isPaused = !isPaused;
			if (isPaused) {
				pauseGame();
			} else {
				resumeGame();
			}
		}
		// 點擊開始按鈕,游戲開始
		if (object == jButton) {
			// 隨機產(chǎn)生一個老鼠
			Random random = new Random();
			int index = random.nextInt(btsButtons.length);
			flag = false;
			btsButtons[index].setIcon(mouseImgIcon);
			// 記錄上一只老鼠出現(xiàn)的位置
			last = index;
			// 定時器開始,執(zhí)行以下else if里的內(nèi)容
			timer.start();
			// 開啟老鼠定時器
			mouseTimer.start();
			// 開啟十六個按鈕
			setButton(true);
			// 禁用等級下拉框
			jComboBox.setEditable(false);
			// 禁用開始按鈕
			jButton.setEnabled(false);

		} else if (object == timer) {
			// 開啟時間定時器后執(zhí)行
			// 獲取按鈕文本值 String -->int
			int num = Integer.parseInt(timeVaLabel.getText());
			if (num > 0) {
				num--;
				// 重新設置時間
				timeVaLabel.setText(num + "");
			} else {
				// 游戲結(jié)束
				// 清除掉最后一只老鼠,將老鼠蹄片設置為老鼠洞
				btsButtons[last].setIcon(holeiImage);
				// 關閉時間定時器
				timer.stop();
				// 關閉老鼠定時器
				mouseTimer.stop();
				// 開啟開始按鈕
				jButton.setEnabled(true);
				// 開啟等級按鈕
				jComboBox.setEditable(true);
				// 禁用十六個按鈕
				setButton(false);
				// 關閉背景音樂
				play.stop();
				// 重置游戲時間,分數(shù)
				timeVaLabel.setText("10");
				cenVaLabel.setText("0.0");
			}
		} else if (object == mouseTimer) {
			// 開啟老鼠定時器執(zhí)行
			// 將上一次老鼠出現(xiàn)的位置設為老鼠洞
			btsButtons[last].setIcon(holeiImage);
			// 每隔1s隨機產(chǎn)生一只老鼠
			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;
			}
			// 重新創(chuàng)建等級定時器
			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 < btsButtons.length; i++) {
				// 判斷是否點擊老鼠按鈕并且該老鼠沒加過分
				// 判斷是否點擊老鼠的按鈕
				if (object == btsButtons[i] && btsButtons[i].getIcon() == mouseImgIcon && !flag) {
					// 獲取分數(shù)的文本值 String -->int
					int cent = Integer.parseInt(cenVaLabel.getText());
					// 分值加1
					cent++;
					flag = true;
					// 設置分數(shù)值
					cenVaLabel.setText(cent + "");// 將int--》轉(zhuǎn)換成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 {
	// 構(gòu)建容器對象
	private JFrame jFrame;
	// 構(gòu)建面板
	private JPanel jPanel;
	// 構(gòu)建按鈕組件
	private JButton jButton;
	// 構(gòu)建文件對象
	private File file;
	// 構(gòu)建背景音樂對象
	private MusicPlay play;
	// 構(gòu)建背景圖片
	private ImageIcon startIcon;

	// 構(gòu)造器 初始化Jframe
	public StartGame() {
		// 1.創(chuàng)建容器
		jFrame = new JFrame("開始界面");
		// 2.創(chuàng)建面板 默認流式布局管理器
		jPanel = new JPanel();
		// 3.面板設置布局管理器 網(wǎng)格布局管理器
		jPanel.setLayout(new GridLayout(1, 1));
		// 4.創(chuàng)建組件
		jButton = new JButton();
		jButton.addActionListener(this);
		// 5.添加組件到按鈕
		jPanel.add(jButton);
		// 6.添加面板到容器
		jFrame.add(jPanel);
		// 7.設置容器大小
		jFrame.setSize(1100, 1000);
		// 8.設置容器居中
		jFrame.setLocationRelativeTo(null);
		// 9.設置容器大小不可調(diào)整
		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流:
 *   類型:字節(jié)流     字符流
 *   流向:輸入流      輸出流
 *異常:
 *   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;
	//循環(huán)播放聲音
	private ContinuousAudioDataStream casAudioDataStream;
	
	//構(gòu)造器
	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);
		}
	}
	//循環(huán)播放  開始
	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);
	}
	//循環(huán)播放  停止
	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.創(chuàng)建文件對象
			File file = new File("src/com/briup/game/打地鼠背景音樂.wav");
			// 2.創(chuàng)建MusicPlay對象
			MusicPlay play = new MusicPlay(file.toURL());
			// 3.一次背景音樂 開啟
			// play.start();
			// 4.循環(huán)播放背景音樂 開啟
			play.continueStart();
			Thread.sleep(2000);
			play.continueStop();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

游戲所需圖片

1.開始界面

2.打地鼠布局

Alt

3.小錘子

未擊打時的形狀

Alt

擊打老鼠時的形狀

Alt

4.老鼠的家

Alt

5.老鼠

居中的圖片: 

Alt

運行效果

在這里插入圖片描述

總結(jié) 

到此這篇關于如何使用Java語言編寫打地鼠游戲的文章就介紹到這了,更多相關Java編寫打地鼠游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • spring-boot通過@Scheduled配置定時任務及定時任務@Scheduled注解的方法

    spring-boot通過@Scheduled配置定時任務及定時任務@Scheduled注解的方法

    這篇文章主要介紹了spring-boot通過@Scheduled配置定時任務,文中還給大家介紹了springboot 定時任務@Scheduled注解的方法,需要的朋友可以參考下
    2017-11-11
  • Maven熱部署devtools的實現(xiàn)示例

    Maven熱部署devtools的實現(xiàn)示例

    本文主要介紹了Maven熱部署devtools的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • SpringMvc微信支付回調(diào)示例代碼

    SpringMvc微信支付回調(diào)示例代碼

    微信一直是一個比較熱門的詞匯,今天這篇文章主要介紹的是SpringMvc微信支付回調(diào)的示例代碼,對大家開發(fā)微信支付具有一定的參考借鑒價值,下面來一起看看吧。
    2016-09-09
  • 一次由Lombok的@AllArgsConstructor注解引發(fā)的錯誤及解決

    一次由Lombok的@AllArgsConstructor注解引發(fā)的錯誤及解決

    這篇文章主要介紹了一次由Lombok的@AllArgsConstructor注解引發(fā)的錯誤及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java優(yōu)化for循環(huán)嵌套的高效率方法

    Java優(yōu)化for循環(huán)嵌套的高效率方法

    這篇文章主要介紹了Java優(yōu)化for循環(huán)嵌套的高效率方法,幫助大家更好的提升java程序性能,感興趣的朋友可以了解下
    2020-09-09
  • SpringCloud使用Feign文件上傳、下載

    SpringCloud使用Feign文件上傳、下載

    這篇文章主要為大家詳細介紹了SpringCloud使用Feign文件上傳、下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • springcloud項目改名的操作方法

    springcloud項目改名的操作方法

    這篇文章主要介紹了springcloud項目改名的操作方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 輕松掌握Java注解,讓編程更智能、更優(yōu)雅

    輕松掌握Java注解,讓編程更智能、更優(yōu)雅

    輕松掌握Java注解?沒問題!想要讓你的Java代碼更具可讀性、維護性,同時提升開發(fā)效率?本指南將帶你快速入門Java注解的世界,只需短短幾分鐘,你就能揭秘這個強大的編程工具,讓編寫有聲明性邏輯的代碼變得輕而易舉,趕快一起來探索吧!
    2024-01-01
  • ruoyi微服務版本搭建運行方式

    ruoyi微服務版本搭建運行方式

    這篇文章主要介紹了ruoyi微服務版本搭建運行方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringCloud的Gateway網(wǎng)關詳解

    SpringCloud的Gateway網(wǎng)關詳解

    這篇文章主要介紹了SpringCloud的Gateway網(wǎng)關詳解,Gateway 是 Spring Cloud 官方推出的一個基于 Spring 5、Spring Boot 2 和 Project Reactor 的 API 網(wǎng)關實現(xiàn),本文將介紹 Spring Cloud Gateway 的基本概念、核心組件以及如何配置和使用它,需要的朋友可以參考下
    2023-09-09

最新評論

新兴县| 张掖市| 扎兰屯市| 紫阳县| 台州市| 乌兰县| 鄂伦春自治旗| 朝阳市| 南丹县| 神池县| 台州市| 苍梧县| 镇雄县| 荃湾区| 重庆市| 大化| 成都市| 博白县| 偃师市| 平舆县| 甘南县| 额敏县| 江西省| 镇安县| 富顺县| 旌德县| 合阳县| 苗栗市| 高邑县| 望城县| 无锡市| 桃园市| 全州县| 绥宁县| 望江县| 宣化县| 承德市| 府谷县| 梧州市| 大余县| 肥乡县|