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

📄 7_1view.cpp

📁 用vc++6.0开发游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			bestputdown(i,j);
	//判断放在哪里
	//棋多的位置优先
	//黑白一样多时黑先
	if(bpointcan4.x!=-1)
	{
		putdown(bpointcan4);
		return;
	}
	else if(wpointcan4.x!=-1)
	{
		putdown(wpointcan4);
		return;
	}
	else if(bpointcan3.x!=-1)
	{
		putdown(bpointcan3);
		return;
	}
	else if(wpointcan3.x!=-1)
	{
		putdown(wpointcan3);		
		return;
	}
	else if(bpointcan2.x!=-1)
	{
 		putdown(bpointcan2);
		return;
	}

	else if(wpointcan2.x!=-1)
	{
		putdown(wpointcan2);
		return;
	}
	else 
	{
 		putdown(bpointcan1);
		return;
	}

}
//检查四个方向,各算出五个棋子的和并赋值
void CMy7_1View::bestputdown(int i,int j)
{

	int num[4];
	CPoint numbig;
	int a,k;
    		///////////////////////////////  num[0]    -->
		a=0;
	    if(i<15)
			for(k=0;k<5;k++)
				a=a+wzq[i+k][j];
		num[0]=abs(a);
		
		   //////////////////////////////  num[1]     "|"
		a=0;
		if(j<15)
			for(k=0;k<5;k++)
				a=a+wzq[i][j+k];
		num[1]=abs(a);
		
			///////////////////////////////   num[2]   "\"
		a=0;
		if(i<15&&j<15)
			for(k=0;k<5;k++)
				a=a+wzq[i+k][j+k];
		num[2]=abs(a);
		
			//////////////////////////////   num[3]    "/"
		a=0;
		if((i>4)&&(j<15))
			for(k=0;k<5;k++)
				a=a+wzq[i-k][j+k];
		num[3]=abs(a);	

		//比较哪个方向同色棋最多
		numbig=maxnum(num[0],num[1],num[2],num[3]);
		//在得到最大值和方向上寻找落棋点
		switch(numbig.y)
		{
		case 4:
			searchcandown4(i,j,numbig.x);break;
		case 3:
			searchcandown3(i,j,numbig.x);break;
		case 2:
			searchcandown2(i,j,numbig.x);break;
		default:
			searchcandown1(i,j,numbig.x);
		}


}


