“QQ找茬”游戏的识别小软件JAVA源码

来源:互联网 发布:2day女装淘宝 编辑:程序博客网 时间:2024/04/19 17:00

“QQ找茬”游戏识别很简单,只包含查找定位、定位比较和显示三部分,作者设计两个类:

1、GUI类:frmZC类,包含“定位”和“查询”两个按钮;

2、线程处理类:funChk类,实现线程序错位处理。

注:以下源码要调试务先做好程序JFrame界面,并将按钮放入JPanel并置于界面底部。

 

 

 

其中frmZC类源码如下:

//--------------------------------------------------------------------------------------------------------

//------------------------------frmZC开始------------------------------------------------------------

import java.awt.*;
import java.awt.image.*;
import java.util.*;
public class frmZC extends javax.swing.JFrame {
    private BufferedImage tImg,tImg1;
    private int locX,locY;
    private int locH=286,locW=381;
    private int tW=16;
    private int xxF=0,xFlag=1;
    //xxF 0 时 paint 不显示任何
    //    1 时 paint 显示当前图片
    //  其他 时 paint 显示相同图片内容,不同部分CYAN色显示
    //xFlag   3  时 图片已经定位
    /** Creates new form frmZC */
    public frmZC() {
        initComponents();
    }

    @Override
     public void paint(Graphics g){
        jpMain.setVisible(false);
        DrawZC(g);
        jpMain.setVisible(true);
    }   
     // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jpMain = new javax.swing.JPanel();
        jbDW = new javax.swing.JButton();
        jbZC = new javax.swing.JButton();
        jbCZC = new javax.swing.JButton();
        jtCS = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setAlwaysOnTop(true);
        setResizable(false);

