📄 chessboard.java
字号:
if(m-2-i>=0) if(table[m-1-i][n]==0&&table[m-2-i][n]==p) { i++; a1--; a1--; } while(m+1+j<15&&table[m+1+j][n]==p) { j++; } a2=m+1+j; if(m+2+j<15) if(table[m+1+j][n]==0&&table[m+2+j][n]==p) { j++; a2++; a2++; } num=i+j+1; if(a1>=0) if(table[a1][n]==0) b++; if(a2<15) if(table[a2][n]==0) b++; if(b==2) huo[num]++; if(b==1) si[num]++; if(num==5) si[num]=huo[num]=1; }} void counter3(int m,int n,int p) //计算-45度方向上个数和死活状态{ int a1,a2,b1,b2; a1=a2=b1=b2=0; if(table[m][n]==0) { b=0; //table[m][n]==k;b=0表示双死,b==1表示单活,b==2双活 int i,j; i=j=0; num=0; while(n-1-i>=0&&m-1-i>=0&&table[m-1-i][n-1-i]==p) { i++; } a1=m-1-i;a2=n-i-1; if(a1-1>=0&&a2-1>=0) if(table[a1][a2]==0&&table[a1-1][a2-1]==p) { i++; a1--; a1--; a2--; a2--; } while(n+1+j<15&&m+1+j<15&&table[m+1+j][n+1+j]==p) { j++; } b1=m+1+j; b2=n+1+j; if(b1+1<=14&&b2+1<=0) if(table[b1][b2]==0&&table[b1+1][b2+1]==p) { j++; b1++; b1++; b2++; b2++; } num=i+j+1; if(a1>=0&&a2>=0) if(table[a1][a2]==0) b++; if(b1<15&&b2<15) if(table[b1][b2]==0) b++; if(b==2) huo[num]++; if(b==1) si[num]++; if(num==5) si[num]=huo[num]=1; }} void counter4(int m,int n,int p) //计算+45度方向上个数和死活状态{ int a1,a2,b1,b2; a1=a2=b1=b2=0; if(table[m][n]==0) { b=0; //table[m][n]==k;b=0表示双死,b==1表示单活,b==2双活 int i,j; i=j=0; num=0; while(m-1-i>=0&&n+1+i<15&&table[m-1-i][n+1+i]==p) { i++; } a1=m-1-i; a2=n+1+i; if(a1-1>=0&&a2+1<=14) if(table[a1][a2]==0&&table[a1-1][a2+1]==p) { i++; a1--; a1--; a2++; a2++; } while(m+1+j<15&&n-1-j>=0&&table[m+1+j][n-1-j]==p) { j++; } b1=m+1+j; b2=n-1-j; if(b1+1<15&&b2-1>=0) if(table[b1][b2]==0&&table[b1+1][b2-1]==p) { j++; b1+=2; b2-=2; } num=i+j+1; if(a1>=0&&a2<15) if(table[a1][a2]==0) b++; if(b1<15&&b2>=0) if(table[b1][b2]==0) b++; if(b==2) huo[num]++; if(b==1) si[num]++; if(num==5) si[num]=huo[num]=1; }} int evaluateOne(int m,int n,int p){//对一个空格评分;m,n为下表,p=1为电脑,p=2为玩家; System.out.println("*******************"); int value=0; for(int i=0;i<6;i++){ si[i]=huo[i]=0; } counter1(m,n,p); counter2(m,n,p); counter3(m,n,p); counter4(m,n,p); if(si[5]==1||huo[5]==1)value=100000; else if(huo[4]>=1||si[4]>=2||(si[4]==1&&huo[3]>=1))value=5000; else if(huo[3]>1)value=5000; else if(si[3]>0&&huo[3]==1)value=1000; else if(si[4]==1)value=500; else if(huo[3]==1)value=200; else if(huo[2]>0&&si[3]>0)value=100; else if(si[3]>0)value=50; else if(huo[2]>1)value=10; else if(huo[2]==1)value=5; else if(si[2]>1)value=3; System.out.println(value); return value; } int evaluate(int p) { //计算最好的一步;p=1为电脑,p=2为玩家; int result=0; int temp; for(int i=0;i<15;i++) { for(int j=0;j<15;j++) { if(table[i][j]==0) { temp=evaluateOne(i,j,p); if(result<temp) { result=temp; id=i; jd=j; } } } } return result; } int evaluate1 (int p) { int n_m [][]=new int [225][3]; int i,j,k,s; i=j=k=s=0; int temp; for(i=0;i<15;i++) { for( j=0;j<15;j++) { if(table[i][j]==0) { temp=evaluateOne(i,j,p); n_m[k][0]=i; n_m[k][1]=j; n_m[k][2]=temp; k++; } } } for(s=0;s<k;s++) { table[n_m[s][0]][n_m[s][1]]=p; if(n_m[s][2]>50000) n_m[s][2]*=10; else n_m[s][2]=evaluate( p); table[n_m[s][0]][n_m[s][1]]=0; } temp=0; for(s=0;s<k;s++) { if(temp<n_m[s][2]) { temp=n_m[s][2]; id=n_m[s][0]; jd=n_m[s][1]; } } return temp; }int evaluate2(int p){ int n_m [][]=new int [225][3]; int i,j,k,s; //int t[][]=new int [15][15]=table[][]; i=j=k=s=0; int result=0; int temp=0; for( i=0;i<15;i++) { for( j=0;j<15;j++) { if(table[i][j]==0) { temp=evaluateOne(i,j,p); n_m[k][0]=i; n_m[k][1]=j; n_m[k][2]=temp; k++; } } } for(s=0;s<k;s++) { table[n_m[s][0]][n_m[s][1]]=p; if(n_m[s][2]>50000) n_m[s][2]*=10; else n_m[s][2]=evaluate1( p); table[n_m[s][0]][n_m[s][1]]=0; } temp=0; for(s=0;s<k;s++) { if(temp<n_m[s][2]) { temp=n_m[s][2]; id=n_m[s][0]; jd=n_m[s][1]; } } return temp;}void evaluate3 (int p){ int n_m [][]=new int [225][3]; boolean b1; int max[]=new int[4]; max[0]=max[1]=max[2]=0; max[3]=10000; int i,j,k,s,m,n; i=j=k=s=m=n=0; int temp; for(i=0;i<15;i++) { for( j=0;j<15;j++) { if(table[i][j]==0) { n_m[k][0]=i; n_m[k][1]=j; n_m[k][2]=0; k++; table[i][j]=p; b1=true; for(m=0;m<225;m++) { if(n_m[k][2]<evaluateOne((int)(m/15),m%15,2)) n_m[k][2]=evaluateOne((int)(m/15),m%15,2); if(n_m[k][2]>=max[3]) { b1=false; break; } } table[i][j]=0; if(b1) { max[0]=k; max[1]=i; max[2]=j; max[3]=n_m[k][2]; } } } } cx=max[1]; cy=max[2]; }int k;// int num;int b;int si[]=new int [6],huo []=new int [6]; //************************************************************************************ protected Graphics g; // graphics context protected Image x, o; // graphical images for pieces protected int x0=0, y0=0; // 棋盘的右上角坐标 protected int width, height; // 棋盘的长宽 protected int tw, th; // 每个小方格的长宽 protected int lw = 1; // 线条厚度 protected int Computer=1;//电脑为1 protected int Player=2;//玩家为2 public int [][]table;//棋盘 protected int first=0;//标志谁先下,电脑为1,玩家为2; protected int mcount=0; protected int road[];//记录所有路径 int cmax,pmax;//电脑、玩家的最大评估值; int id,jd;//保存最大评估值的下标; int ci,cj,pi,pj; int cx,cy;//电脑要走的棋下标;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -