Java小游戏总结(五子棋)

这个小游戏是在上学期完成的,制作的比较简单,可以实现简单的人机对弈,实现了禁手,悔棋的功能,其中的人机对弈也没有用啥高级算法,就是经行了简单的堆代码,其中在制作时写了较多的类,也比较麻烦
首先是我的棋子:

import java.awt.*;
public class ChessPieces  {
 
 public void paint1(int X1,int Y1,Graphics g) {//画黑棋
  g.setColor(Color.black);
  g.fillArc(X1,Y1,30,30,360,360);
 }
 public void paint2(int X1,int Y1,Graphics g) {//画白棋
  g.setColor(Color.red);
  g.fillArc(X1,Y1,30,30,360,360);
 }
}

这个是出第一个界面的代码,主要包含着开始,帮助退出三个按钮

public  class Begin extends JFrame  {
 static JFrame jframe=new JFrame("五子棋");//创建静态框架并设置标题
 //static Begin frm=new Begin();
 public void begin() {
  JPanel pane=new JPanel();//面板
  pane.setSize(450,450);
  JButton button1=new JButton("开始");
  button1.setBounds(300,250,100,30);
  JButton button2=new JButton("帮助");
  button2.setBounds(300,300,100,30);
  JButton button3=new JButton("退出");
  button3.setBounds(300,350,100,30);
  jframe.setSize(450,450);   //设置框架的大小
  jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击关闭的按钮,结束程序   
  jframe.setBackground(Color.GRAY);//设置框架背景颜色
  jframe.setLocationRelativeTo(null);//居中显示
  jframe.setLayout(null);//取消窗口jframe的默认布局窗口,,
  jframe.setResizable(false);//设置窗口大小不能改变
  jframe.setDefaultCloseOperation(3);
  jframe.add(button1);
  jframe.add(button2);
  jframe.add(button3);
  button1.addActionListener(new ActionListener() {//监听button1
   public void actionPerformed(ActionEvent e) {
    Chessboard board=new Chessboard();
    board.chessboard(null); //调动
    jframe.dispose();
   }
  });
  button2.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    new Help();
   }
  });
  button3.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    jframe.dispose();
   }
  });
  jframe.setVisible(true);   //将窗口显示出来
 }

下面代码是帮助的代码,主要是调用了一张图片

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Help extends JPanel {
 private static final long serialVersionUID=1L;
  public JFrame rame;
  ImageIcon pic=new ImageIcon("./src/Picture/timgWN9LUEK6.jpg");//图片
  public Help() {
   rame=new JFrame("五子棋规则");
   rame.setSize(600,600);
   
   setBounds(50,50,600,600);//面板的 位置、大小
   rame.setVisible(true);//显示
   rame.setResizable(false);//窗口大小不可改变
   rame.setLocationRelativeTo(null);//将此窗口放在中间
   rame.setLayout(null);//取消rame窗口的默认布局
   rame.add(this);//将面板加入框架中
  }
  public void paint(Graphics grp) {
   super.paint(grp);//获得画笔
   grp.drawImage(pic.getImage(),0,0,500,500,pic.getImageObserver());
  }
}

下面的代码是判断输赢的

import java.awt.Color;
import java.awt.Graphics;
//import java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Result extends JPanel {
 Chessboard board=new Chessboard();
  private static final long serialVersionUID=1L;
   public JFrame rame;
   ImageIcon pic=new ImageIcon("./src/Picture/7b9994daa421a2face4c532968e4da21 (1).jpg");//赢了图片
   ImageIcon pic2=new ImageIcon("./src/Picture/fc0ee43e5a008456afd1abfd872cfd92 (1).jpg");//输了图片
   public Result() {
    rame=new JFrame("结果");
    JButton button1=new JButton("重新开始");
    button1.setBounds(100,100,100,50);
    JButton button2=new JButton("退出");
    button2.setBounds(100,200,100,50);
    rame.setSize(300,300);
    setBounds(0,0,300,300);//面板的 位置、大小
    rame.setVisible(true);//显示
    rame.setResizable(false);//窗口大小不可改变
    rame.setLocationRelativeTo(null);//将此窗口放在中间
    rame.setLayout(null);//取消rame窗口的默认布局
    rame.add(this);//将面板加入框架中
    this.add(button1);
    this.add(button2);
    button1.addActionListener(new ActionListener() {//监听button1
     public void actionPerformed(ActionEvent e) {
      Chessboard board=new Chessboard();
      board.chessboard(null); //调动
      rame.dispose();
     }
    });
    button2.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
      rame.dispose();
     }
    });
   }
   public void paint(Graphics grp) {
    super.paint(grp);//获得画笔
     grp.drawImage(pic.getImage(),0,0,300,300,pic.getImageObserver());
    
   } 
}
import java.awt.Color;
import java.awt.Graphics;
//import java.awt.Dialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Result1 extends JPanel {
 Chessboard board=new Chessboard();
  private static final long serialVersionUID=1L;
   public JFrame rame;
   ImageIcon pic=new ImageIcon("./src/Picture/7b9994daa421a2face4c532968e4da21 (1).jpg");//赢了图片
   ImageIcon pic2=new ImageIcon("./src/Picture/fc0ee43e5a008456afd1abfd872cfd92 (1).jpg");//输了图片
   public Result1() {
    rame=new JFrame("结果");
    JButton button1=new JButton("重新开始");
    button1.setBounds(100,100,100,50);
    JButton button2=new JButton("退出");
    button2.setBounds(100,200,100,50);
    rame.setSize(500,500);
    setBounds(0,0,500,500);//面板的 位置、大小
    rame.setVisible(true);//显示
    rame.setResizable(false);//窗口大小不可改变
    rame.setLocationRelativeTo(null);//将此窗口放在中间
    rame.setLayout(null);//取消rame窗口的默认布局
    rame.add(this);//将面板加入框架中
    this.add(button1);
    this.add(button2);
    button1.addActionListener(new ActionListener() {//监听button1
     public void actionPerformed(ActionEvent e) {
      //new Chessboard();
      Chessboard board=new Chessboard();
      board.chessboard(null); //调动
      rame.dispose();
      //board.chessboard.rame.dispose();
     }
    });
    button2.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
      rame.dispose();
     }
    });
   }
   public void paint(Graphics grp) {
    super.paint(grp);//获得画笔
     //grp.drawImage(pic.getImage(),0,0,300,300,pic.getImageObserver());
     grp.drawImage(pic2.getImage(),0,0,500,500,pic2.getImageObserver());
    
   } 
}

