拼图小游戏,学习阶段。很多不足, 改进了一下
Фотография:
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.File;импорт 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 ShowPicture = 0; @SuppressWarnings («статический доступ») public J_JPanel () выдает IOException {J_Puzzle a = new J_Puzzle (); если (a.changetime ==-1) showpicture = 1; Файл f = новый файл("样图"+showpicture+".jpg"); m_image = ImageIO.read(f); } Public void PaintComponent(Graphics g) {g.drawImage(m_image, 0, 0, 360, 360, this); } } Публичный класс J_Puzzle расширяет JFrame и реализует ActionListener{ /** * */ Private static Final Long SerialVersionUID = 1L; интервал я, j; статическое время изменения int = 0; Контейнер c = getContentPane(); JButton b[] = новая JButton[16]; ImageIcon ic[][] = новый ImageIcon[2][15]; public J_Puzzle() выдает 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] = новый ImageIcon(pic_name[j]); } JMenuBar mBar = новый JMenuBar (); setJMenuBar (мБар); интервал к = 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("退出( З)")},{новый JMenuItem("查看样图(E)"),new JMenuItem("关于(T)")}}; for(i = 0;i < 2;i ++) { mBar.add(m[i]); m[i].setMnemonic(mC[0][i]); если (я == 0)к = 0; иначе к = 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 (новый ActionListener () {общественный недействительный 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]; = случайное число(); для (я = 1; я < 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(истина); Контейнер 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 гр = новый GridBagLayout (); c.setLayout(гр); int gx[] = {0,1,2,3}; int gy[] = {0,1,2,3}; интервал к1; Размер d = новый размер (90,90); Строка s_number; GridBagConstraints gc = новый GridBagConstraints(); for(i = 1;i <5;i ++) { if(i==4)k1=4; иначе к1=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] = новая 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); } Общественный недействительный actionPerformed (ActionEvent е) {int j; JButton b = (JButton)e.getSource(); Точка p = b.getLocation(); Точка p1 = ноль; 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 = новая точка(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 = новая точка(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; п[я] = температура; for(int j = 0;j < i;j ++) if(n[j]==temp) { i--; перерыв; } } Вернуть n; } /*判断是否排序成功*/ public boolean check() { Point location[] = new Point[16]; логическое бо = ложь; число интервалов = 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+ я*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++; если (счет == 15) бо = истина; } Вернуть Бо; } Public static void main(String args[]) выдает 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(истина); app.setResizable(ложь); }}
以上所述就是本文的全部内容了,希望对大家学习Java够有所帮助。