這篇文章主要介紹了如何使用java實現(xiàn)拼圖小游戲,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供茶陵網(wǎng)站建設(shè)、茶陵做網(wǎng)站、茶陵網(wǎng)站設(shè)計、茶陵網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、茶陵企業(yè)網(wǎng)站模板建站服務(wù),十年茶陵做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
具體內(nèi)容如下
1.首先設(shè)計視圖面板。2.添加所需要的圖片按鈕。3.最主要的是設(shè)計監(jiān)聽事件,添加圖片的監(jiān)聽按鈕,設(shè)定移動空白圖片周圍的按鈕。4.判斷是否成功 。
package sxy;import java.awt.Choice;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.image.CropImageFilter;import java.awt.image.FilteredImageSource;import java.awt.image.ImageFilter;import java.util.Random;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;public class PintuGame { public static void main(String args[]) { new PintuFrame().StartFrame(); }}class PintuFrame extends JFrame { private static final long serialVersionUID = 1L; // 等級設(shè)置 private static int level = 3; // 圖片索引 private static int index = 0; // 圖片數(shù)量 private static int picCount = 2; // 開始時間 private long startTime;// 初始化小方塊 private JButton[] buttons; // 初始化空方塊 private JPanel emptyPanel = new JPanel(); // 初始化監(jiān)聽類 private PintuListener listener = new PintuListener(); // 初始化Panel private JPanel panel = new JPanel(null); // 圖片預(yù)覽 private JLabel label; private String[] imgpath = new String[picCount]; // 選圖時的圖片路徑 String path; public PintuFrame() { for (int i = 0; i < picCount; i++) { imgpath[i] = i + ".jpg"; System.out.println(imgpath[i]); } path = imgpath[index]; } /** * 開始窗體加載 */```public void StartFrame() { panel.removeAll(); JButton start = new JButton("開始");// 開始按鈕 JButton left = new JButton("<"); JButton right = new JButton(">"); JLabel selLevel = new JLabel("LV:"); label = new JLabel(getIcon());// 根據(jù)圖標(biāo)設(shè)置標(biāo)簽 final Choice choice = new Choice();// 創(chuàng)建選擇器 choice.add("--初級--");// 添加列表項 choice.add("--中級--"); choice.add("--高級--"); selLevel.setBounds(5, 0, 20, 20);// 設(shè)置坐標(biāo) choice.setBounds(28, 0, 65, 20); start.setBounds(93, 0, 85, 20); left.setBounds(178, 0, 61, 20); right.setBounds(239, 0, 61, 20); label.setBounds(0, 22, 300, 300);// 設(shè)置標(biāo)簽的方位 panel.add(selLevel); panel.add(choice); panel.add(start); panel.add(left); panel.add(right); panel.add(label); panel.repaint(); add(panel); setTitle("拼圖游戲"); setBounds(450, 130, 300, 322); setResizable(false); // 添加關(guān)閉按鈕 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); // 監(jiān)聽等級選擇 start.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { level = choice.getSelectedIndex() + 3; launchFrame(); } }); // 監(jiān)聽選圖按鈕 <- left.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { if (index == 0) { index = picCount - 1; path = imgpath[index]; } else { path = imgpath[--index]; } panel.remove(label); label = new JLabel(getIcon()); label.setBounds(0, 22, 300, 300); panel.add(label); panel.repaint(); } }); // 監(jiān)聽選圖按鈕 -> right.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { if (index == picCount - 1) { index = 0; path = imgpath[index]; } else { path = imgpath[++index]; } panel.remove(label); label = new JLabel(getIcon()); label.setBounds(0, 22, 300, 300); panel.add(label); panel.repaint(); } }); } /** * 拼圖窗體加載 */ public void launchFrame() { startTime = System.currentTimeMillis(); panel.removeAll(); buttons = new JButton[level * level]; // 設(shè)置圖標(biāo)組 Icon[] icon = new PintuFrame().creatIcon(path); // 小方塊索引 int index = 0; // 小方塊坐標(biāo) int x = 0, y = 0; // 設(shè)置小方塊位置,圖標(biāo),監(jiān)聽 for (int i = 0; i < level; i++) { for (int j = 0; j < level; j++) { // 添加圖標(biāo) buttons[index] = new JButton(icon[index]); // 添加監(jiān)聽 buttons[index].addMouseListener(listener); // 設(shè)置位置 buttons[index].setBounds(x, y, 100, 100); // 添加到panel panel.add(buttons[index++]); x += 100; } y += 100; x = 0; } // 移除最后一個小方塊 panel.remove(buttons[(level * level) - 1]); // 設(shè)置空方塊位置 emptyPanel.setBounds((level - 1) * 100, (level - 1) * 100, 100, 100); // 添加空方塊 panel.add(emptyPanel); panel.repaint(); add(panel); setResizable(false); setTitle("拼圖游戲"); // 設(shè)置大小 setBounds(450, 130, level * 100, level * 100 + 30); // 打亂方格順序 breakRank(); // 添加關(guān)閉按鈕 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // 選圖界面圖像 public Icon getIcon() { ImageIcon bi = new ImageIcon(getClass().getClassLoader().getResource(path)); // 縮放大小并顯示到窗體 Image image = bi.getImage().getScaledInstance(300, 300, Image.SCALE_REPLICATE); return new ImageIcon(image); } // 打亂方格 public void breakRank() { Random r = new Random(); int x = 0, y = 0, emptyDir_X = 0, emptyDir_Y = 0; // 模擬隨即點擊1000次,打亂方格 for (int i = 0; i < 1000; i++) { int rid = r.nextInt(level * level - 1); // 獲得該方格按鈕的橫坐標(biāo) x = buttons[rid].getBounds().x; // 獲得該方格按鈕的縱坐標(biāo) y = buttons[rid].getBounds().y; // 得到空方格的橫坐標(biāo) emptyDir_X = emptyPanel.getBounds().x; // 得到空方格的縱坐標(biāo) emptyDir_Y = emptyPanel.getBounds().y; move(x, y, emptyDir_X, emptyDir_Y, buttons[rid]); } } // 移動方格 public void move(int x, int y, int emptyDir_X, int emptyDir_Y, JButton button) { // 進(jìn)行比較果滿足條件則交換 if (x == emptyDir_X && y - emptyDir_Y == 100) { button.setLocation(button.getBounds().x, button.getBounds().y - 100); } else if (x == emptyDir_X && y - emptyDir_Y == -100) { button.setLocation(button.getBounds().x, button.getBounds().y + 100); } else if (x - emptyDir_X == 100 & y == emptyDir_Y) { button.setLocation(button.getBounds().x - 100, button.getBounds().y); } else if (x - emptyDir_X == -100 && y == emptyDir_Y) { button.setLocation(button.getBounds().x + 100, button.getBounds().y); } else return; // 重新設(shè)置空方格的位置 emptyPanel.setLocation(x, y); } // 判斷是否拼湊成功 public boolean isFinish() { for (int i = 0; i < (level * level) - 1; i++) { int x = buttons[i].getBounds().x; int y = buttons[i].getBounds().y; // 根據(jù)坐標(biāo)位置判斷是否拼湊成功 0+0 0+1 .. if (y / 100 * level + x / 100 != i) return false; } return true; } // 事件監(jiān)聽類 public class PintuListener extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { JButton button = (JButton) e.getSource();// 獲得鼠標(biāo)按的方格按鈕 int x = button.getBounds().x;// 獲得該方格按鈕的橫坐標(biāo) int y = button.getBounds().y;// 獲得該方格按鈕的縱坐標(biāo) int nullDir_X = emptyPanel.getBounds().x;// 得到空方格的橫坐標(biāo) int nullDir_Y = emptyPanel.getBounds().y;// 得到空方格的縱坐標(biāo) move(x, y, nullDir_X, nullDir_Y, button); if (isFinish()) {// 進(jìn)行是否完成的判斷 panel.remove(emptyPanel);// 移除最后一個小方塊 panel.add(buttons[(level * level) - 1]);// 移除最后一個小方塊 JOptionPane.showMessageDialog(null, "恭喜你,完成拼圖\r\n用時為:" + (System.currentTimeMillis() - startTime) / 1000 + "S"); for (int i = 0; i < picCount; i++) {// 循環(huán)撤消鼠標(biāo)事件 buttons[i].removeMouseListener(listener); } StartFrame(); } repaint(); } } // 創(chuàng)建方格圖標(biāo)組 public Icon[] creatIcon(String srcImageFile) { ImageIcon bi = new ImageIcon(this.getClass().getClassLoader().getResource(srcImageFile)); // 讀取源圖像 Image image = bi.getImage(); int index = 0; int x = 0, y = 0; Icon[] icon = new Icon[level * level];// 根據(jù)窗體大小創(chuàng)建圖標(biāo)數(shù)量 for (int i = 0; i < level; i++) { for (int j = 0; j < level; j++) { // 從原圖像上獲取一個方形位置 ImageFilter cropFilter = new CropImageFilter(x, y, 100, 100); // 截取方形圖像 Image img = Toolkit.getDefaultToolkit() .createImage(new FilteredImageSource(image.getSource(), cropFilter)); icon[index++] = new ImageIcon(img); x += 100; } y += 100; x = 0; } return icon; }}感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用java實現(xiàn)拼圖小游戲”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
當(dāng)前名稱:如何使用java實現(xiàn)拼圖小游戲
鏈接分享:http://www.chinadenli.net/article44/pecphe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、動態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、、外貿(mào)建站、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)