下面代码是棋盘的代码

ChessPieces pieces = new ChessPieces();
 static JFrame jframe = new JFrame("五子棋");
 static int px;
 static int py;
 static int s = 0;
 static int l=0;
 static int[][] a = new int[20][20];// 棋盘数组
 static int[][][]b = new int [225][20][20];//保存每一步的a中的数据

以下是画出棋盘,和几个按钮的设置

public void chessboard(ActionEvent e) {
  setBounds(0, 0, 700, 550);
  jframe.setSize(700, 550); // 框架的大小
  jframe.setLocationRelativeTo(null);
  jframe.setResizable(false);
  jframe.setVisible(true);
  jframe.add(this);
  jframe.addMouseListener(new Mouse());// 鼠标事件
  jframe.setBackground(Color.white);
  jframe.setDefaultCloseOperation(3);// 关闭程序时释放资源
  jframe.setLayout(null);
  this.setLayout(null);
  JButton button0=new JButton("重新开始");
  button0.setBounds(500,200,100,30);
  JButton button1=new JButton("悔棋");
  button1.setBounds(500,250,100,30);
  JButton button2=new JButton("帮助");
  button2.setBounds(500,300,100,30);
  JButton button3=new JButton("退出");
  button3.setBounds(500,350,100,30);
  this.add(button0);
  this.add(button1);
  this.add(button2);
  this.add(button3);
  button0.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    for(int i=0;i<20;i++) {
     for(int j=0;j<20;j++) {
      a[i][j]=0;
     }
    }
    for(int o=0;o<225;o++) {
     for(int i=0;i<20;i++) {
      for(int j=0;j<20;j++) {
       b[o][i][j]=0;
      }
     }
    }
    l=0;
    s=0;
    repaint();
   }
  });
  button1.addActionListener(new ActionListener() {//监听button1
   public void actionPerformed(ActionEvent e) {
    Huiqi();
    repaint();
   }
  });
  button2.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    new Help();
   }
  });
  button3.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    jframe.dispose();
   }
  });
  
 }

下面是一个鼠标监听,用来调动,再点击的地方画上棋子

class Mouse extends MouseAdapter { // 鼠标监听
  boolean x = false;
  public void mousePressed(MouseEvent e) {// 鼠标点击x=true
   x = true;
   px = e.getX();// 鼠标点击时的X轴坐标
   py = e.getY();
   System.out.println(px);
   System.out.println(py);
   s++;//
   judge();//判断下白子或黑子
   if(px/30==0||py/30<=1||px/30>15||py/30>16)s--;
  }
 }

下面代码是绘出棋盘格

public void paint(Graphics g) {
  super.paint(g); // 获得画笔
  for (int i = 0; i <= 15; i++) {// 画棋盘格
   g.setColor(Color.GREEN); // 定义线的颜色
   g.drawLine(30, 30 + 30 * i, 480, 30 + 30 * i);// X轴线
   g.drawLine(30 + i * 30, 30, 30 + i * 30, 480);// Y轴线
  }
  for (int m = 2; m > 1 && m <= 16; m++) {// 遍历棋盘重画已有的棋子
   for (int n = 1; n > 0 && n <= 15; n++) {
    if (a[m][n] == 1 && m > 1 && m <= 16) {
     System.out.println(m);
     System.out.println(n);
     g.setColor(Color.black);
     g.fillArc(n*30,(m-1)*30,30,30,360,360);
    }
    if (a[m][n] == 2 && n > 0 && n <= 15) {
     g.setColor(Color.red);
     g.fillArc(n*30,(m-1)*30,30,30,360,360);
    }
    
   }
  }
  win();//调用win()方法 ,判断输赢
 }

下面包括悔棋,禁手,和判断输赢,纯属堆代码

