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

📄 人机对战五子棋trydoc.cpp

📁 这个是一个简单但界面相当美观的人机对战五子棋系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	for(i=0;i<15;i++)
		for(j=0;j<15;j++)
		{
			sco1_nesw[i][j]=0;
            sco1_ns[i][j]=0;
            sco1_nwse[i][j]=0;
            sco1_we[i][j]=0;
			sco2_nesw[i][j]=0;
            sco2_ns[i][j]=0;
            sco2_nwse[i][j]=0;
            sco2_we[i][j]=0;
			sco_nesw[i][j]=0;
			sco_ns[i][j]=0;
			sco_nwse[i][j]=0;
			sco_we[i][j]=0;
		}
	for(i=0;i<15;i++)
		for(j=0;j<15;j++)
		{
///////////////////////////////////////////nwse////////////////////////////////////			
			if(condition[i][j]==EMPTY&&condition[i+1][j+1]!=EMPTY)      //se-defend
			{
				for(m=i+1,n=j+1,k1=0,count=1;m<=i+4&&condition[m][n]!=COMPUTER&&m<15&&n<15;m++,n++,k1++)
				{
					if(condition[m][n]==PEOPLE)
					{
					    sco1_nwse[i][j]+=count;
						count++;
					}
                }
				if(((m==15||n==15)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
					sco1_nwse[i][j]-=(count-2);
			}
			if(condition[i][j]==EMPTY&&condition[i-1][j-1]!=EMPTY)      //nw-defend
		    {
				for(m=i-1,n=j-1,k2=0,count=1;m>=i-4&&condition[m][n]!=COMPUTER&&m>0&&n>0;m--,n--,k2++)
				{
					if(condition[m][n]==PEOPLE)
					{
					    sco1_nwse[i][j]+=count;
						count++;
					}
                }
				if(((m==0||n==0)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
					sco1_nwse[i][j]-=(count-2);
			}
			if(k1+k2<4) sco1_nwse[i][j]=0;
	
		
		    
			if(condition[i][j]==EMPTY&&condition[i+1][j+1]!=EMPTY)      //se-attack
			{
				for(m=i+1,n=j+1,k1=0,count=1;m<=i+4&&condition[m][n]!=PEOPLE&&m<15&&n<15;m++,n++,k1++)
				{
					if(condition[m][n]==COMPUTER)
					{
					    sco2_nwse[i][j]+=count;
						count++;
					}
                }
				if(((m==15||n==15)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
					sco2_nwse[i][j]-=(count-2);
			}
			if(condition[i][j]==EMPTY&&condition[i-1][j-1]!=EMPTY)      //nw-attack
		    {
				for(m=i-1,n=j-1,k2=0,count=1;m>=i-4&&condition[m][n]!=PEOPLE&&m>0&&n>0;m--,n--,k2++)
				{
					if(condition[m][n]==COMPUTER)
					{
					    sco2_nwse[i][j]+=count;
						count++;
					}
                }
				if(((m==0||n==0)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
					sco2_nwse[i][j]-=(count-2);
			}
			if(k1+k2<4) sco2_nwse[i][j]=0;
			sco_nwse[i][j]=maxx(sco1_nwse[i][j],sco2_nwse[i][j]);
////////////////////////////////////ns/////////////////////////////////////////////
		    
			if(condition[i][j]==EMPTY&&condition[i+1][j]!=EMPTY)      //s-defend
			{
				for(m=i+1,n=j,k1=0,count=1;m<=i+4&&condition[m][n]!=COMPUTER&&m<15;m++,k1++)
				{
					if(condition[m][n]==PEOPLE)
					{
					    sco1_ns[i][j]+=count;
						count++;
					}
                }
				if(((m==15)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
					sco1_ns[i][j]-=(count-2);
			}
			if(condition[i][j]==EMPTY&&condition[i-1][j]!=EMPTY)      //n-defend
		    {
				for(m=i-1,n=j,k2=0,count=1;m>=i-4&&condition[m][n]!=COMPUTER&&m>0;m--,k2++)
				{
					if(condition[m][n]==PEOPLE)
					{
					    sco1_ns[i][j]+=count;
						count++;
					}
                }
				if(((m==0)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
					sco1_ns[i][j]-=(count-2);
			}
			if(k1+k2<4) sco1_ns[i][j]=0;
	
		
		    
			if(condition[i][j]==EMPTY&&condition[i+1][j]!=EMPTY)      //s-attack
			{
				for(m=i+1,n=j,k1=0,count=1;m<=i+4&&condition[m][n]!=PEOPLE&&m<15;m++,k1++)
				{
					if(condition[m][n]==COMPUTER)
					{
					    sco2_ns[i][j]+=count;
						count++;
					}
                }
				if(((m==15)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
					sco2_ns[i][j]-=(count-2);
			}
			if(condition[i][j]==EMPTY&&condition[i-1][j]!=EMPTY)      //n-attack
		    {
				for(m=i-1,n=j,k2=0,count=1;m>=i-4&&condition[m][n]!=PEOPLE&&m>0;m--,k2++)
				{
					if(condition[m][n]==COMPUTER)
					{
					    sco2_ns[i][j]+=count;
						count++;
					}
                }
				if(((m==0)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
					sco2_ns[i][j]-=(count-2);
			}
			if(k1+k2<4) sco2_ns[i][j]=0;
			sco_ns[i][j]=maxx(sco1_ns[i][j],sco2_ns[i][j]);
//////////////////////////////////////we//////////////////////////////////////////
			
			if(condition[i][j]==EMPTY&&condition[i][j+1]!=EMPTY)      //e-defend
			{
				for(m=i,n=j+1,k1=0,count=1;n<=j+4&&condition[m][n]!=COMPUTER&&n<15;n++,k1++)
				{
					if(condition[m][n]==PEOPLE)
					{
					    sco1_we[i][j]+=count;
						count++;
					}
                }
				if(((n==15)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
					sco1_we[i][j]-=(count-2);
			}
			if(condition[i][j]==EMPTY&&condition[i][j-1]!=EMPTY)      //w-defend
		    {
				for(m=i,n=j-1,k2=0,count=1;n>=j-4&&condition[m][n]!=COMPUTER&&n>0;n--,k2++)
				{
					if(condition[m][n]==PEOPLE)
					{
					    sco1_we[i][j]+=count;
						count++;
					}
                }
				if(((n==0)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
					sco1_we[i][j]-=(count-2);
			}
			if(k1+k2<4) sco1_we[i][j]=0;
	
		
		    
			if(condition[i][j]==EMPTY&&condition[i][j+1]!=EMPTY)      //e-attack
			{
				for(m=i,n=j+1,k1=0,count=1;n<=j+4&&condition[m][n]!=PEOPLE&&n<15;n++,k1++)
				{
					if(condition[m][n]==COMPUTER)
					{
					    sco2_we[i][j]+=count;
						count++;
					}
                }
				if(((n==15)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
					sco2_we[i][j]-=(count-2);
			}
			if(condition[i][j]==EMPTY&&condition[i][j-1]!=EMPTY)      //w-attack
		    {
				for(m=i,n=j-1,k2=0,count=1;n>=j-4&&condition[m][n]!=PEOPLE&&n>0;n--,k2++)
				{
					if(condition[m][n]==COMPUTER)
					{
					    sco2_we[i][j]+=count;
						count++;
					}
                }
				if(((n==0)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
					sco2_we[i][j]-=(count-2);
			}
			if(k1+k2<4) sco2_we[i][j]=0;
			sco_we[i][j]=maxx(sco1_we[i][j],sco2_we[i][j]);
//////////////////////////////////nesw////////////////////////////////////////////
            if(condition[i][j]==EMPTY&&condition[i+1][j-1]!=EMPTY)      //sw-defend
			{
				for(m=i+1,n=j-1,k1=0,count=1;n>=j-4&&condition[m][n]!=COMPUTER&&m<15&&n>0;m++,n--,k1++)
				{
					if(condition[m][n]==PEOPLE)
					{
					    sco1_nesw[i][j]+=count;
						count++;
					}
                }
				if(((m==15||n==0)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
					sco1_nesw[i][j]-=(count-2);
			}
			if(condition[i][j]==EMPTY&&condition[i-1][j+1]!=EMPTY)      //ne-defend
		    {
				for(m=i-1,n=j+1,k2=0,count=1;n<=j+4&&condition[m][n]!=COMPUTER&&m>0&&n<15;m--,n++,k2++)
				{
					if(condition[m][n]==PEOPLE)
					{
					    sco1_nesw[i][j]+=count;
						count++;
					}
                }
				if(((m==0||n==15)&&condition[m][n]==PEOPLE)||condition[m][n]==COMPUTER)
					sco1_nesw[i][j]-=(count-2);
			}
			if(k1+k2<4) sco1_nesw[i][j]=0;
	
		
		    
			if(condition[i][j]==EMPTY&&condition[i+1][j-1]!=EMPTY)      //sw-attack
			{
				for(m=i+1,n=j-1,k1=0,count=1;n>=j-4&&condition[m][n]!=PEOPLE&&m<15&&n>0;m++,n--,k1++)
				{
					if(condition[m][n]==COMPUTER)
					{
					    sco2_nesw[i][j]+=count;
						count++;
					}
                }
				if(((m==15||n==0)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
					sco2_nesw[i][j]-=(count-2);
			}
			if(condition[i][j]==EMPTY&&condition[i-1][j+1]!=EMPTY)      //ne-attack
		    {
				for(m=i-1,n=j+1,k2=0,count=1;n<=j+4&&condition[m][n]!=PEOPLE&&m>0&&n<15;m--,n++,k2++)
				{
					if(condition[m][n]==COMPUTER)
					{
					    sco2_nesw[i][j]+=count;
						count++;
					}
                }
				if(((m==0||n==15)&&condition[m][n]==COMPUTER)||condition[m][n]==PEOPLE)
					sco2_nesw[i][j]-=(count-2);
			}
			if(k1+k2<4) sco2_nesw[i][j]=0;
			sco_nesw[i][j]=maxx(sco1_nesw[i][j],sco2_nesw[i][j]);

			if(this->maxx(sco_nesw[i][j],sco_ns[i][j],sco_nwse[i][j],sco_we[i][j])>max1)
			{
		     max1=this->maxx(sco_nesw[i][j],sco_ns[i][j],sco_nwse[i][j],sco_we[i][j]);
			 max1_x=i;
			 max1_y=j;
			}
			
            
		}
		point.x=max1_x;
	    point.y=max1_y;
    	number++;        //记录电脑走的步数
		return point;
}*/

CPoint CTryDoc::ComputerThink1()
{
	CPoint point;
	int i,j,m,n,ccount,max1=0,max1_x,max1_y;
	for(i=0;i<15;i++)
	    for(j=0;j<15;j++)
		{
		   if(condition[i][j]==EMPTY)
		   {
		      for(m=i,n=j,ccount=5;m>=0&&n>=0&&ccount>0;m--,n--,ccount--)          //nw
			  {
			   		  switch(condition[m][n])
					  {
				      case EMPTY:    break;
				      case PEOPLE:  sco_nw[i][j]+=ccount; break;
					  case COMPUTER:  sco_nw[i][j]-=ccount; break;
					  default:  break;
				      }
			  }
		      for(m=i,n=j,ccount=5;m<15&&n<15&&ccount>0;m++,n++,ccount--)         //se
			  {
			   		  switch(condition[m][n])
					  {
				      case EMPTY:    break;
				      case PEOPLE:  sco_se[i][j]+=ccount; break;
					  case COMPUTER:  sco_se[i][j]-=ccount; break;
					  default: break;
				      }			     
			  }
		      for(m=i,n=j,ccount=5;m<15&&n>=0&&ccount>0;m++,n--,ccount--)
			  {
			   		  switch(condition[m][n])
					  {
				      case EMPTY:    break;
				      case PEOPLE:  sco_ne[i][j]+=ccount; break;
					  case COMPUTER:  sco_ne[i][j]-=ccount; break;
					  default: break;
					  }			     			     
			  }
		      for(m=i,n=j,ccount=5;m>=0&&n<15&&ccount>0;m--,n++,ccount--)
			  {
			          switch(condition[m][n])
					  {
				      case EMPTY:    break;
				      case PEOPLE:  sco_sw[i][j]+=ccount; break;
					  case COMPUTER:  sco_sw[i][j]-=ccount; break;
					  default: break;
					  }			     				  
			  }
		      for(m=i,n=j,ccount=5;n>=0&&ccount>0;n--,ccount--)
			  {
			   		  switch(condition[m][n])
					  {
				      case EMPTY:    break;
				      case PEOPLE:  sco_n[i][j]+=ccount; break;
					  case COMPUTER:  sco_n[i][j]-=ccount; break;
					  default: break;
					  }			     	
			  }
		      for(m=i,n=j,ccount=5;n<15&&ccount>0;n++,ccount--)
			  {
			   		  switch(condition[m][n])
					  {
				      case EMPTY:    break;
				      case PEOPLE:  sco_s[i][j]+=ccount; break;
					  case COMPUTER:  sco_s[i][j]-=ccount; break;
                      default: break;
					  }			     			    
			  }
		      for(m=i,n=j,ccount=5;m>=0&&ccount>0;m--,ccount--)
			  {
			   		  switch(condition[m][n])
					  {
				      case EMPTY:    break;
				      case PEOPLE:  sco_w[i][j]+=ccount; break;
					  case COMPUTER:  sco_w[i][j]-=ccount; break;
					  default: break;
					  }			     
			  }
		      for(m=i,n=j,ccount=5;m<15&&ccount>0;m++,ccount--)
			  {
			   		  switch(condition[m][n])
					  {
				      case EMPTY:    break;
				      case PEOPLE:  sco_e[i][j]+=ccount; break;
					  case COMPUTER:  sco_e[i][j]-=ccount; break;
					  default: break;
					  }
			  }
		   }
	       if(this->maxx(abs(sco_n[i][j]),abs(sco_s[i][j]),abs(sco_w[i][j]),abs(sco_e[i][j]),abs(sco_nw[i][j]),abs(sco_se[i][j]),abs(sco_ne[i][j]),abs(sco_sw[i][j]),abs(sco_nw[i][j]+sco_se[i][j]),abs(sco_ne[i][j]+sco_sw[i][j]),abs(sco_w[i][j]+sco_e[i][j]),abs(sco_n[i][j]+sco_s[i][j]))>max1)
		   {
		     max1=this->maxx(abs(sco_n[i][j]),abs(sco_s[i][j]),abs(sco_w[i][j]),abs(sco_e[i][j]),abs(sco_nw[i][j]),abs(sco_se[i][j]),abs(sco_ne[i][j]),abs(sco_sw[i][j]),abs(sco_nw[i][j]+sco_se[i][j]),abs(sco_ne[i][j]+sco_sw[i][j]),abs(sco_w[i][j]+sco_e[i][j]),abs(sco_n[i][j]+sco_s[i][j]));
			 max1_x=i;
			 max1_y=j;
		   }

	       sco_nw[i][j]=0;
	       sco_se[i][j]=0;
	       sco_ne[i][j]=0;
	       sco_sw[i][j]=0;
	       sco_n[i][j]=0;
	       sco_s[i][j]=0;
	       sco_w[i][j]=0;
	       sco_e[i][j]=0;
      }
	  	   point.x=max1_x;
		   point.y=max1_y;
		   number++;        //记录电脑走的步数
		   return point;
		   
}

int CTryDoc::maxx(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l)
{
   int max1=a;
   if(max1<b) max1=b;
   if(max1<c) max1=c;
   if(max1<d) max1=d;
   if(max1<e) max1=e;
   if(max1<f) max1=f;
   if(max1<g) max1=g;
   if(max1<h) max1=h;
   if(max1<i) max1=i;
   if(max1<j) max1=j;
   if(max1<k) max1=k;
   if(max1<l) max1=l;
   return max1;
}

BOOL CTryDoc::IsGameOver()
{
   int i,j,countw=0,countb=0,ccount,m,n;
   for(i=0;i<15;i++)
	   for(j=0;j<15;j++)
	   {
	       if(condition[i][j]==1||condition[i][j]==2)
		   {
		      for(m=i,n=j,ccount=5,countw=0,countb=0;n>=0,ccount>0;n--,ccount--)         //n
			  {
			    if(condition[m][n]==1)   countw++;
				else if(condition[m][n]==2)  countb++;
			  }
		      if(countw==5)
			  {   
		        return TRUE;
				
			  }
			  else if(countb==5)
			  {
			    return TRUE;
			  }
			  for(m=i,n=j,ccount=5,countw=0,countb=0;m<15,n>=0,ccount>0;m++,n--,ccount--)    //ne
			  {
			    if(condition[m][n]==1)   countw++;
				else if(condition[m][n]==2)  countb++;
			  }
		      if(countw==5)
			  {
			     return TRUE;  
			  }
			  else if(countb==5)
			  {
			     return TRUE; 
			  }
	      for(m=i,n=j,ccount=5,countw=0,countb=0;m<15,ccount>0;m++,ccount--)        //e
			  {
			    if(condition[m][n]==1)   countw++;
				else if(condition[m][n]==2)  countb++;
			  }
		      if(countw==5)
			  {
                 return TRUE; 
			  }
			  else if(countb==5)
			  {
		         return TRUE; 
			  }
	      for(m=i,n=j,ccount=5,countw=0,countb=0;m<15,n<15,ccount>0;m++,n++,ccount--)  //se
			  {
			    if(condition[m][n]==1)   countw++;
				else if(condition[m][n]==2)  countb++;
			  }
		      if(countw==5)
			  {
		         return TRUE; 
			  }
			  else if(countb==5)
			  {
	             return TRUE; 

			  }
		   }
	   } 
	   return FALSE;
}

int CTryDoc::Get_number()
{
    return number;
}



void CTryDoc::ResetData()
{
    for(int i=0;i<15;i++)
		for(int j=0;j<15;j++)
		{
			condition[i][j]=EMPTY;
		    sco_nesw[i][j]=0;
	        sco_ns[i][j]=0;
        	sco_nwse[i][j]=0; 
        	sco_we[i][j]=0;

			sco_n[i][j]=0;
	        sco_s[i][j]=0;
        	sco_w[i][j]=0; 
        	sco_e[i][j]=0;
			sco_ne[i][j]=0;
	        sco_sw[i][j]=0;
        	sco_se[i][j]=0; 
        	sco_nw[i][j]=0;
	        
		}
	    decided=FALSE;
		number=0;
}

int CTryDoc::maxx(int a, int b)
{
    if(a>b)
		return a;
	else 
		return b;
}

int CTryDoc::maxx(int a, int b, int c, int d)
{
    int max=a;
	if(b>max) max=b;
	if(c>max) max=c;
	if(d>max) max=d;
	return max;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -