Java 簡單拼圖遊戲(實現音樂播放功能)
此程式為用JAVA編寫的拼圖小遊戲,可通過簡單的圖片移動實現拼圖,並實現音樂播放功能。(此程式只完成簡單功能的實現,大佬勿噴)
程式原始碼下載:點選下載程式原始碼
軟體系統實現
拼圖主體為一方形區域,位於中央,其中包含九個小區域,放置圖片,其中第九張為空。通過點選空白附近圖片完成圖片的移動。
拼圖背景為自己插入的圖片,不會隨滑鼠的點選而改變;
拼圖上側為三個按鈕重新開始,音樂,提示,分別實現重新開始,音樂播放與提示部分的顯示,當點選重新開始按鈕時,遊戲重新開始,拼圖主體進行變換;
當點選音樂按鈕時音樂播放停止,音樂圖示變暗,當再次點選時音樂播放,音樂圖示變亮;當點選提示按鈕時提示顯示,提示圖示變亮,當再次點選時提示時,提示圖示變暗,提示部分消失。
右上側為提示部分,當點選提示時,提示部分顯示,再次點選時消失。
拼圖按鈕與主體之間為遊戲時間與移動步數的顯示,其中時間每秒鐘加一,圖片移動時移動步數加一,當點選重新開始按鈕時,遊戲時間與移動步數全部變為0。
當拼圖完成後拼圖左側與右側顯示恭喜成功字樣,拼圖邊框變為紅色。點選重新開始時字樣消失。
程式碼:
Yard.java
import javax.swing.JFrame;
public class Yard extends JFrame {
Win win = new Win();
public Yard() {
this.setTitle("拼圖");
this.setSize(1000, 850);
this.setLocationRelativeTo(null); // 設定窗體初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);// 不可改變大小
this.add(win);
this.setVisible(true);
}
public static void main(String args[]) {
new Yard();
}
}
Win.java
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
public class Win extends JPanel implements MouseListener {
private int[][] tu = new int[3][3];
static boolean flag = false;// 判斷是否成功
private boolean flag1 = false;// 判斷提示按鈕的顯示
private int xx, yy;// 獲取的拼圖行列座標
private int N = 0;// 移動步數
static int T = 0;// 計算時間
private Font font1 = new Font("華文彩雲", Font.BOLD, 50);
private Font font2 = new Font("黑體", Font.BOLD, 20);
private Font font3 = new Font("黑體", Font.BOLD, 90);
private JButton b = new JButton("重新開始");
private JButton mus = new JButton("音樂");
private JButton out = new JButton("提示");
private Audio au = new Audio();// 設定音樂
private int k1 = 0, k2 = 0;// 判斷音樂,提示按鈕點選次數
public Win() {
final Time time = new Time();
time.start();// 開始計時
/**點選重新開始按鈕後*/
b.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getSource() == b) {
Start();
time.setT(0);
flag = false;
N = 0;
T = 0;
}
}
});
/**點選音樂按鈕後*/
mus.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
k1++;
/* 單擊一下音樂按鈕停止播放 */
if (e.getSource() == mus && k1 % 2 != 0) {
au.stop();
mus.setBackground(Color.GRAY);
}
/* 單擊一下音樂按鈕開始播放 */
else if (e.getSource() == mus && k1 % 2 == 0) {
au.start();
mus.setBackground(Color.cyan);
}
}
});
/**點選提示按鈕後*/
out.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
k2++;
/* 單擊一下提示按鈕顯示提示 */
if (e.getSource() == out && k2 % 2 != 0) {
flag1 = true;
out.setBackground(Color.cyan);
}
/* 再單擊一下提示按鈕提示消失 */
else if (e.getSource() == out && k2 % 2 == 0) {
flag1 = false;
out.setBackground(Color.gray);
}
}
});
/** 設定重新開始,音樂與提示按鈕 */
b.setPreferredSize(new Dimension(140, 70));
b.setBackground(Color.cyan);
b.setFont(font2);
mus.setPreferredSize(new Dimension(140, 70));
mus.setBackground(Color.cyan);
mus.setFont(font2);
out.setPreferredSize(new Dimension(140, 70));
out.setBackground(Color.gray);
out.setFont(font2);
add(b);
add(mus);
add(out);
Start();
/** 音樂播放 */
au.init();
au.start();
/** 滑鼠監聽 */
this.addMouseListener(this);
}
private void Start() {
/** 將tu[i][j]賦值為1-9 */
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
tu[i][j] = i * 3 + j + 1;
}
/** 打亂順序 */
Random r = new Random();
int a, b, c;
for (int i = 0; i < 10; i++) {
a = r.nextInt(3);
b = r.nextInt(3);
c = tu[a][b];
tu[a][b] = tu[b][a];
tu[b][a] = c;
}
}
/* 繪製提示圖部分 */
public void paint(Graphics g) {
super.paint(g);
if (flag1) {
g.drawRect(790, 0, 190, 190);
Image image = null;
try {
String str = "tu.png";
image = ImageIO.read(new File(str));
} catch (IOException e) {
e.printStackTrace();
}
/** 設定提示邊框 */
g.setColor(Color.pink);
g.fillRect(730, 0, 200, 190);
g.setColor(Color.black);
g.setFont(font1);
g.drawString("提", 740, 80);
g.drawString("示", 740, 130);
/** 顯示提示圖片 */
g.drawImage(image, 810, 0, 190, 190, this);
}
}
/* 繪製拼圖中的每個元件 */
public void paintComponent(Graphics g) {
super.paintComponent(g);
/** 繪製背景圖 */
BufferedImage image1 = null;
try {
String str = "back1.png";
image1 = ImageIO.read(new File(str));
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(image1, 0, 0, 1000, 900, this);
/** 繪製拼圖主體 */
g.drawRect(200, 200, 600, 600);
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
if (tu[i][j] != 9) {
Image image = null;
try {
String str = "tu" + tu[i][j] + ".png";
image = ImageIO.read(new File(str));
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(image, 200 + 200 * j, 200 + 200 * i, 200, 200,
this);// 顯示圖片
}
}
g.setFont(font1);// 設定字型
/** 拼圖完成時 */
if (flag) {
g.setColor(Color.yellow);
g.setFont(font3);// 設定字型
g.drawString("恭", 50, 350);
g.setColor(Color.red);
g.drawString("喜", 50, 600);
g.setColor(Color.green);
g.drawString("成", 850, 350);
g.setColor(Color.cyan);
g.drawString("功", 850, 600);
g.setColor(Color.red);
((Graphics2D) g).setStroke(new BasicStroke(15.0f));
g.drawRect(200, 200, 600, 600);
g.drawRect(195, 195, 610, 610);
}
/** 設定邊框粗度 */
((Graphics2D) g).setStroke(new BasicStroke(5.0f));
/** 設定移動步數邊框 */
g.setColor(Color.darkGray);
g.fillRect(350, 135, 378, 55);
g.setColor(Color.cyan);
g.setFont(font1);// 設定字型
g.drawString("移動步數:" + N, 350, 180);
/** 設定拼圖主體邊框 */
g.setColor(Color.green);
g.drawRect(200, 200, 600, 600);
g.setColor(Color.cyan);
g.drawRect(195, 195, 610, 610);
/** 設定遊戲時間邊框 */
g.setColor(Color.lightGray);
g.fillRect(350, 80, 378, 55);
g.setColor(Color.BLUE);
T = Time.getT();
g.setFont(font1);// 設定字型
g.drawString("遊戲時間:" + T, 350, 125);
repaint();
}
@Override
public void mouseClicked(MouseEvent e) {
if (flag == true)
return; // 如果已經成功完成
/* 得到行數和列數 圖片位置 */
int x = e.getX();
int y = e.getY();
xx = y / 200 - 1;
yy = x / 200 - 1;
move();// 圖片交換
int count = 0;// 用於判斷拼圖是否完成
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
if (tu[i][j] == i * 3 + j + 1)
count++;
}
if (count == 9)
flag = true;
}
private void move() {
/** 交換規則:圖片周圍為空白圖片時,圖片與空白位置交換 */
/* 如果圖片左邊為空白(圖片不在最左側) */
if (xx != 0 && tu[xx - 1][yy] == 9) {
/** 將圖片與空白處交換位置 */
tu[xx - 1][yy] = tu[xx][yy];
tu[xx][yy] = 9;
N++;// 當圖片移動時步數加一
}
/* 如果圖片右邊為空白(圖片不在最右側) */
else if (xx != 2 && tu[xx + 1][yy] == 9) {
/* 將圖片與空白處交換位置 */
tu[xx + 1][yy] = tu[xx][yy];
tu[xx][yy] = 9;
N++;
}
/* 如果圖片下邊為空白(圖片不在最下側) */
else if (yy != 0 && tu[xx][yy - 1] == 9) {
/** 將圖片與空白處交換位置 */
tu[xx][yy - 1] = tu[xx][yy];
tu[xx][yy] = 9;
N++;
}
/* 如果圖片上邊為空白(圖片不在最上側) */
else if (yy != 2 && tu[xx][yy + 1] == 9) {
/** 將圖片與空白處交換位置 */
tu[xx][yy + 1] = tu[xx][yy];
tu[xx][yy] = 9;
N++;
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public static boolean getFlag() {
if (flag == false)
return false;
else
return true;
}
}
Time.java
class Time extends Thread {
static int t = 0;// 計時
public void run() {
try {
while (true) {
Thread.sleep(1000);// 暫停一秒
t++;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static int getT() {
return t;
}
public void setT(int t) {
this.t = t;
}
}
Audio.java
import java.applet.*;
public class Audio extends Applet {
AudioClip music1;
public void init() {
music1 = newAudioClip(Audio.class.getResource("1.wav"));
}
public void start() {
music1.loop();
}
public void stop() {
music1.stop();
}
}
執行結果展示:
相關文章
- 用 JavaScript 實現簡單拼圖遊戲JavaScript遊戲
- Python實現多功能音樂播放器Python播放器
- 為Java程式中新增播放MIDI音樂功能Java
- 網頁實現一個簡單的音樂播放器(大佬別看。(⊙﹏⊙))網頁播放器
- canvas拼圖功能實現Canvas
- vue..js 編寫的簡單音樂播放器VueJS播放器
- 如何使用 pyqt 實現 Groove 音樂播放器QT播放器
- python實現簡單猜單詞遊戲Python遊戲
- Java Web簡單登陸功能的實現JavaWeb
- HTML5 實現的音樂播放器分享HTML播放器
- 網易雲音樂推薦系統簡單實現系列
- Clementine for Mac - 現代音樂播放器Mac播放器
- Java 實現《編譯原理》簡單詞法分析功能Java編譯原理詞法分析
- c#音樂播放C#
- 前端菜鳥遊戲篇,拼圖遊戲!前端遊戲
- Android開源音樂播放器之播放器基本功能Android播放器
- 遊戲音樂與影視音樂的異同遊戲
- 音樂格式轉換:java程式碼實現Java
- 開源!開源一個flutter實現的古詩拼圖遊戲Flutter遊戲
- 如何實現遊戲陪玩系統中語音的錄製與播放?遊戲
- Flutter實戰 | 從 0 搭建「網易雲音樂」APP(五、播放功能邏輯)FlutterAPP
- 簡易撲克牌遊戲簡單實現,歡迎指正遊戲
- vue音樂播放器Vue播放器
- React全家桶構建一款Web音樂App實戰(五):歌曲狀態管理及播放功能實現ReactWebAPP
- 遊戲中的哥特音樂遊戲
- 基於Android的音樂播放器的設計與實現Android播放器
- 一文帶你實現遊戲中的音樂、音效設定遊戲
- 遊戲音樂和影視音樂有什麼不同?遊戲
- python實現播放音訊和錄音功能示例程式碼Python音訊
- 用於遊戲開發的圖形和音樂工具遊戲開發
- 微信小程式:拼圖遊戲微信小程式遊戲
- 自定義上傳圖片拼圖遊戲遊戲
- java實現簡單的JDBCJavaJDBC
- Android 音樂播放器開發實錄(MediaSession)Android播放器Session
- 好程式設計師前端分享使用JS開發簡單的音樂播放器程式設計師前端JS播放器
- 《虛構世界》:是音遊又不是音遊的音樂遊戲遊戲
- 藉助 Turbolinks 實現不間斷的網頁音樂播放器網頁播放器
- 千千音樂 for Mac(原百度音樂播放器)Mac播放器
- Qt基於SDL庫簡單實現YUV影片播放QT