java实现简单美女拼图游戏

作者:hebedich 时间:2023-03-09 16:45:26 

拼图小游戏,学习阶段。很多不足,改进了一下

演示图片:

java实现简单美女拼图游戏

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("关于(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("关于(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, "恭喜您成功了");
  }
/*产生随机数*/
 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);
 }
}

以上所述就是本文的全部内容了,希望对大家学习java能够有所帮助。

标签:java,美女拼图游戏
0
投稿

猜你喜欢

  • C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?

    2022-06-25 12:34:55
  • java实现小球碰撞功能

    2023-04-05 19:22:41
  • C#递归算法之归并排序

    2023-01-01 14:49:36
  • Java 中的 xx ≠ null 是什么新语法

    2022-09-10 20:51:13
  • Android EasyBarrage实现轻量级弹幕效果

    2022-03-07 06:46:31
  • 读取spring配置文件的方法(spring读取资源文件)

    2022-10-08 11:24:21
  • Java Base64算法实际应用之邮件发送实例分析

    2022-08-08 04:00:04
  • Java Socket编程详解及示例代码

    2022-06-29 07:05:27
  • Java8 中的ParallelStream

    2022-09-07 19:00:23
  • 基于C#实现简单离线注册码生成与验证

    2022-02-08 15:22:49
  • Flutter中http请求抓包的完美解决方案

    2023-08-22 18:47:47
  • IDEA全量替换一次性解决旧项目并将所有文件换行符改为LF问题

    2022-09-17 18:44:32
  • java中dart类详细讲解

    2022-01-23 13:01:13
  • Android仿美团下拉菜单(商品选购)实例代码

    2023-05-07 06:03:34
  • 用代码更新你的jar包

    2023-09-19 23:01:04
  • c#继承与多态使用示例

    2021-11-24 16:48:33
  • Java 如何实现时间控制

    2023-02-20 06:19:23
  • Android下载进度监听和通知的处理详解

    2022-03-27 08:39:02
  • 使用Java8 Stream流的skip + limit实现批处理的方法

    2023-11-29 06:17:39
  • Android实现为Notification加上一个进度条的方法

    2022-12-14 00:39:01
  • asp之家 软件编程 m.aspxhome.com