public static void Huiqi() {//悔棋
  if(l==0)l=0;
  else l--;
  a=b[l];
 }
 
 public void judge() { // 定义一个方法给数组a[20][20]赋值,通过1、2判断棋子的颜色
  if (a[py / 30][px / 30]!=0) {  
   return ;
  }  if(a[py / 30][px / 30]==0) {
   a[py / 30][px / 30] = 1; // 1表示黑子
  }
   else s--;
  
  int app=0;
  //    0       1       2       3        4      5       6        7      8       9       10      11     12     13     14    15
  //判断下子的优先级
  String []arr= {"22220","02222","22202","22022","20222","11110","01111","11101","11011","10111","02220","01110","0220","0110","020","010"};
  String array ="";//将每行或列的所有数放在一个字符串中 
  for(int x=0;x<16;x++) {
   for(int i=2;i>=2&&i<=16;i++) {   //横着
    for(int j=1;j>=1&&j<=15;j++) {
     array=array+a[i][j]; //横着
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[i][array.indexOf(arr[x])+5]=2;
     else if(x==1)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i][array.indexOf(arr[x])+4]=2;
     else if(x==3)a[i][array.indexOf(arr[x])+3]=2;
     else if(x==4)a[i][array.indexOf(arr[x])+2]=2;
     else if(x==5)a[i][array.indexOf(arr[x])+5]=2;
     else if(x==6)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i][array.indexOf(arr[x])+4]=2;
     else if(x==8)a[i][array.indexOf(arr[x])+3]=2;
     else if(x==9)a[i][array.indexOf(arr[x])+2]=2;
     else if(x==10)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==13)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i][array.indexOf(arr[x])+1]=2;
      app++;
    }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {   //横着
    for(int i=2;i>=2&&i<=16;i++) {
     array=array+a[i][j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[array.indexOf(arr[x])+6][j]=2;
     else if(x==1)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==2)a[array.indexOf(arr[x])+5][j]=2;
     else if(x==3)a[array.indexOf(arr[x])+4][j]=2;
     else if(x==4)a[array.indexOf(arr[x])+3][j]=2;
     else if(x==5)a[array.indexOf(arr[x])+6][j]=2;
     else if(x==6)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==7)a[array.indexOf(arr[x])+5][j]=2;
     else if(x==8)a[array.indexOf(arr[x])+4][j]=2;
     else if(x==9)a[array.indexOf(arr[x])+3][j]=2;
     else if(x==10)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==11)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==12)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==13)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==14)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==15)a[array.indexOf(arr[x])+2][j]=2;
     app++;
    }
    array="";
   }
   for(int i=2;i>=2&&i<=16;i++) {
    for(int j=1;j>=1&&j<=17-i;j++) {//斜向下    上方
     array=array+a[i+j-1][j];
    }        
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[i+array.indexOf(arr[x])+4][array.indexOf(arr[x])+1+4]=2;
     else if(x==1)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i+array.indexOf(arr[x])+3][array.indexOf(arr[x])+1+3]=2;
     else if(x==3)a[i+array.indexOf(arr[x])+2][array.indexOf(arr[x])+1+2]=2;
     else if(x==4)a[i+array.indexOf(arr[x])+1][array.indexOf(arr[x])+1+1]=2;
     else if(x==5)a[i+array.indexOf(arr[x])+4][array.indexOf(arr[x])+1+4]=2;
     else if(x==6)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i+array.indexOf(arr[x])+3][array.indexOf(arr[x])+1+3]=2;
     else if(x==8)a[i+array.indexOf(arr[x])+2][array.indexOf(arr[x])+1+2]=2;
     else if(x==9)a[i+array.indexOf(arr[x])+1][array.indexOf(arr[x])+1+1]=2;
     else if(x==10)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2; 
     else if(x==13)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     app++;
    }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {   //斜向下  下方
    for(int i=2;i>=2&&i<=17-j;i++) {
     array=array+a[i][i+j-2];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[2+array.indexOf(arr[x])+4][array.indexOf(arr[x])+j+4]=2;
     else if(x==1)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==2)a[2+array.indexOf(arr[x])+3][array.indexOf(arr[x])+j+3]=2;
     else if(x==3)a[2+array.indexOf(arr[x])+2][array.indexOf(arr[x])+j+2]=2;
     else if(x==4)a[2+array.indexOf(arr[x])+1][array.indexOf(arr[x])+j+1]=2;
     else if(x==5)a[2+array.indexOf(arr[x])+4][array.indexOf(arr[x])+j+4]=2;
     else if(x==6)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==7)a[2+array.indexOf(arr[x])+3][array.indexOf(arr[x])+j+3]=2;
     else if(x==8)a[2+array.indexOf(arr[x])+2][array.indexOf(arr[x])+j+2]=2;
     else if(x==9)a[2+array.indexOf(arr[x])+1][array.indexOf(arr[x])+j+1]=2;
     else if(x==10)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==11)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==12)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2; 
     else if(x==13)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==14)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==15)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     app++;
    }
    array="";
   }
   for(int i=16;i>=2&&i<=16;i--) {   //斜向上    上方
    for(int j=1;j>=1&&j<=15&&j<=i;j++) {
     array=array+a[i+1-j][j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) { 
     if(x==0)a[i-array.indexOf(arr[x])-4][array.indexOf(arr[x])+1+4]=2;
     else if(x==1)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i-array.indexOf(arr[x])-3][array.indexOf(arr[x])+1+3]=2;
     else if(x==3)a[i-array.indexOf(arr[x])-2][array.indexOf(arr[x])+1+2]=2;
     else if(x==4)a[i-array.indexOf(arr[x])-1][array.indexOf(arr[x])+1+1]=2;
     else if(x==5)a[i-array.indexOf(arr[x])-4][array.indexOf(arr[x])+1+4]=2;
     else if(x==6)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i-array.indexOf(arr[x])-3][array.indexOf(arr[x])+1+3]=2;
     else if(x==8)a[i-array.indexOf(arr[x])-2][array.indexOf(arr[x])+1+2]=2;
     else if(x==9)a[i-array.indexOf(arr[x])-1][array.indexOf(arr[x])+1+1]=2;
     else if(x==10)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2; 
     else if(x==13)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     app++;
     }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {
    for(int i=16;i>=2&&i<=16&&i>=1+j;i--) {
     array=array+a[i][16-i+j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[16-array.indexOf(arr[x])-4][array.indexOf(arr[x])+j+4]=2;
     else if(x==1)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==2)a[16-array.indexOf(arr[x])-3][array.indexOf(arr[x])+j+3]=2;
     else if(x==3)a[16-array.indexOf(arr[x])-2][array.indexOf(arr[x])+j+2]=2;
     else if(x==4)a[16-array.indexOf(arr[x])-1][array.indexOf(arr[x])+j+1]=2;
     else if(x==5)a[16-array.indexOf(arr[x])-4][array.indexOf(arr[x])+j+4]=2;
     else if(x==6)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==7)a[16-array.indexOf(arr[x])-3][array.indexOf(arr[x])+j+3]=2;
     else if(x==8)a[16-array.indexOf(arr[x])-2][array.indexOf(arr[x])+j+2]=2;
     else if(x==9)a[16-array.indexOf(arr[x])-1][array.indexOf(arr[x])+j+1]=2;
     else if(x==10)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==11)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==12)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2; 
     else if(x==13)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==14)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==15)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     app++;
     }
    array="";
   }
   
  }
  l++;
  for(int i=0;i<20;i++) {
   for(int j=0;j<20;j++) {
    b[l][i][j]=a[i][j];
   }
  }
  for (int i = 0; i<20; i++) { // 观察出数组的值
   for (int j = 0; j<20; j++) {
    System.out.print(a[i][j] + " ");
   }
   System.out.println("");//换行
  }  
  repaint();
 }
 /*
  * 1.判断输赢,和长禁手,若输赢以判断则跳出该方法
  * 2.判断禁手*/
 public static void win() {//判断输赢和长连禁手
  for (int i = 2; i > 1 && i <= 16; i++) {
   for(int j = 1; j > 0 && j <= 15; j++) {
    int []count=new int [4];
    for(int s=j;s<=15;s++) {
     if(a[i][s]==a[i][j])count[0]++;
     else break;
    }
    for(int s=i;s<=16;s++){
     if(a[s][j]==a[i][j])count[1]++;
     else break;
    }
    for(int s=0;s+i<=16&&s+j<=15;s++) {
     if(a[s+i][s+j]==a[i][j])count[2]++;
     else break;
    }
    
    for(int s=1;i-s>1&&j-s>0;s++) {
     if(a[i-s][j-s]==a[i][j])count[2]++;
     else break;
    }
    for(int s=0;s+j<=15&&i-s>1;s++) {
     if(a[i-s][j+s]==a[i][j])count[3]++;
     else break;
    }
    
    for(int s=1;i+s<16&&j-s>0;s++) {
     
     if(a[i+s][j-s]==a[i][j])count[3]++;
    }
    Arrays.sort(count);
    if(count[3]==5&&a[i][j]==1) {
     wing();
    }else if(count[3]>5&&a[i][j]==1) {//出现长连
     fal();
    }else if(count[3]>=5&&a[i][j]==2) {
     fal();
    }
   }
  }
 } public static void Huiqi() {//悔棋
  if(l==0)l=0;
  else l--;
  a=b[l];
 }
 
 public void judge() { // 定义一个方法给数组a[20][20]赋值,通过1、2判断棋子的颜色
  if (a[py / 30][px / 30]!=0) {  
   return ;
  }  if(a[py / 30][px / 30]==0) {
   a[py / 30][px / 30] = 1; // 1表示黑子
  }
   else s--;
  
  int app=0;
  //    0       1       2       3        4      5       6        7      8       9       10      11     12     13     14    15
  //判断下子的优先级
  String []arr= {"22220","02222","22202","22022","20222","11110","01111","11101","11011","10111","02220","01110","0220","0110","020","010"};
  String array ="";//将每行或列的所有数放在一个字符串中 
  for(int x=0;x<16;x++) {
   for(int i=2;i>=2&&i<=16;i++) {   //横着
    for(int j=1;j>=1&&j<=15;j++) {
     array=array+a[i][j]; //横着
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[i][array.indexOf(arr[x])+5]=2;
     else if(x==1)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i][array.indexOf(arr[x])+4]=2;
     else if(x==3)a[i][array.indexOf(arr[x])+3]=2;
     else if(x==4)a[i][array.indexOf(arr[x])+2]=2;
     else if(x==5)a[i][array.indexOf(arr[x])+5]=2;
     else if(x==6)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i][array.indexOf(arr[x])+4]=2;
     else if(x==8)a[i][array.indexOf(arr[x])+3]=2;
     else if(x==9)a[i][array.indexOf(arr[x])+2]=2;
     else if(x==10)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==13)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i][array.indexOf(arr[x])+1]=2;
      app++;
    }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {   //横着
    for(int i=2;i>=2&&i<=16;i++) {
     array=array+a[i][j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[array.indexOf(arr[x])+6][j]=2;
     else if(x==1)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==2)a[array.indexOf(arr[x])+5][j]=2;
     else if(x==3)a[array.indexOf(arr[x])+4][j]=2;
     else if(x==4)a[array.indexOf(arr[x])+3][j]=2;
     else if(x==5)a[array.indexOf(arr[x])+6][j]=2;
     else if(x==6)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==7)a[array.indexOf(arr[x])+5][j]=2;
     else if(x==8)a[array.indexOf(arr[x])+4][j]=2;
     else if(x==9)a[array.indexOf(arr[x])+3][j]=2;
     else if(x==10)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==11)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==12)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==13)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==14)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==15)a[array.indexOf(arr[x])+2][j]=2;
     app++;
    }
    array="";
   }
   for(int i=2;i>=2&&i<=16;i++) {
    for(int j=1;j>=1&&j<=17-i;j++) {//斜向下    上方
     array=array+a[i+j-1][j];
    }        
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[i+array.indexOf(arr[x])+4][array.indexOf(arr[x])+1+4]=2;
     else if(x==1)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i+array.indexOf(arr[x])+3][array.indexOf(arr[x])+1+3]=2;
     else if(x==3)a[i+array.indexOf(arr[x])+2][array.indexOf(arr[x])+1+2]=2;
     else if(x==4)a[i+array.indexOf(arr[x])+1][array.indexOf(arr[x])+1+1]=2;
     else if(x==5)a[i+array.indexOf(arr[x])+4][array.indexOf(arr[x])+1+4]=2;
     else if(x==6)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i+array.indexOf(arr[x])+3][array.indexOf(arr[x])+1+3]=2;
     else if(x==8)a[i+array.indexOf(arr[x])+2][array.indexOf(arr[x])+1+2]=2;
     else if(x==9)a[i+array.indexOf(arr[x])+1][array.indexOf(arr[x])+1+1]=2;
     else if(x==10)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2; 
     else if(x==13)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     app++;
    }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {   //斜向下  下方
    for(int i=2;i>=2&&i<=17-j;i++) {
     array=array+a[i][i+j-2];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[2+array.indexOf(arr[x])+4][array.indexOf(arr[x])+j+4]=2;
     else if(x==1)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==2)a[2+array.indexOf(arr[x])+3][array.indexOf(arr[x])+j+3]=2;
     else if(x==3)a[2+array.indexOf(arr[x])+2][array.indexOf(arr[x])+j+2]=2;
     else if(x==4)a[2+array.indexOf(arr[x])+1][array.indexOf(arr[x])+j+1]=2;
     else if(x==5)a[2+array.indexOf(arr[x])+4][array.indexOf(arr[x])+j+4]=2;
     else if(x==6)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==7)a[2+array.indexOf(arr[x])+3][array.indexOf(arr[x])+j+3]=2;
     else if(x==8)a[2+array.indexOf(arr[x])+2][array.indexOf(arr[x])+j+2]=2;
     else if(x==9)a[2+array.indexOf(arr[x])+1][array.indexOf(arr[x])+j+1]=2;
     else if(x==10)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==11)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==12)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2; 
     else if(x==13)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==14)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==15)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     app++;
    }
    array="";
   }
   for(int i=16;i>=2&&i<=16;i--) {   //斜向上    上方
    for(int j=1;j>=1&&j<=15&&j<=i;j++) {
     array=array+a[i+1-j][j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) { 
     if(x==0)a[i-array.indexOf(arr[x])-4][array.indexOf(arr[x])+1+4]=2;
     else if(x==1)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i-array.indexOf(arr[x])-3][array.indexOf(arr[x])+1+3]=2;
     else if(x==3)a[i-array.indexOf(arr[x])-2][array.indexOf(arr[x])+1+2]=2;
     else if(x==4)a[i-array.indexOf(arr[x])-1][array.indexOf(arr[x])+1+1]=2;
     else if(x==5)a[i-array.indexOf(arr[x])-4][array.indexOf(arr[x])+1+4]=2;
     else if(x==6)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i-array.indexOf(arr[x])-3][array.indexOf(arr[x])+1+3]=2;
     else if(x==8)a[i-array.indexOf(arr[x])-2][array.indexOf(arr[x])+1+2]=2;
     else if(x==9)a[i-array.indexOf(arr[x])-1][array.indexOf(arr[x])+1+1]=2;
     else if(x==10)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2; 
     else if(x==13)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     app++;
     }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {
    for(int i=16;i>=2&&i<=16&&i>=1+j;i--) {
     array=array+a[i][16-i+j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[16-array.indexOf(arr[x])-4][array.indexOf(arr[x])+j+4]=2;
     else if(x==1)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==2)a[16-array.indexOf(arr[x])-3][array.indexOf(arr[x])+j+3]=2;
     else if(x==3)a[16-array.indexOf(arr[x])-2][array.indexOf(arr[x])+j+2]=2;
     else if(x==4)a[16-array.indexOf(arr[x])-1][array.indexOf(arr[x])+j+1]=2;
     else if(x==5)a[16-array.indexOf(arr[x])-4][array.indexOf(arr[x])+j+4]=2;
     else if(x==6)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==7)a[16-array.indexOf(arr[x])-3][array.indexOf(arr[x])+j+3]=2;
     else if(x==8)a[16-array.indexOf(arr[x])-2][array.indexOf(arr[x])+j+2]=2;
     else if(x==9)a[16-array.indexOf(arr[x])-1][array.indexOf(arr[x])+j+1]=2;
     else if(x==10)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==11)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==12)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2; 
     else if(x==13)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==14)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==15)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     app++;
     }
    array="";
   }
   
  }
  l++;
  for(int i=0;i<20;i++) {
   for(int j=0;j<20;j++) {
    b[l][i][j]=a[i][j];
   }
  }
  for (int i = 0; i<20; i++) { // 观察出数组的值
   for (int j = 0; j<20; j++) {
    System.out.print(a[i][j] + " ");
   }
   System.out.println("");//换行
  }  
  repaint();
 }
 /*
  * 1.判断输赢,和长禁手,若输赢以判断则跳出该方法
  * 2.判断禁手*/
 public static void win() {//判断输赢和长连禁手
  for (int i = 2; i > 1 && i <= 16; i++) {
   for(int j = 1; j > 0 && j <= 15; j++) {
    int []count=new int [4];
    for(int s=j;s<=15;s++) {
     if(a[i][s]==a[i][j])count[0]++;
     else break;
    }
    for(int s=i;s<=16;s++){
     if(a[s][j]==a[i][j])count[1]++;
     else break;
    }
    for(int s=0;s+i<=16&&s+j<=15;s++) {
     if(a[s+i][s+j]==a[i][j])count[2]++;
     else break;
    }
    
    for(int s=1;i-s>1&&j-s>0;s++) {
     if(a[i-s][j-s]==a[i][j])count[2]++;
     else break;
    }
    for(int s=0;s+j<=15&&i-s>1;s++) {
     if(a[i-s][j+s]==a[i][j])count[3]++;
     else break;
    }
    
    for(int s=1;i+s<16&&j-s>0;s++) {
     
     if(a[i+s][j-s]==a[i][j])count[3]++;
    }
    Arrays.sort(count);
    if(count[3]==5&&a[i][j]==1) {
     wing();
    }else if(count[3]>5&&a[i][j]==1) {//出现长连
     fal();
    }else if(count[3]>=5&&a[i][j]==2) {
     fal();
    }
   }
  }
 } public static void Huiqi() {//悔棋
  if(l==0)l=0;
  else l--;
  a=b[l];
 }
 
 public void judge() { // 定义一个方法给数组a[20][20]赋值,通过1、2判断棋子的颜色
  if (a[py / 30][px / 30]!=0) {  
   return ;
  }  if(a[py / 30][px / 30]==0) {
   a[py / 30][px / 30] = 1; // 1表示黑子
  }
   else s--;
  
  int app=0;
  //    0       1       2       3        4      5       6        7      8       9       10      11     12     13     14    15
  //判断下子的优先级
  String []arr= {"22220","02222","22202","22022","20222","11110","01111","11101","11011","10111","02220","01110","0220","0110","020","010"};
  String array ="";//将每行或列的所有数放在一个字符串中 
  for(int x=0;x<16;x++) {
   for(int i=2;i>=2&&i<=16;i++) {   //横着
    for(int j=1;j>=1&&j<=15;j++) {
     array=array+a[i][j]; //横着
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[i][array.indexOf(arr[x])+5]=2;
     else if(x==1)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i][array.indexOf(arr[x])+4]=2;
     else if(x==3)a[i][array.indexOf(arr[x])+3]=2;
     else if(x==4)a[i][array.indexOf(arr[x])+2]=2;
     else if(x==5)a[i][array.indexOf(arr[x])+5]=2;
     else if(x==6)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i][array.indexOf(arr[x])+4]=2;
     else if(x==8)a[i][array.indexOf(arr[x])+3]=2;
     else if(x==9)a[i][array.indexOf(arr[x])+2]=2;
     else if(x==10)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==13)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i][array.indexOf(arr[x])+1]=2;
      app++;
    }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {   //横着
    for(int i=2;i>=2&&i<=16;i++) {
     array=array+a[i][j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[array.indexOf(arr[x])+6][j]=2;
     else if(x==1)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==2)a[array.indexOf(arr[x])+5][j]=2;
     else if(x==3)a[array.indexOf(arr[x])+4][j]=2;
     else if(x==4)a[array.indexOf(arr[x])+3][j]=2;
     else if(x==5)a[array.indexOf(arr[x])+6][j]=2;
     else if(x==6)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==7)a[array.indexOf(arr[x])+5][j]=2;
     else if(x==8)a[array.indexOf(arr[x])+4][j]=2;
     else if(x==9)a[array.indexOf(arr[x])+3][j]=2;
     else if(x==10)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==11)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==12)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==13)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==14)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==15)a[array.indexOf(arr[x])+2][j]=2;
     app++;
    }
    array="";
   }
   for(int i=2;i>=2&&i<=16;i++) {
    for(int j=1;j>=1&&j<=17-i;j++) {//斜向下    上方
     array=array+a[i+j-1][j];
    }        
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[i+array.indexOf(arr[x])+4][array.indexOf(arr[x])+1+4]=2;
     else if(x==1)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i+array.indexOf(arr[x])+3][array.indexOf(arr[x])+1+3]=2;
     else if(x==3)a[i+array.indexOf(arr[x])+2][array.indexOf(arr[x])+1+2]=2;
     else if(x==4)a[i+array.indexOf(arr[x])+1][array.indexOf(arr[x])+1+1]=2;
     else if(x==5)a[i+array.indexOf(arr[x])+4][array.indexOf(arr[x])+1+4]=2;
     else if(x==6)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i+array.indexOf(arr[x])+3][array.indexOf(arr[x])+1+3]=2;
     else if(x==8)a[i+array.indexOf(arr[x])+2][array.indexOf(arr[x])+1+2]=2;
     else if(x==9)a[i+array.indexOf(arr[x])+1][array.indexOf(arr[x])+1+1]=2;
     else if(x==10)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2; 
     else if(x==13)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     app++;
    }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {   //斜向下  下方
    for(int i=2;i>=2&&i<=17-j;i++) {
     array=array+a[i][i+j-2];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[2+array.indexOf(arr[x])+4][array.indexOf(arr[x])+j+4]=2;
     else if(x==1)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==2)a[2+array.indexOf(arr[x])+3][array.indexOf(arr[x])+j+3]=2;
     else if(x==3)a[2+array.indexOf(arr[x])+2][array.indexOf(arr[x])+j+2]=2;
     else if(x==4)a[2+array.indexOf(arr[x])+1][array.indexOf(arr[x])+j+1]=2;
     else if(x==5)a[2+array.indexOf(arr[x])+4][array.indexOf(arr[x])+j+4]=2;
     else if(x==6)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==7)a[2+array.indexOf(arr[x])+3][array.indexOf(arr[x])+j+3]=2;
     else if(x==8)a[2+array.indexOf(arr[x])+2][array.indexOf(arr[x])+j+2]=2;
     else if(x==9)a[2+array.indexOf(arr[x])+1][array.indexOf(arr[x])+j+1]=2;
     else if(x==10)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==11)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==12)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2; 
     else if(x==13)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==14)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==15)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     app++;
    }
    array="";
   }
   for(int i=16;i>=2&&i<=16;i--) {   //斜向上    上方
    for(int j=1;j>=1&&j<=15&&j<=i;j++) {
     array=array+a[i+1-j][j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) { 
     if(x==0)a[i-array.indexOf(arr[x])-4][array.indexOf(arr[x])+1+4]=2;
     else if(x==1)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i-array.indexOf(arr[x])-3][array.indexOf(arr[x])+1+3]=2;
     else if(x==3)a[i-array.indexOf(arr[x])-2][array.indexOf(arr[x])+1+2]=2;
     else if(x==4)a[i-array.indexOf(arr[x])-1][array.indexOf(arr[x])+1+1]=2;
     else if(x==5)a[i-array.indexOf(arr[x])-4][array.indexOf(arr[x])+1+4]=2;
     else if(x==6)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i-array.indexOf(arr[x])-3][array.indexOf(arr[x])+1+3]=2;
     else if(x==8)a[i-array.indexOf(arr[x])-2][array.indexOf(arr[x])+1+2]=2;
     else if(x==9)a[i-array.indexOf(arr[x])-1][array.indexOf(arr[x])+1+1]=2;
     else if(x==10)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2; 
     else if(x==13)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     app++;
     }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {
    for(int i=16;i>=2&&i<=16&&i>=1+j;i--) {
     array=array+a[i][16-i+j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[16-array.indexOf(arr[x])-4][array.indexOf(arr[x])+j+4]=2;
     else if(x==1)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==2)a[16-array.indexOf(arr[x])-3][array.indexOf(arr[x])+j+3]=2;
     else if(x==3)a[16-array.indexOf(arr[x])-2][array.indexOf(arr[x])+j+2]=2;
     else if(x==4)a[16-array.indexOf(arr[x])-1][array.indexOf(arr[x])+j+1]=2;
     else if(x==5)a[16-array.indexOf(arr[x])-4][array.indexOf(arr[x])+j+4]=2;
     else if(x==6)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==7)a[16-array.indexOf(arr[x])-3][array.indexOf(arr[x])+j+3]=2;
     else if(x==8)a[16-array.indexOf(arr[x])-2][array.indexOf(arr[x])+j+2]=2;
     else if(x==9)a[16-array.indexOf(arr[x])-1][array.indexOf(arr[x])+j+1]=2;
     else if(x==10)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==11)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==12)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2; 
     else if(x==13)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==14)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==15)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     app++;
     }
    array="";
   }
   
  }
  l++;
  for(int i=0;i<20;i++) {
   for(int j=0;j<20;j++) {
    b[l][i][j]=a[i][j];
   }
  }
  for (int i = 0; i<20; i++) { // 观察出数组的值
   for (int j = 0; j<20; j++) {
    System.out.print(a[i][j] + " ");
   }
   System.out.println("");//换行
  }  
  repaint();
 }
 /*
  * 1.判断输赢,和长禁手,若输赢以判断则跳出该方法
  * 2.判断禁手*/
 public static void win() {//判断输赢和长连禁手
  for (int i = 2; i > 1 && i <= 16; i++) {
   for(int j = 1; j > 0 && j <= 15; j++) {
    int []count=new int [4];
    for(int s=j;s<=15;s++) {
     if(a[i][s]==a[i][j])count[0]++;
     else break;
    }
    for(int s=i;s<=16;s++){
     if(a[s][j]==a[i][j])count[1]++;
     else break;
    }
    for(int s=0;s+i<=16&&s+j<=15;s++) {
     if(a[s+i][s+j]==a[i][j])count[2]++;
     else break;
    }
    
    for(int s=1;i-s>1&&j-s>0;s++) {
     if(a[i-s][j-s]==a[i][j])count[2]++;
     else break;
    }
    for(int s=0;s+j<=15&&i-s>1;s++) {
     if(a[i-s][j+s]==a[i][j])count[3]++;
     else break;
    }
    
    for(int s=1;i+s<16&&j-s>0;s++) {
     
     if(a[i+s][j-s]==a[i][j])count[3]++;
    }
    Arrays.sort(count);
    if(count[3]==5&&a[i][j]==1) {
     wing();
    }else if(count[3]>5&&a[i][j]==1) {//出现长连
     fal();
    }else if(count[3]>=5&&a[i][j]==2) {
     fal();
    }
   }
  }
 } public static void Huiqi() {//悔棋
  if(l==0)l=0;
  else l--;
  a=b[l];
 }
 
 public void judge() { // 定义一个方法给数组a[20][20]赋值,通过1、2判断棋子的颜色
  if (a[py / 30][px / 30]!=0) {  
   return ;
  }  if(a[py / 30][px / 30]==0) {
   a[py / 30][px / 30] = 1; // 1表示黑子
  }
   else s--;
  
  int app=0;
  //    0       1       2       3        4      5       6        7      8       9       10      11     12     13     14    15
  //判断下子的优先级
  String []arr= {"22220","02222","22202","22022","20222","11110","01111","11101","11011","10111","02220","01110","0220","0110","020","010"};
  String array ="";//将每行或列的所有数放在一个字符串中 
  for(int x=0;x<16;x++) {
   for(int i=2;i>=2&&i<=16;i++) {   //横着
    for(int j=1;j>=1&&j<=15;j++) {
     array=array+a[i][j]; //横着
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[i][array.indexOf(arr[x])+5]=2;
     else if(x==1)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i][array.indexOf(arr[x])+4]=2;
     else if(x==3)a[i][array.indexOf(arr[x])+3]=2;
     else if(x==4)a[i][array.indexOf(arr[x])+2]=2;
     else if(x==5)a[i][array.indexOf(arr[x])+5]=2;
     else if(x==6)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i][array.indexOf(arr[x])+4]=2;
     else if(x==8)a[i][array.indexOf(arr[x])+3]=2;
     else if(x==9)a[i][array.indexOf(arr[x])+2]=2;
     else if(x==10)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==13)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i][array.indexOf(arr[x])+1]=2;
      app++;
    }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {   //横着
    for(int i=2;i>=2&&i<=16;i++) {
     array=array+a[i][j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[array.indexOf(arr[x])+6][j]=2;
     else if(x==1)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==2)a[array.indexOf(arr[x])+5][j]=2;
     else if(x==3)a[array.indexOf(arr[x])+4][j]=2;
     else if(x==4)a[array.indexOf(arr[x])+3][j]=2;
     else if(x==5)a[array.indexOf(arr[x])+6][j]=2;
     else if(x==6)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==7)a[array.indexOf(arr[x])+5][j]=2;
     else if(x==8)a[array.indexOf(arr[x])+4][j]=2;
     else if(x==9)a[array.indexOf(arr[x])+3][j]=2;
     else if(x==10)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==11)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==12)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==13)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==14)a[array.indexOf(arr[x])+2][j]=2;
     else if(x==15)a[array.indexOf(arr[x])+2][j]=2;
     app++;
    }
    array="";
   }
   for(int i=2;i>=2&&i<=16;i++) {
    for(int j=1;j>=1&&j<=17-i;j++) {//斜向下    上方
     array=array+a[i+j-1][j];
    }        
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[i+array.indexOf(arr[x])+4][array.indexOf(arr[x])+1+4]=2;
     else if(x==1)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i+array.indexOf(arr[x])+3][array.indexOf(arr[x])+1+3]=2;
     else if(x==3)a[i+array.indexOf(arr[x])+2][array.indexOf(arr[x])+1+2]=2;
     else if(x==4)a[i+array.indexOf(arr[x])+1][array.indexOf(arr[x])+1+1]=2;
     else if(x==5)a[i+array.indexOf(arr[x])+4][array.indexOf(arr[x])+1+4]=2;
     else if(x==6)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i+array.indexOf(arr[x])+3][array.indexOf(arr[x])+1+3]=2;
     else if(x==8)a[i+array.indexOf(arr[x])+2][array.indexOf(arr[x])+1+2]=2;
     else if(x==9)a[i+array.indexOf(arr[x])+1][array.indexOf(arr[x])+1+1]=2;
     else if(x==10)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2; 
     else if(x==13)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i+array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     app++;
    }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {   //斜向下  下方
    for(int i=2;i>=2&&i<=17-j;i++) {
     array=array+a[i][i+j-2];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[2+array.indexOf(arr[x])+4][array.indexOf(arr[x])+j+4]=2;
     else if(x==1)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==2)a[2+array.indexOf(arr[x])+3][array.indexOf(arr[x])+j+3]=2;
     else if(x==3)a[2+array.indexOf(arr[x])+2][array.indexOf(arr[x])+j+2]=2;
     else if(x==4)a[2+array.indexOf(arr[x])+1][array.indexOf(arr[x])+j+1]=2;
     else if(x==5)a[2+array.indexOf(arr[x])+4][array.indexOf(arr[x])+j+4]=2;
     else if(x==6)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==7)a[2+array.indexOf(arr[x])+3][array.indexOf(arr[x])+j+3]=2;
     else if(x==8)a[2+array.indexOf(arr[x])+2][array.indexOf(arr[x])+j+2]=2;
     else if(x==9)a[2+array.indexOf(arr[x])+1][array.indexOf(arr[x])+j+1]=2;
     else if(x==10)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==11)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==12)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2; 
     else if(x==13)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==14)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==15)a[2+array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     app++;
    }
    array="";
   }
   for(int i=16;i>=2&&i<=16;i--) {   //斜向上    上方
    for(int j=1;j>=1&&j<=15&&j<=i;j++) {
     array=array+a[i+1-j][j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) { 
     if(x==0)a[i-array.indexOf(arr[x])-4][array.indexOf(arr[x])+1+4]=2;
     else if(x==1)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==2)a[i-array.indexOf(arr[x])-3][array.indexOf(arr[x])+1+3]=2;
     else if(x==3)a[i-array.indexOf(arr[x])-2][array.indexOf(arr[x])+1+2]=2;
     else if(x==4)a[i-array.indexOf(arr[x])-1][array.indexOf(arr[x])+1+1]=2;
     else if(x==5)a[i-array.indexOf(arr[x])-4][array.indexOf(arr[x])+1+4]=2;
     else if(x==6)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==7)a[i-array.indexOf(arr[x])-3][array.indexOf(arr[x])+1+3]=2;
     else if(x==8)a[i-array.indexOf(arr[x])-2][array.indexOf(arr[x])+1+2]=2;
     else if(x==9)a[i-array.indexOf(arr[x])-1][array.indexOf(arr[x])+1+1]=2;
     else if(x==10)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==11)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==12)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2; 
     else if(x==13)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==14)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     else if(x==15)a[i-array.indexOf(arr[x])][array.indexOf(arr[x])+1]=2;
     app++;
     }
    array="";
   }
   for(int j=1;j>=1&&j<=15;j++) {
    for(int i=16;i>=2&&i<=16&&i>=1+j;i--) {
     array=array+a[i][16-i+j];
    }
    if(app==0&&array.indexOf(arr[x])!=-1) {
     if(x==0)a[16-array.indexOf(arr[x])-4][array.indexOf(arr[x])+j+4]=2;
     else if(x==1)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==2)a[16-array.indexOf(arr[x])-3][array.indexOf(arr[x])+j+3]=2;
     else if(x==3)a[16-array.indexOf(arr[x])-2][array.indexOf(arr[x])+j+2]=2;
     else if(x==4)a[16-array.indexOf(arr[x])-1][array.indexOf(arr[x])+j+1]=2;
     else if(x==5)a[16-array.indexOf(arr[x])-4][array.indexOf(arr[x])+j+4]=2;
     else if(x==6)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==7)a[16-array.indexOf(arr[x])-3][array.indexOf(arr[x])+j+3]=2;
     else if(x==8)a[16-array.indexOf(arr[x])-2][array.indexOf(arr[x])+j+2]=2;
     else if(x==9)a[16-array.indexOf(arr[x])-1][array.indexOf(arr[x])+j+1]=2;
     else if(x==10)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==11)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==12)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2; 
     else if(x==13)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==14)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     else if(x==15)a[16-array.indexOf(arr[x])][array.indexOf(arr[x])+j]=2;
     app++;
     }
    array="";
   }
   
  }
  l++;
  for(int i=0;i<20;i++) {
   for(int j=0;j<20;j++) {
    b[l][i][j]=a[i][j];
   }
  }
  for (int i = 0; i<20; i++) { // 观察出数组的值
   for (int j = 0; j<20; j++) {
    System.out.print(a[i][j] + " ");
   }
   System.out.println("");//换行
  }  
  repaint();
 }
 /*
  * 1.判断输赢,和长禁手,若输赢以判断则跳出该方法
  * 2.判断禁手*/
 public static void win() {//判断输赢和长连禁手
  for (int i = 2; i > 1 && i <= 16; i++) {
   for(int j = 1; j > 0 && j <= 15; j++) {
    int []count=new int [4];
    for(int s=j;s<=15;s++) {
     if(a[i][s]==a[i][j])count[0]++;
     else break;
    }
    for(int s=i;s<=16;s++){
     if(a[s][j]==a[i][j])count[1]++;
     else break;
    }
    for(int s=0;s+i<=16&&s+j<=15;s++) {
     if(a[s+i][s+j]==a[i][j])count[2]++;
     else break;
    }
    
    for(int s=1;i-s>1&&j-s>0;s++) {
     if(a[i-s][j-s]==a[i][j])count[2]++;
     else break;
    }
    for(int s=0;s+j<=15&&i-s>1;s++) {
     if(a[i-s][j+s]==a[i][j])count[3]++;
     else break;
    }
    
    for(int s=1;i+s<16&&j-s>0;s++) {
     
     if(a[i+s][j-s]==a[i][j])count[3]++;
    }
    Arrays.sort(count);
    if(count[3]==5&&a[i][j]==1) {
     wing();
    }else if(count[3]>5&&a[i][j]==1) {//出现长连
     fal();
    }else if(count[3]>=5&&a[i][j]==2) {
     fal();
    }
   }
  }
 } 

最后的是判断输赢后需要调动的方法

public static void fal() {//红子胜的时候调用
  new Result1();
  //jframe.dispose();
  for(int m=0;m<20;m++) {
   for(int n=0;n<20;n++) {
    a[m][n]=0;
   }
  }
  for(int o=0;o<225;o++) {
   for(int i=0;i<20;i++) {
    for(int j=0;j<20;j++) {
     b[o][i][j]=0;
    }
   }
  }
  l=0;
  s=0;
 }
 public static void wing() {//黑子胜的时候调用
  new Result();
  //jframe.dispose();
  for(int m=0;m<20;m++) {
   for(int n=0;n<20;n++) {
    a[m][n]=0;
   }
  }
  for(int o=0;o<225;o++) {
   for(int i=0;i<20;i++) {
    for(int j=0;j<20;j++) {
     b[o][i][j]=0;
    }
   }
  }
  l=0;
  s=0;
 }
}

整个小游戏大概做了一个多月,期间有过很多问题,比如在鼠标监听上,对于人机对战,对于后面的禁手都遇到了各种困难,不过最后的游戏也只能简单的人机对战,有待改进,对于中间的判断没用更好的算法也有待改进。

你可能感兴趣的:(Java学习)