⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chessboard.java

📁 java版本的五子棋java版本的五子棋
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	   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 + -