这个小游戏是在上学期完成的,制作的比较简单,可以实现简单的人机对弈,实现了禁手,悔棋的功能,其中的人机对弈也没有用啥高级算法,就是经行了简单的堆代码,其中在制作时写了较多的类,也比较麻烦
首先是我的棋子:
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;
}
}
整个小游戏大概做了一个多月,期间有过很多问题,比如在鼠标监听上,对于人机对战,对于后面的禁手都遇到了各种困难,不过最后的游戏也只能简单的人机对战,有待改进,对于中间的判断没用更好的算法也有待改进。