        jbDW.setText("定位");
        jbDW.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jbDWMouseClicked(evt);
            }
        });

        jbZC.setText("查找");
        jbZC.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jbZCMouseClicked(evt);
            }
        });
        jbZC.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbZCActionPerformed(evt);
            }
        });

        jbCZC.setText("重查");
        jbCZC.setEnabled(false);
        jbCZC.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jbCZCMouseClicked(evt);
            }
        });
        jbCZC.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jbCZCActionPerformed(evt);
            }
        });

        jtCS.setEnabled(false);

        javax.swing.GroupLayout jpMainLayout = new javax.swing.GroupLayout(jpMain);
        jpMain.setLayout(jpMainLayout);
        jpMainLayout.setHorizontalGroup(
            jpMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpMainLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jbZC, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 43, Short.MAX_VALUE)
                .addComponent(jtCS, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jbCZC)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jbDW)
                .addContainerGap())
        );
        jpMainLayout.setVerticalGroup(
            jpMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpMainLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jpMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jbCZC)
                    .addComponent(jtCS, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jbDW)
                    .addComponent(jbZC)))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jpMain, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(316, Short.MAX_VALUE)
                .addComponent(jpMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                       

   

 private void jbDWMouseClicked(java.awt.event.MouseEvent evt) {                                 
        int x=10,y=150,i,j,k,l;
        int t=2;
        int tC[][]=new int[3][4];
        try {
            tImg = (new Robot()).createScreenCapture(new Rectangle(x,y,2*locW+300,locH+300));
        } catch (AWTException ex) {
            ex.printStackTrace();
        }
        for(i=0;i<locW/2;i++){
           for(j=0;j<locH/2;j++){
                tC[0][0]=tImg.getRGB(i, j);
                tC[0][1]=tImg.getRGB(i+140, j);
                tC[0][2]=tImg.getRGB(i+506, j);
                tC[0][3]=tImg.getRGB(i+780, j);
                tC[1][0]=tImg.getRGB(i, j+150);
                tC[1][1]=tImg.getRGB(i+386, j+150);
                tC[1][2]=tImg.getRGB(i+780, j+150);
                tC[1][3]=tC[1][2];
                tC[2][0]=tImg.getRGB(i, j+293);
                tC[2][1]=tImg.getRGB(i+140, j+293);
                tC[2][2]=tImg.getRGB(i+506, j+293);
                tC[2][3]=tImg.getRGB(i+780, j+293);
                t=2;
                for(k=0;k<3;k++){
                    for(l=0;l<3;l++){
                        if(tC[k][l]!=tC[k][l+1]||tC[k][l]==tC[(k+1)%3][l]){
                           t=10;
                           k=5;
                           l=5;
                        }
                    }
                }
                if(t!=10){
                    t=0;
                    locX=i+x;
                    locY=j+y;
                    i=locW;
                    j=locH;        
                }
           }           
        }
        if(t==0){
            xFlag=3;
            jbZC.setEnabled(true);
        }
        xxF=1;
        repaint();
    }                                

    private void jbZCMouseClicked(java.awt.event.MouseEvent evt) {                                 
        if(xFlag==3){
            int iFlag=0;
        funChk fc[]=new funChk[20];
            try {
                tImg = (new Robot()).createScreenCapture(new Rectangle(locX,locY,locW,locH));
            } catch (AWTException ex) {
                ex.printStackTrace();
            }
           for(tW=1;tW<=20;tW++){
            try {
                tImg1 = (new Robot()).createScreenCapture(new Rectangle(locX+locW+tW,locY,locW,locH));
            } catch (AWTException ex) {
                ex.printStackTrace();
            }
           fc[tW-1]=new funChk(tW,tImg,tImg1);
           fc[tW-1].start();
           }
           tW=0;
           while(true){
               if(fc[tW].rst){
                    tW++;
                    xxF=2;
                    repaint();
                    jtCS.setText("0");
                    break;
               }else{
                   tW++;
                   if(tW>=20){
                       iFlag++;
                       tW=0;
                       if(iFlag>500){
                           break;
                       }
                   }
               }
           }          
           
        }else{
            jbZC.setEnabled(false);
        }
    }                                

                                  

    private void jbCZCMouseClicked(java.awt.event.MouseEvent evt) {                                  
        // TODO add your handling code here:
        if(xFlag==3){
            if(tW==20){
                tW=2;
            }else{
                tW++;
            }
            xxF=2;
            repaint();
            Integer iNN=Integer.parseInt(jtCS.getText());
            iNN++;
            jtCS.setText(iNN.toString());
        }else{
            jbCZC.setEnabled(false);
        }
    }                                 
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new frmZC().setVisible(true);
            }
        });
    }
    public void DrawZC(Graphics g){
        int i,j,rgb,rgb1;
        if(xxF==0){
          
        }else if(xxF==1){
            try {
                tImg = (new Robot()).createScreenCapture(new Rectangle(locX,locY,locW,locH));
            } catch (AWTException ex) {
                ex.printStackTrace();
            }
            for(i=0;i<locW;i++){
                for(j=0;j<locH;j++){
                    g.setColor(new Color(tImg.getRGB(i, j)));
                    g.fillRect(i+10, j+35, 1, 1);
                }
            }
        }else{
            try {
                tImg1 = (new Robot()).createScreenCapture(new Rectangle(locX+locW+tW,locY,locW,locH));
            } catch (AWTException ex) {
                ex.printStackTrace();
            }
            for(i=0;i<locW;i++){
                for(j=0;j<locH;j++){
                    rgb=tImg.getRGB(i, j);
                    rgb1=tImg1.getRGB(i, j);
                    if(rgb==rgb1){
                        g.setColor(new Color(rgb1));
                     }else{
                        g.setColor(Color.CYAN);
                     }
                     g.fillRect(i+10, j+35, 1, 1);
                   
                }
            }
          }
    }
   
 
    // Variables declaration - do not modify                    
    private javax.swing.JButton jbCZC;
    private javax.swing.JButton jbDW;
    private javax.swing.JButton jbZC;
    private javax.swing.JPanel jpMain;
    private javax.swing.JTextField jtCS;
    // End of variables declaration                  
   
}
//-------------------------------------frmZC结束--------------------------------------------------------------

//-----------------------------------------------------------------------------------------------------------------

 

funChk类源码如下:

//-----------------------------------------------------------------------------------------------------------------

//------------------------------funChk开始--------------------------------------------------------------------

import java.awt.image.BufferedImage;

/**
 *
 * @author Minli
 */
public class funChk extends Thread {
    public boolean rst;
    private int iFlag;
    private BufferedImage tImg,tImg1;
    public funChk(int i,BufferedImage Img,BufferedImage Img1 ){
        iFlag=i;
        rst=false;
        tImg=Img;
        tImg1=Img1;
    }
    @Override
    public void run(){
        int i,j,rgb,rgb1,s=0,locW=tImg.getWidth(),locH=tImg.getHeight();
        int N=locW*locH/8;
        rst=false;
        for(i=0;i<locW;i+=2){
                for(j=0;j<locH;j+=2){
                    rgb=tImg.getRGB(i, j);
                    rgb1=tImg1.getRGB(i, j);
                    if(rgb==rgb1){
                        s++;
                        if(s>N){
                            rst=true;
                            j=locH+1;
                            i=locW+1;
                        }
                    }
                }
            }
    }
}

//---------------------funChk结束-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------------------------------