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

java實現(xiàn)簡單的拼圖游戲

 更新時間:2021年07月23日 14:56:47   作者:Serendipity_醬  
這篇文章主要為大家詳細介紹了java實現(xiàn)簡單的拼圖游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

用Java來實現(xiàn)簡單的拼圖游戲,供大家參考,具體內(nèi)容如下

首先我們看一下這個拼圖小游戲的效果圖:

創(chuàng)建一個名稱為MedleyGame的類,該類繼承了JFrame類;然后在該類中分別聲明一個面板對象和一個按鈕對象,面板對象用來添加拼圖按鈕,按鈕對象為當前顯示空白圖片的按鈕;最后為該類編寫一個main()方法和一個構造方法MedleyGame(),并在構造方法中設置窗體的相關屬性,如窗體的標題、顯示位置、大小等。
java項目結構如下:

具體java代碼如下:

package pac;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
public class MedleyGame extends JFrame{

 private JPanel centerPanel;// 拼圖按鈕面板
 private JButton emptyButton;// 空白按鈕對象
 public static void main(String[] args) {
  try {
   MedleyGame frame = new MedleyGame();//創(chuàng)建本類的對象
   frame.setVisible(true);//設置窗體為可見
  }catch(Exception e) {
   e.printStackTrace();
  }
 }
 public MedleyGame() {
  super();// 繼承JFrame類的構造方法
  setResizable(false);// 設置窗體大小不可改變
  setTitle("拼圖游戲");// 設置窗體的標題
  setBounds(100, 100, 354, 435);// 設置窗體的顯示位置及大小
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 設置關閉窗體時退出程序
  final JPanel topPanel = new JPanel();// 創(chuàng)建面板對象
  topPanel.setBorder(new TitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION,
    TitledBorder.DEFAULT_POSITION, null, null));// 為面板添加邊框
  topPanel.setLayout(new BorderLayout());// 設置面板采用邊界布局
  getContentPane().add(topPanel,BorderLayout.NORTH);// 將面板添加到窗體頂部
  final JLabel modelLabel = new JLabel();// 創(chuàng)建顯示參考圖片的標簽對象
  modelLabel.setIcon(new ImageIcon("img/model.jpg"));// 設置標簽顯示的參考圖片
  topPanel.add(modelLabel, BorderLayout.WEST);// 將標簽添加到面板的左側
  final JButton startButton = new JButton();// 創(chuàng)建“下一局”按鈕對象
  startButton.setText("下一局");// 設置按鈕的標簽文本
  startButton.addActionListener(new StartButtonAction());// 為按鈕添加監(jiān)聽器
  topPanel.add(startButton, BorderLayout.CENTER);// 將按鈕添加到面板的中間
  
  centerPanel = new JPanel();// 創(chuàng)建拼圖按鈕面板對象
  centerPanel.setBorder(new TitledBorder(null, "",
    TitledBorder.DEFAULT_JUSTIFICATION,
    TitledBorder.DEFAULT_POSITION, null, null));// 為面板添加邊框
  centerPanel.setLayout(new GridLayout(0, 3));// 設置拼圖按鈕面板采用3列的網(wǎng)格布局
  getContentPane().add(centerPanel, BorderLayout.CENTER);// 將面板添加到窗體的中間
  
  String[][] stochasticOrder = reorder();// 獲得網(wǎng)格圖片的隨機擺放順序
  for (int row = 0; row < 3; row++) {// 遍例行
   for (int col = 0; col < 3; col++) {// 遍例列
    final JButton button = new JButton();// 創(chuàng)建拼圖按鈕對象
    button.setName(row + "" + col);// 設置按鈕的名稱
    button.setIcon(new ImageIcon(stochasticOrder[row][col])); // 為拼圖按鈕設置圖片
    if (stochasticOrder[row][col].equals("img/22.jpg")) // 判斷是否為空白按鈕
     emptyButton = button;
    button.addActionListener(new ImgButtonAction()); // 為拼圖按鈕添加監(jiān)聽器
    centerPanel.add(button);// 將按鈕添加到拼圖按鈕面板中
   }
  }
  //
 }
 private String[][] reorder(){// 用來獲取網(wǎng)格圖片的隨機擺放順序
  String[][] exactnessOrder = new String[3][3];// 網(wǎng)格圖片的正確擺放順序
  for (int row = 0; row < 3; row++) {// 遍例行
   for (int col = 0; col < 3; col++) {// 遍例列
    exactnessOrder[row][col] = "img/" + row + col + ".jpg";
   }
 }
  String[][] stochasticOrder = new String[3][3];// 網(wǎng)格圖片的隨機擺放順序
  for (int row = 0; row < 3; row++) {// 遍例行
   for (int col = 0; col < 3; col++) {// 遍例列
    while (stochasticOrder[row][col] == null) { // 隨機擺放順序的指定網(wǎng)格為空
     int r = (int) (Math.random() * 3);// 取隨機行
     int c = (int) (Math.random() * 3);// 取隨機列
     if (exactnessOrder[r][c] != null) { // 正確擺放順序的指定網(wǎng)格不為空
      // 將位于正確擺放順序的指定網(wǎng)格的圖片擺放到位于隨機擺放順序的指定網(wǎng)格中
      stochasticOrder[row][col] = exactnessOrder[r][c];
      // 將位于正確順序的指定網(wǎng)格設置為空
      exactnessOrder[r][c] = null;
     }
    }
   }
  }
  return stochasticOrder;
 }
 
 class ImgButtonAction implements ActionListener {// 拼圖按鈕監(jiān)聽器
  public void actionPerformed(ActionEvent e) {
   String emptyName = emptyButton.getName();// 獲得空白按鈕的名稱
   char emptyRow = emptyName.charAt(0);// 獲得空白按鈕所在的行
   char emptyCol = emptyName.charAt(1);// 獲得空白按鈕所在的列
   JButton clickButton = (JButton) e.getSource();// 獲得被點擊按鈕對象
   String clickName = clickButton.getName();// 獲得被點擊按鈕的名稱
   char clickRow = clickName.charAt(0);// 獲得被點擊按鈕所在的行
   char clickCol = clickName.charAt(1);// 獲得被點擊按鈕所在的列
   // 判斷被點擊按鈕與空白按鈕是否相臨
   if (Math.abs(clickRow - emptyRow) + Math.abs(clickCol - emptyCol) == 1) {
    // 將被點擊按鈕的圖片移動到空白按鈕上
    emptyButton.setIcon(clickButton.getIcon());
    // 設置被點擊的按鈕顯示空白圖片
    clickButton.setIcon(new ImageIcon("img/22.jpg"));
    emptyButton = clickButton;// 將被點擊的按鈕設置為空白按鈕
   }
  }
 }
 class StartButtonAction implements ActionListener {// 下一局按鈕監(jiān)聽器
  public void actionPerformed(ActionEvent e) {
   String[][] stochasticOrder = reorder();// 獲得網(wǎng)格圖片的隨機擺放順序
   int i = 0;// 拼圖按鈕在拼圖按鈕面板中的索引
   for (int row = 0; row < 3; row++) {// 遍例行
    for (int col = 0; col < 3; col++) {// 遍例列
     JButton button = (JButton) centerPanel.getComponent(i++); // 獲得位于指定索引的拼圖按鈕
     button.setIcon(new ImageIcon(stochasticOrder[row][col])); // 為拼圖按鈕設置圖片
     if (stochasticOrder[row][col].equals("img/22.jpg")) // 判斷是否為空白按鈕
      emptyButton = button;
    }
   }
  }
 }
}