CPoint CMy7_1View::maxnum(int a, int b, int c, int d)
{
	//point.x为方向值
	//point.y为最大值
	CPoint point;
	if(a>=b)
	{
		point.x=0;
		point.y=a;
	}
	else
	{
		point.x=1;
		point.y=b;
	}
	if(c>point.y)
	{
		point.x=2;
		point.y=c;
	}
	if(d>point.y)
	{
		point.x=3;
		point.y=d;
	}
	return point;
}
//有四个同色棋
void CMy7_1View::searchcandown4(int i, int j, int n)
{
//	CPoint point;
	int k;
    /////////////////////////////  num[0]    "--"
	if(n==0)
		for(k=0;k<5;k++)
			//如果第一个是空
			if(wzq[i][j]==0)
			{
				//如果下面有白棋
				if(wzq[i+1][j]==1)
				{
					//下面位置可以下棋,已经有四个白棋
					wpointcan4.x=i;
					wpointcan4.y=j;
					break;
				}
				else
				{
					//下面位置可以下棋,已经有四个黑棋
					bpointcan4.x=i;
					bpointcan4.y=j;
					break;
				}
			}
			//如果找到下棋位置,一定能找到!
			else if(wzq[i+k][j]==0) 
			{
				//如果第一个是白棋
				if(wzq[j][j]==1)
				{
					wpointcan4.x=i+k;
					wpointcan4.y=j;
					break;
				}
				//否则第一个是黑棋
				else
				{
					bpointcan4.x=i+k;
					bpointcan4.y=j;
					break;
				}
			}
	 
	
	////////////////////////////   num[1]     "|"
	if(n==1)
		for(k=0;k<5;k++)
		{
			if(wzq[i][j]==0)
				if(wzq[i][j+1]==1)
				{
					wpointcan4.x=i;
					wpointcan4.y=j;
					break;
				}
				else
				{
					bpointcan4.x=i;
					bpointcan4.y=j;
					break;
				}
			
			else if(wzq[i][j+k]==0) 
			{
				if(wzq[i][j]==1)
				{
					wpointcan4.x=i;
					wpointcan4.y=j+k;
					break;
				}
				else
				{
					bpointcan4.x=i;
					bpointcan4.y=j+k;
					break;
				}
			}		
		}
	///////////////////////////////   num[2]   "\"
    if(n==2)
		for(k=0;k<5;k++)
		{
			if(wzq[i][j]==0)
				if(wzq[i+1][j+1]==1)
				{
					wpointcan4.x=i;
					wpointcan4.y=j;
					break;
				}
				else
				{
					bpointcan4.x=i;
					bpointcan4.y=j;
					break;
				}
			
			else if(wzq[i+k][j+k]==0) 
			{
				if(wzq[i][j]==1)
				{
					wpointcan4.x=i+k;
					wpointcan4.y=j+k;
					break;
				}
				else
				{
					bpointcan4.x=i+k;
					bpointcan4.y=j+k;
					break;
				}
			}		
		}
	//////////////////////////////   num[3]    "/"
    if(n==3)
		for(k=0;k<5;k++)
		{
			if(wzq[i][j]==0)
				if(wzq[i-1][j+1]==1)
				{
					wpointcan4.x=i;
					wpointcan4.y=j;
					break;
				}
				else
				{
					bpointcan4.x=i;
					bpointcan4.y=j;
					break;
				}
			
			else if(wzq[i-k][j+k]==0) 
			{
				if(wzq[i][j]==1)
				{
					wpointcan4.x=i-k;
					wpointcan4.y=j+k;
					break;
				}
				else
				{
					bpointcan4.x=i-k;
					bpointcan4.y=j+k;
					break;
				}
			}		
		}
		
}
//最多有三个同色
void CMy7_1View::searchcandown3(int i, int j, int n)
{
	int k=0;
  /////////////////////////////  num[0]    "--"
	if(n==0)
		for(k=0;k<5;k++)
			//找到位置
			if(wzq[i+k][j]==0) 
			{
				//下一个是白棋
			    if(wzq[i+k+1][j]==1)
				{
					//下面位置可以下棋,已经有三个白棋
 					wpointcan3.x=i+k;	
					wpointcan3.y=j;
				}   
				//下一个是黑棋
				else if(wzq[i+k+1][j]==-1)
				    {
 						bpointcan3.x=i+k;	
						bpointcan3.y=j;
					}  			
			}
	////////////////////////////   num[1]     "|"
	if(n==1)
		for(k=0;k<5;k++)
			if(wzq[i][j+k]==0) 
			{
			    if(wzq[i][j+k-1]==1)
				{
				    wpointcan3.x=i;
					wpointcan3.y=j+k;
				}
				else if(wzq[i][j+k+1]==-1)
					{
						bpointcan3.x=i;
						bpointcan3.y=j+k;
					}			
			}	
	///////////////////////////////   num[2]   "\"
    if(n==2)
		for(k=0;k<5;k++)
			if(wzq[i+k][j+k]==0) 
			{
				if(wzq[i+k+1][j+k+1]==1)
				{
					wpointcan3.x=i+k;
					wpointcan3.y=j+k;
				}
				else if(wzq[i+k+1][j+k+1]==-1)
					{
						bpointcan3.x=i+k;
						bpointcan3.y=j+k;
					}
			}
	//////////////////////////////   num[3]    "/"
    if(n==3)
		for(k=0;k<5;k++)
			if(wzq[i-k][j+k]==0)
			{
				if(wzq[i-k-1][j+k+1]==1)
				{
				    wpointcan3.x=i-k;
					wpointcan3.y=j+k;
				}
				else if(wzq[i-k-1][j+k+1]==-1)
					{
						bpointcan3.x=i-k;
						bpointcan3.y=j+k;
					}
			}   
}
//最多有两个同色
void CMy7_1View::searchcandown2(int i, int j, int n)
{
int k=0,m=0,a=0,b=0;
  /////////////////////////////  num[0]    "--"
	if(n==0)
	{
		//判断有多少个空位置
		for(k=0;k<5;k++)
			if(wzq[i+k][j]==0) 
				m+=1;
			//如果只有一个空位置
		if(m==1)
			for(a=0;a<5;a++)
				//找到空位置
				if(wzq[i+a][j]==0)
				{
					//下面两个棋子值的和
					b=wzq[i+a+1][j]+wzq[i+a+2][j];
					//都是黑棋
					if(b==-2)
					{
						//下面位置可以下棋,旁边有两个黑棋
						bpointcan2.x=i+a;
						bpointcan2.y=j;
					}
					//都是白棋
					if(b==2)
						{
							wpointcan2.x=i+a;
							wpointcan2.y=j;
						}
				}
				//如果有三个空位置,说明另外两个同色
		if(m==3)
		{
			for(a=0;a<5;a++)
				//如果两个是黑棋
				if(wzq[i+a][j]==-1)
				{
					for(b=0;b<5;b++)
						//如果找到空位置
						if(wzq[i+b][j]==0)
						{
							//下面位置可以下棋,旁边有两个黑棋
							bpointcan2.x=i+b;
							bpointcan2.y=j;	break;
						}
				}
				else 
					//如果两个是白棋
					if(wzq[i+a][j]==1)
					{
						for(b=0;b<5;b++)
							if(wzq[i+b][j]==0)
								{
									wpointcan2.x=i+b;
									wpointcan2.y=j;	break;
								}
					}
		}
	}
	////////////////////////////   num[1]     "|"
	m=0;
	if(n==1)
	{
		for(k=0;k<5;k++)
			if(wzq[i][j+k]==0) 
				m++;
		if(m==1)
			for(a=0;a<5;a++)
				if(wzq[i][j+a]==0)
				{
					b=wzq[i][j+a+1]+wzq[i][j+a+2];
					if(b==-2)
					{
						bpointcan2.x=i;
						bpointcan2.y=j+a;
					}
					if(b==2)
						{
							wpointcan2.x=i;
							wpointcan2.y=j+a;
						}
				}
		if(m==3)
		{
			for(a=0;a<5;a++)
				if(wzq[i][j+a]==-1)
				{
					for(b=0;b<5;b++)
						if(wzq[i][j+b]==0)
						{
							bpointcan2.x=i;
							bpointcan2.y=j+b;	break;
						}
				}
				else 
					if(wzq[i][j+a]==1)
					{
						for(b=0;b<5;b++)
							if(wzq[i][j+b]==0)
							{
								wpointcan2.x=i;
								wpointcan2.y=j+b;	break;
								}
					}
		}
			
	}
	///////////////////////////////   num[2]   "\"
	m=0;
    if(n==2)
	{
		for(k=0;k<5;k++)
			if(wzq[i+k][j+k]==0) 
				m++;
		if(m==1)
			for(a=0;a<5;a++)
				if(wzq[i+a][j+a]==0)
				{
					b=wzq[i+a+1][j+a+1]+wzq[i+a+2][j+a+2];
					if(b==-2)
					{
						bpointcan2.x=i+a;
						bpointcan2.y=j+a;
					}
					if(b==2)
					{
						wpointcan2.x=i+a;
						wpointcan2.y=j+a;
					}
				}
		if(m==3)
		{
			for(a=0;a<5;a++)
				if(wzq[i+a][j+a]==-1)
				{
					for(b=0;b<5;b++)
						if(wzq[i+b][j+b]==0)
						{
							bpointcan2.x=i+b;
							bpointcan2.y=j+b;	break;
						}
				}
				else 
					if(wzq[i+a][j+a]==1)
					{
						for(b=0;b<5;b++)
							if(wzq[i+b][j+b]==0)
								{
									wpointcan2.x=i+b;
									wpointcan2.y=j+b;	break;
								}
					}
		}
			
	}
	//////////////////////////////   num[3]    "/"
    m=0;
    if(n==3)
	{
		for(k=0;k<5;k++)
			if(wzq[i-k][j+k]==0)
				m++;
		if(m==1)
			for(a=0;a<5;a++)
				if(wzq[i-a][j+a]==0)
				{
					b=wzq[i-a-1][j+a+1]+wzq[i-a-2][j+a+2];
					if(b==-2)
					{
						bpointcan2.x=i-a;
						bpointcan2.y=j+a;
					}
					if(b==2)
						{
							wpointcan2.x=i-a;
							wpointcan2.y=j+a;
						}
				}
		if(m==3)
		{
			for(a=0;a<5;a++)
				if(wzq[i-a][j+a]==-1)
				{
					for(b=0;b<5;b++)
						if(wzq[i-b][j+b]==0)
						{
							bpointcan2.x=i-b;
							bpointcan2.y=j+b;	break;
						}
				}
				else 
					if(wzq[i-a][j+a]==1)
					{
						for(b=0;b<5;b++)
							if(wzq[i-b][j+b]==0)
							{
								wpointcan2.x=i-b;
								wpointcan2.y=j+b;	break;
							}
					}
		}
	}
	
}
//如果五个位置的和是一
void CMy7_1View::searchcandown1(int i, int j, int n)
{
	//计算刚才白棋落棋点
	int ii=(vspoint.x-30)/20;
 	int jj=(vspoint.y-30)/20;
	int a;
	for(a=0;a<5;a++)
		//如果不到边界
		if(ii+a<19)
		{
			//向右,如果有空位置
			if(wzq[ii+a][jj]==0)
			{
				//在这个位置下黑棋
				bpointcan1.x=ii+a;
				bpointcan1.y=jj;
				return;
			}
		}
		//到了边界
		else
			//向左,如果有空位置
			if(wzq[ii-1][jj]==0)
			{
				bpointcan1.x=ii-a;
				bpointcan1.y=jj;
				return;
			}
 
}

