java實現(xiàn)簡單美女拼圖游戲
拼圖小游戲,學(xué)習(xí)階段。很多不足,改進了一下
J_Puzzle.java
import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Image; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Toolkit; 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.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.KeyStroke; class J_JPanel extends JPanel { /** * */ private static final long serialVersionUID = 1L; Image m_image; int showpicture=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; int i,j; static int changetime = 0; Container c = getContentPane(); JButton b[] = new JButton[16]; ImageIcon ic[][] = new ImageIcon[2][15]; public J_Puzzle() throws IOException { super("拼圖小游戲"); String pic_name[] = new String[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); int 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("關(guān)于(T)")}}; for(i = 0;i < 2;i ++) { mBar.add(m[i]); m[i].setMnemonic(mC[0][i]); if(i==0)k = 0; else k = 1; for(j = 0;j < 4-i-k;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,103},{287,193},{287,283}}; int rd_number[] = new int[16]; rd_number = randomnumber(); 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) changetime = -1; } else if(mItem.getText().equalsIgnoreCase("退出(Z)")) { int a = JOptionPane.showConfirmDialog(null, "您確定退出游戲?"); if(a==0) System.exit(0); } else if(mItem.getText().equalsIgnoreCase("查看樣圖(E)")) { JFrame jj = new JFrame("樣圖"); jj.setSize(360, 360); jj.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/3-360, Toolkit.getDefaultToolkit().getScreenSize().height/4); jj.setVisible(true); Container c1 = jj.getContentPane(); try { c1.add(new J_JPanel(),BorderLayout.CENTER); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } if(mItem.getText().equalsIgnoreCase("關(guān)于(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}; int k1; Dimension d = new Dimension(90,90); String s_number; GridBagConstraints gc = new GridBagConstraints(); for(i = 1;i < 5;i ++) { if(i==4)k1=4; else 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(); Point p = b.getLocation(); Point p1 = null; for(j = -1;j < 2;j ++) { if(p.y+j*90>283||p.y+j*90<13) continue; else { Component a = c.getComponentAt(p.x, p.y+j*90); if(a.getHeight()!=90) p1 = new Point(p.x,p.y+j*90); } } for(j = -1;j < 2;j ++) { if(p.x+j*90>287||p.x+j*90<17) continue; else { Component a = c.getComponentAt(p.x+j*90, p.y); if(a.getHeight()!=90) p1 = new Point(p.x+j*90,p.y); } } if(p1!=null) b.setLocation(p1.x, p1.y); if(check()==true) JOptionPane.showMessageDialog(null, "恭喜您成功了"); } /*產(chǎn)生隨機數(shù)*/ public int[] randomnumber() { Random rd = new Random(); int n[] = new int[15]; for(int i = 0 ;i < 15;i ++) { int temp = rd.nextInt(15)+1; n[i] = temp; for(int j = 0;j < i;j ++) if(n[j]==temp) { i--; break; } } return n; } /*判斷是否排序成功*/ public boolean check() { Point location[] = new Point[16]; boolean bo = false; int count=0; for(int i = 0;i < 4;i ++) for(int j = 0;j < 4;j ++) location[i*4+j] = new Point(17+j*90, 13+i*90); for(int i = 0;i < 15;i ++) { if(b[i+1].getLocation().x==location[i].x&&b[i+1].getLocation().y==location[i].y) count++; if(count==15) bo=true; } return bo; } 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.setResizable(false); } }
以上所述就是本文的全部內(nèi)容了,希望對大家學(xué)習(xí)java能夠有所幫助。
相關(guān)文章
如何使用JDBC連接數(shù)據(jù)庫并執(zhí)行SQL語句
JDBC是Java數(shù)據(jù)庫連接的縮寫,是Java程序與數(shù)據(jù)庫進行交互的標準API。JDBC主要包括Java.sql和javax.sql兩個包,通過DriverManager獲取數(shù)據(jù)庫連接對象Connection,并通過Statement或PreparedStatement執(zhí)行SQL語句2023-04-04Java非阻塞I/O模型之NIO相關(guān)知識總結(jié)
在了解NIO (Non-Block I/O) 非阻塞I/O模型之前,我們可以先了解一下原始的BIO(Block I/O) 阻塞I/O模型,NIO模型能夠以非阻塞的方式更好的利用服務(wù)器資源,需要的朋友可以參考下2021-05-058個簡單部分開啟Java語言學(xué)習(xí)之路 附j(luò)ava學(xué)習(xí)書單
8個簡單部分開啟Java語言學(xué)習(xí)之路,附j(luò)ava學(xué)習(xí)書單,這篇文章主要向大家介紹了學(xué)習(xí)java語言的方向,感興趣的小伙伴們可以參考一下2016-09-09使用Java自帶的mail?API實現(xiàn)郵件發(fā)送功能全過程
電子郵件的應(yīng)用非常廣泛,例如在某網(wǎng)站注冊了一個賬戶,自動發(fā)送一封歡迎郵件,通過郵件找回密碼,自動批量發(fā)送活動信息等,下面這篇文章主要給大家介紹了關(guān)于如何使用Java自帶的mail?API實現(xiàn)郵件發(fā)送功能的相關(guān)資料,需要的朋友可以參考下2023-04-04Spring中的@Conditional注解實現(xiàn)分析
這篇文章主要介紹了Spring中的@Conditional注解實現(xiàn)分析, @Conditional是Spring 4出現(xiàn)的注解,但是真正露出價值的是Spring Boot的擴展@ConditionalOnBean等,需要的朋友可以參考下2023-12-12IDEA插件Statistic統(tǒng)計代碼快速分辨爛項目
這篇文章主要為大家介紹了使用IDEA插件Statistic來統(tǒng)計項目代碼,幫助大家快速識別出爛項目,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-01-01Spring整合websocket整合應(yīng)用示例(下)
這篇文章主要介紹了Spring整合websocket整合應(yīng)用示例(下)的相關(guān)資料,需要的朋友可以參考下2016-04-04