到這里代碼程序就寫完了,我們來運行一下:

按步驟保存然后運行一下:

結果沒問題,單擊“下一局”會重新刷新游戲,圖片會進行隨機排布:

到此,一個簡簡單單的拼圖小游戲就實現(xiàn)了。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • java ThreadLocal線程局部變量常用方法使用場景示例詳解

    java ThreadLocal線程局部變量常用方法使用場景示例詳解

    這篇文章主要介紹了為大家java ThreadLocal線程局部變量常用方法使用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • MAVEN_HOME、M2_HOME,maven環(huán)境變量設置方式

    MAVEN_HOME、M2_HOME,maven環(huán)境變量設置方式

    這篇文章主要介紹了MAVEN_HOME、M2_HOME,maven環(huán)境變量設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java實現(xiàn)轉(zhuǎn)換圖片格式的示例代碼

    Java實現(xiàn)轉(zhuǎn)換圖片格式的示例代碼

    在日常的軟件開發(fā)中,處理圖像文件是一項常見任務,這篇文章將實現(xiàn)實現(xiàn)一個簡單的Java程序,用于將一種圖片格式轉(zhuǎn)換為另一種格式,需要的可以了解下
    2025-02-02
  • 淺談JAVA Actor模型的一致性與隔離性

    淺談JAVA Actor模型的一致性與隔離性

    這篇文章主要介紹了JAVA Actor模型的的相關資料,文中講解非常細致,幫助大家更好的學習JAVA,感興趣的朋友可以了解下
    2020-06-06
  • BMIDE環(huán)境導入項目報編碼錯誤解決方案

    BMIDE環(huán)境導入項目報編碼錯誤解決方案

    這篇文章主要介紹了BMIDE環(huán)境導入項目報編碼錯誤解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • @Configuration與@Component作為配置類的區(qū)別詳解

    @Configuration與@Component作為配置類的區(qū)別詳解

    這篇文章主要介紹了@Configuration與@Component作為配置類的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • 詳解如何在低版本的Spring中快速實現(xiàn)類似自動配置的功能

    詳解如何在低版本的Spring中快速實現(xiàn)類似自動配置的功能

    這篇文章主要介紹了詳解如何在低版本的Spring中快速實現(xiàn)類似自動配置的功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • MybatisPlus多數(shù)據(jù)源及事務解決思路

    MybatisPlus多數(shù)據(jù)源及事務解決思路

    這篇文章主要介紹了MybatisPlus多數(shù)據(jù)源及事務解決思路,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Spring Cloud入門系列服務提供者總結

    Spring Cloud入門系列服務提供者總結

    這篇文章主要介紹了Spring Cloud入門系列之服務提供者總結,服務提供者使用Eureka Client組件創(chuàng)建 ,創(chuàng)建完成以后修改某文件,具體操作方法及實例代碼跟隨小編一起看看吧
    2021-06-06
  • 一篇文章帶你深入了解Java對象與Java類

    一篇文章帶你深入了解Java對象與Java類

    這篇文章主要給大家介紹了關于java中類和對象的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08

最新評論

汤阴县| 凤山市| 恩平市| 宜良县| 古田县| 正阳县| 绵竹市| 保德县| 泰来县| 双峰县| 巴林左旗| 抚宁县| 锡林浩特市| 紫阳县| 霍山县| 文昌市| 施甸县| 尖扎县| 墨竹工卡县| 沅陵县| 通许县| 巫山县| 康乐县| 彰武县| 白朗县| 新乡市| 大连市| 海丰县| 嘉祥县| 泾阳县| 信丰县| 罗江县| 凤城市| 绵阳市| 南通市| 昔阳县| 高淳县| 大渡口区| 彰武县| 莱西市| 琼结县|