void CMy7_1View::OnNet() 
{
	// TODO: Add your command handler code here
	vscomputer=3;
	for(int i=0;i<19;i++)
		for(int j=0;j<19;j++)
			wzq[i][j]=0;
  	CMainFrame *pFrame=(CMainFrame *)AfxGetApp()->m_pMainWnd;
	pFrame->OnSorc();
  	CMainFrame *pApp=(CMainFrame *)AfxGetApp();
    colorwhite=(pFrame->ynserver==1)?false:true;
	   if(colorwhite)
		   play=3;
	   else
		   play=2;
	   if(!colorwhite)
		   colorwhite=true;
	SetTimer(1,500,NULL);
 	Invalidate();  
	
}

void CMy7_1View::Netputdown()
{	

  	CMy7_1App *App=( CMy7_1App * )AfxGetApp();
	
	if((App->getx>=0)&&(App->gety>=0))
	{
	
		int x=App->getx,y=App->gety;
		colorwhite=!colorwhite;
		if(play==2)
			wzq[x][y]=1;
		if(play==3)
			wzq[x][y]=-1;
		App->getx=-1;
		App->gety=-1;

		CPoint point;
		point.x=x*20+30;
		point.y=y*20+30;
		over(point);
	}


}


void CMy7_1View::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	Netputdown();
	Invalidate();
	
	CView::OnTimer(nIDEvent);
}

void CMy7_1View::OnNet2()
{
	for(int i=0;i<19;i++)
		for(int j=0;j<19;j++)
			wzq[i][j]=0;
	SetTimer(1,500,NULL);
 	Invalidate();  
}

⌨️ 快捷键说明

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