拼圖小遊戲,學習階段。
示範圖片:
J_Puzzle.java
導入 java.awt.BorderLayout;導入 java.awt.Component;導入 java.awt.Container;導入 java.awt.Dimension;導入 java.awt.Font;導入 java.awt.Graphics;導入 java.awt.GridBagConstraints; java.awt.GridBagLayout;導入java.awt.Image;導入java.awt.Point;導入java.awt.event.ActionEvent;導入java.awt.event.ActionListener;導入java.awt.Toolkit;導入java.io。檔案;導入java.io.IOException;導入java.util.Random;導入javax.imageio.ImageIO;導入javax.swing.ImageIcon;導入javax.swing.JButton;導入javax.swing.JFrame;導入javax.swing.JMenu;導入javax.swing.JMenuBar;導入javax.swing.JMenuItem; javax.swing.JOptionPane;導入javax.swing.JPanel;導入javax.swing.KeyStroke;類別J_JPanel擴充JPanel{ /** * */ private static final long serialVersionUID = 1L;圖片m_image; int顯示圖片=0; @SuppressWarnings("static-access") public J_JPanel() throws IOException { J_Puzzle a = new J_Puzzle(); if(a.changetime==-1) showpicture = 1; File f = new File("樣圖"+showpicture+".jpg"); m_image = ImageIO.read(f); } public void PaintComponent(Graphics g) { g.drawImage(m_image, 0, 0, 360, 360, this); } }public class J_Puzzle extends JFrame Implements ActionListener{ /** * */ private static Final long serialVersionUID = 1L;整數 i,j;靜態 int 更改時間 = 0;容器 c = getContentPane(); JButton b[] = new JButton[16]; ImageIcon ic[][] = new ImageIcon[2][15]; public J_Puzzle() throws IOException { super("拼圖小遊戲");字串 pic_name[] = 新字串[15]; for(i = 0;i < 2;i ++) for(j = 0;j < 15;j ++) { pic_name[j] = String.valueOf(j+1+i*15)+".jpg ”; ic[i][j] = new ImageIcon(pic_name[j]); JMenuBar mBar = new JMenuBar(); setJMenuBar(mBar);整數 k = 0; JMenu []m = {new JMenu("選單(M)"),new JMenu("幫助(H)")}; char mC[][] = {{'M','H'},{'S','X','C','Z'},{'E','T'}}; JMenuItem mItem[][] = {{new JMenuItem("開始(S)"),new JMenuItem("重置(X)"),new JMenuItem("背景更換(C)"),new JMenuItem("退出( Z)")},{new JMenuItem("查看樣圖(E)"),new JMenuItem("關於(T)")}}; for(i = 0;i < 2;i ++) { mBar.add(m[i]); m[i].setMnemonic(mC[0][i]);如果(i==0)k = 0;否則 k = 1; for(j = 0;j < 4-ik;j ++) { m[i].add(mItem[i][j]); mItem[i][j].setMnemonic(mC[i+1][j]); mItem[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl"+mC[i+1][j])); mItem[i][j].addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { JMenuItem mItem = (JMenuItem)e.getSource(); if(mItem.getText().equalsIgnoreCase("重置(X ) )")||mItem.getText().equalsIgnoreCase("開始(S)")) { int location[][] = {{17,13},{17,103},{17,193},{17,283},{ 107 ,13},{107,103},{107,193},{107,283},{197,13},{197,103},{197,193},{197,283},{287,13},{287,87,{ 287,283 int rd_number[] = new int[16]; for(i = 1;i < 16;i ++) b[i].setLocation(location[rd_number[i-1]- 1][0],location[ rd_number[i-1]-1][1]); } else if(mItem.getText().equalsIgnoreCase(背景"更換(C)")) { changetime++ for(i = 0;i < 15;i ++ ) { b[i+1].setIcon(null); b[i+1].setIcon(ic[changetime][i]); } if(changetime==1) = -1; } else if(mItem. getText().equalsIgnoreCase("退出(Z)")) { int a = JOptionPane.showConfirmDialog(null, "您確定退出遊戲?"); System.exit(0); } else if(mItem.getText(). equalsIgnoreCase("查看樣圖(E)")) { JFrame jj = new JFrame("樣圖"); ; jj.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3-360, Toolkit.getDefaultToolkit().getScreenSize().height/4); jj.setVisible(true);容器 c1 = jj.getContentPane();嘗試 { c1.add(new J_JPanel(),BorderLayout.CENTER); } catch (IOException e1) { // TODO 自動產生的 catch 區塊 e1.printStackTrace(); } } if(mItem.getText().equalsIgnoreCase("關於(T)")) { JOptionPane.showMessageDialog(null, "簡單拼圖小遊戲/n製作人:菜鳥"); } } }); m[0].insertSeparator(1);m[1].insertSeparator(1); GridBagLayout gr = new GridBagLayout(); c.setLayout(gr); int gx[] = {0,1,2,3}; int gy[] = {0,1,2,3};整數k1;維度 d = 新維度(90,90);字串 s_number; GridBagConstraints gc = new GridBagConstraints(); for(i = 1;i < 5;i ++) { if(i==4)k1=4;否則k1=5; for(j = 1;j < k1;j ++) { gc.gridx = gx[j-1]; gc.gridy = gy[i-1]; gc.fill = GridBagConstraints.NONE; s_number = String.valueOf(j+(i-1)*4); b[j+(i-1)*4] = new JButton(s_number,ic[0][j+(i-1)*4-1]); b[j+(i-1)*4].setPreferredSize(d); b[j+(i-1)*4].setFont(new Font("宋體",Font.PLAIN,0)); gr.setConstraints(b[j+(i-1)*4],gc); c.add(b[j+(i-1)*4]); for(i = 1;i <16;i ++) b[i].addActionListener(this); } public void actionPerformed(ActionEvent e) { int j; JButton b = (JButton)e.getSource();點 p = b.getLocation();點 p1 = null; for(j = -1;j < 2;j ++) { if(p.y+j*90>283||p.y+j*90<13) 繼續; else { 元件 a = c.getComponentAt(px, p.y+j*90); if(a.getHeight()!=90) p1 = new Point(px,p.y+j*90); } } for(j = -1;j < 2;j ++) { if(p.x+j*90>287||p.x+j*90<17) 繼續; else { 元件 a = c.getComponentAt(p.x+j*90, py); if(a.getHeight()!=90) p1 = new Point(p.x+j*90,py); if(p1!=null) b.setLocation(p1.x, p1.y); if(check()==true) JOptionPane.showMessageDialog(null, "恭喜您成功了"); }/*產生隨機數*/ public int[] randomnumber() { Random rd = new Random(); int n[] = 新 int[15]; for(int i = 0 ;i < 15;i ++) { int temp = rd.nextInt(15)+1; n[i] = 溫度; for(int j = 0;j < i;j ++) if(n[j]==temp) { i--;休息;返回n; } /*判斷是否排序成功*/ public boolean check() { Point location[] = new Point[16];布林值 bo = false;整數計數=0; for(int i = 0;i < 4;i ++) for(int j = 0;j < 4;j ++) 位置[i*4+j] = 新點(17+j*90, 13+我*90); for(int i = 0;i < 15;i ++) { if(b[i+1].getLocation().x==location[i].x&&b[i+1].getLocation().y= =位置[i].y) 計數++; if(count==15) bo=true;返回博; } public static void main(String args[]) throws IOException { J_Puzzle app = new J_Puzzle(); app.setDefaultCloseOperation(EXIT_ON_CLOSE); app.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3, Toolkit.getDefaultToolkit().getScreenSize().height/4); app.setSize(400,440); app.setVisible(true); app.setResizing(假); }}
以上就是本文的全部了,希望對大家學習java能夠有所幫助。