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

📄 five.cpp

📁 站长以前用Brew写的五子棋程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	    else
	    	break;
	}
	        
	int nXStep  = nXEnd-nXStart+1;
	int nYStep  = nYEnd-nYStart+1;
	int nXYStep = nXYEnd-nXYStart+1;
	int nYXStep = nYXEnd-nYXStart+1;
	
	bool bX_4 = ((nXStep==4)&&(bXStartEmpty&&bXEndEmpty));
	bool bY_4 = ((nYStep==4)&&(bYStartEmpty&&bYEndEmpty));
	bool bXY_4 = ((nXYStep==4)&&(bXYStartEmpty&&bXYEndEmpty));
	bool bYX_4 = ((nYXStep==4)&&(bYXStartEmpty&&bYXEndEmpty));
	bool bX4 = ((nXStep==4)&&(bXStartEmpty||bXEndEmpty));
	bool bY4 = ((nYStep==4)&&(bYStartEmpty||bYEndEmpty));
	bool bXY4 = ((nXYStep==4)&&(bXYStartEmpty||bXYEndEmpty));
	bool bYX4 = ((nYXStep==4)&&(bYXStartEmpty||bYXEndEmpty));

	bool bX_3 = ((nXStep==3)&&(bXStartEmpty&&bXEndEmpty));
	bool bY_3 = ((nYStep==3)&&(bYStartEmpty&&bYEndEmpty));
	bool bXY_3 = ((nXYStep==3)&&(bXYStartEmpty&&bXYEndEmpty));
	bool bYX_3 = ((nYXStep==3)&&(bYXStartEmpty&&bYXEndEmpty));

	bool bX3 = ((nXStep==3)&&(bXStartEmpty||bXEndEmpty));
	bool bY3 = ((nYStep==3)&&(bYStartEmpty||bYEndEmpty));
	bool bXY3 = ((nXYStep==3)&&(bXYStartEmpty||bXYEndEmpty));
	bool bYX3 = ((nYXStep==3)&&(bYXStartEmpty||bYXEndEmpty));

	bool bX_2 = ((nXStep==2)&&(bXStartEmpty&&bXEndEmpty));
	bool bY_2 = ((nYStep==2)&&(bYStartEmpty&&bYEndEmpty));
	bool bXY_2 = ((nXYStep==2)&&(bXYStartEmpty&&bXYEndEmpty));
	bool bYX_2 = ((nYXStep==2)&&(bYXStartEmpty&&bYXEndEmpty));
	bool bX2 = ((nXStep==2)&&(bXStartEmpty||bXEndEmpty));
	bool bY2 = ((nYStep==2)&&(bYStartEmpty||bYEndEmpty));
	bool bXY2 = ((nXYStep==2)&&(bXYStartEmpty||bXYEndEmpty));
	bool bYX2 = ((nYXStep==2)&&(bYXStartEmpty||bYXEndEmpty));

  	bool bX_1 = ((nXStep==1)&&(bXStartEmpty&&bXEndEmpty));
  	bool bY_1 = ((nYStep==1)&&(bYStartEmpty&&bYEndEmpty));
  	bool bXY_1 = ((nXYStep==1)&&(bXYStartEmpty&&bXYEndEmpty));
  	bool bYX_1 = ((nYXStep==1)&&(bYXStartEmpty&&bYXEndEmpty));

	int nXAdd, nYAdd, nXYAdd, nYXAdd;
	nXAdd = nYAdd = nXYAdd = nYXAdd = 0;

	if (nXEndAdd>=nXStartAdd)
	{
		nXAdd = nXEndAdd;
		bXEndEmpty = bXEndEmpty1;
	}
	else                      
	{
		nXAdd = nXStartAdd;
		bXStartEmpty = bXStartEmpty1;
    }
    
	if (nYEndAdd>=nYStartAdd)
	{
		nYAdd = nYEndAdd;
		bYEndEmpty = bYEndEmpty1;
	}
	else                      
	{
		nYAdd = nYStartAdd;
		bYStartEmpty = bYStartEmpty1;
    }

	if (nXYEndAdd>=nXYStartAdd)
	{
		nXYAdd = nXYEndAdd;
		bXYEndEmpty = bXYEndEmpty1;
	}
	else                      
	{
		nXYAdd = nXYStartAdd;
		bXYStartEmpty = bXYStartEmpty1;
    }

	if (nYXEndAdd>=nYXStartAdd)
	{
		nYXAdd = nYXEndAdd;
		bYXEndEmpty = bYXEndEmpty1;
	}
	else                      
	{
		nYXAdd = nYXStartAdd;
		bYXStartEmpty = bYXStartEmpty1;
    }
	
	bool b1X_4 = ((nXStep+nXAdd>=4)&&(bXStartEmpty&&bXEndEmpty));
	bool b1Y_4 = ((nYStep+nYAdd>=4)&&(bYStartEmpty&&bYEndEmpty));
	bool b1XY_4 = ((nXYStep+nXYAdd>=4)&&(bXYStartEmpty&&bXYEndEmpty));
	bool b1YX_4 = ((nYXStep+nYXAdd>=4)&&(bYXStartEmpty&&bYXEndEmpty));
	bool b1X4 = ((nXStep+nXAdd>=4)&&(bXStartEmpty||bXEndEmpty));
	bool b1Y4 = ((nYStep+nYAdd>=4)&&(bYStartEmpty||bYEndEmpty));
	bool b1XY4 = ((nXYStep+nXYAdd>=4)&&(bXYStartEmpty||bXYEndEmpty));
	bool b1YX4 = ((nYXStep+nYXAdd>=4)&&(bYXStartEmpty||bYXEndEmpty));

	bool b1X_3 = ((nXStep+nXAdd==3)&&(bXStartEmpty&&bXEndEmpty));
	bool b1Y_3 = ((nYStep+nYAdd==3)&&(bYStartEmpty&&bYEndEmpty));
	bool b1XY_3 = ((nXYStep+nXYAdd==3)&&(bXYStartEmpty&&bXYEndEmpty));
	bool b1YX_3 = ((nYXStep+nYXAdd==3)&&(bYXStartEmpty&&bYXEndEmpty));
	
	
	if (nXStep>=5 || nYStep>=5 || nXYStep>=5 || nYXStep>=5)
		nGrade = 0;
	
	else if (bX_4 || bY_4 || bXY_4 || bYX_4)
		nGrade = 1;             
	
	else if ((bX4 && (bY4 || bXY4 || bYX4 || b1Y4 || b1XY4 || b1YX4))||
			 (bY4 && (bX4 || bXY4 || bYX4 || b1X4 || b1XY4 || b1YX4))||
			 (bXY4 && (bY4 || bX4 || bYX4 || b1Y4 || b1X4 || b1YX4)) ||
			 (bYX4 && (bY4 || bXY4 || bX4 || b1Y4 || b1XY4 || b1X4)) ||
			 (b1X4 && (bY4 || bXY4 || bYX4 || b1Y4 || b1XY4 || b1YX4))||
			 (b1Y4 && (bX4 || bXY4 || bYX4 || b1X4 || b1XY4 || b1YX4))||
			 (b1XY4 && (bY4 || bX4 || bYX4 || b1Y4 || b1X4 || bYX4))  ||
			 (b1YX4 && (bY4 || bXY4 || bX4 || b1Y4 || b1XY4 || b1X4)))
		nGrade = 2;
	
	else if ((bX4 && (bY_3 || bXY_3 || bYX_3 || b1Y_3 || b1XY_3 || b1YX_3))||
	         (bY4 && (bX_3 || bXY_3 || bYX_3 || b1X_3 || b1XY_3 || b1YX_3))||
			 (bXY4 && (bY_3 || bX_3 || bYX_3 || b1Y_3 || b1X_3 || b1YX_3)) ||
			 (bYX4 && (bY_3 || bXY_3 || bX_3 || b1Y_3 || b1XY_3 || b1X_3)) ||
			 (b1X4 && (bY_3 || bXY_3 || bYX_3 || b1Y_3 || b1XY_3 || b1YX_3))||
			 (b1Y4 && (bX_3 || bXY_3 || bYX_3 || b1X_3 || b1XY_3 || b1YX_3))||
			 (b1XY4 && (bY_3 || bX_3 || bYX_3 || b1Y_3 || b1X_3 || b1YX_3)) ||
			 (b1YX4 && (bY_3 || bXY_3 || bX_3 || b1Y_3 || b1XY_3 || b1X_3)))
		nGrade = 3;
	
	else if ((bX_3 && (bY_3 || bXY_3 || bYX_3 || b1Y_3 || b1XY_3 || b1YX_3))||
	         (bY_3 && (bX_3 || bXY_3 || bYX_3 || b1X_3 || b1XY_3 || b1YX_3))||
			 (bXY_3 && (bY_3 || bX_3 || bYX_3 || b1Y_3 || b1X_3 || b1YX_3)) ||
			 (bYX_3 && (bY_3 || bXY_3 || bX_3 || b1Y_3 || b1XY_3 || b1X_3)) ||
			 (b1X_3 && (bY_3 || bXY_3 || bYX_3 || b1Y_3 || b1XY_3 || b1YX_3))||
			 (b1Y_3 && (bX_3 || bXY_3 || bYX_3 || b1X_3 || b1XY_3 || b1YX_3))||
			 (b1XY_3 && (bY_3 || bX_3 || bYX_3 || b1Y_3 || b1X_3 || b1YX_3)) ||
			 (b1YX_3 && (bY_3 || bXY_3 || bX_3 || b1Y_3 || b1XY_3 || b1X_3)))
		nGrade = 4;

	else if ((bXY4 && (bYX_2 || bY_2 || bX_2))||
	         (bYX4 && (bXY_2 || bY_2 || bX_2))||
	         (bX4 && (bXY_2 || bYX_2 || bY_2))||
	         (bY4 && (bXY_2 || bYX_2 || bX_2)))
		nGrade = 5;
	
	else if ((bXY4 && (bYX3 || bY3 || bX3))||
	         (bYX4 && (bXY3 || bY3 || bX3))||
	         (bX4 && (bXY3 || bYX3 || bY3))||
	         (bY4 && (bXY3 || bYX3 || bX3)))
		nGrade = 6;
	
	else if ((bXY4 && (bYX_1 || bY_1 || bX_1))||
	         (bYX4 && (bXY_1 || bY_1 || bX_1))||
	         (bX4 && (bXY_1 || bYX_1 || bY_1))||
	         (bY4 && (bXY_1 || bYX_1 || bX_1)))
		nGrade = 7;
	
	else if ((bXY4 && (bYX2 || bY2 || bX2))||
	         (bYX4 && (bXY2 || bY2 || bX2))||
	         (bX4 && (bXY2 || bYX2 || bY2))||
	         (bY4 && (bXY2 || bYX2 || bX2)))
	
		nGrade = 8;
	
	else if (bXY4 || bYX4 || bX4 || bY4)
		nGrade = 9;
	
	else if ((bXY_3 && (bYX_2 || bY_2 || bX_2))||
	         (bYX_3 && (bXY_2 || bY_2 || bX_2))||
	         (bX_3 && (bXY_2 || bYX_2 || bY_2))||
	         (bY_3 && (bXY_2 || bYX_2 || bX_2)))
		nGrade = 10;
	
	else if ((bXY_3 && (bYX3 || bY3 || bX3))||
	         (bYX_3 && (bXY3 || bY3 || bX3))||
	         (bX_3 && (bXY3 || bYX3 || bY3))||
	         (bY_3 && (bXY3 || bYX3 || bX3)))
		nGrade = 11;
	
	else if ((bXY_3 && (bYX_1 || bY_1 || bX_1))||
	         (bYX_3 && (bXY_1 || bY_1 || bX_1))||
	         (bX_3 && (bXY_1 || bYX_1 || bY_1))||
	         (bY_3 && (bXY_1 || bYX_1 || bX_1)))
		nGrade = 12;

	else if ((bXY_3 && (bYX2 || bY2 || bX2))||
	         (bYX_3 && (bXY2 || bY2 || bX2))||
	         (bX_3 && (bXY2 || bYX2 || bY2))||
	         (bY_3 && (bXY2 || bYX2 || bX2)))
		nGrade = 13;

	else if (bXY_3 || bYX_3 || bX_3 || bY_3)
		nGrade = 14;

	else if (bXY_2 || bYX_2 || bX_2 || bY_2)
		nGrade = 16;

    else if (bXY3 || bYX3 || bX3 || bY3)
		nGrade = 17;
	else if (bXY2 || bYX2 || bX2 || bY2)
		nGrade = 18;
	else if (bXY_1 || bYX_1 || bX_1 || bY_1)    
		nGrade = 19; 
	else
		nGrade = 20;

	if (nGrade>15)
		if ((pdata->man[nX][nY-1]==0 || pdata->man[nX][nY-1]==cValue) &&
			(pdata->man[nX+1][nY]==0 || pdata->man[nX+1][nY]==cValue) &&
			(pdata->man[nX][nY+1]==0 || pdata->man[nX][nY+1]==cValue) &&
			(pdata->man[nX-1][nY]==0 || pdata->man[nX-1][nY]==cValue) &&
			((nX+2<15 && nY-2>=0 && (pdata->man[nX+2][nY-2]==0 || pdata->man[nX+2][nY-2]==cValue) &&
			 pdata->man[nX][nY-2]==cValue && pdata->man[nX+1][nY-1]==cValue && pdata->man[nX+2][nY]==cValue) ||
	     	(nX+2<15 && nY+2<15 && (pdata->man[nX+2][nY+2]==0 || pdata->man[nX+2][nY+2]==cValue) &&
	     	 pdata->man[nX][nY+2]==cValue && pdata->man[nX+1][nY+1]==cValue && pdata->man[nX+2][nY]==cValue) ||
	     	(nX-2>=0 && nY+2<15 && (pdata->man[nX-2][nY+2]==0 || pdata->man[nX-2][nY+2]==cValue) &&
	     	 pdata->man[nX][nY+2]==cValue && pdata->man[nX-1][nY+1]==cValue && pdata->man[nX-2][nY]==cValue) || 
		  	(nX-2>=0 && nY-2>=0 && (pdata->man[nX-2][nY-2]==0 || pdata->man[nX-2][nY-2]==cValue) &&
		  	 pdata->man[nX][nY-2]==cValue && pdata->man[nX-1][nY-1]==cValue && pdata->man[nX-2][nY]==cValue)))
			nGrade = 15;

	return nGrade;		
}

POINT FIVE_GetBestPoint(APP_DATA *pdata, char byColor)
{
	int i, j, i0, j0;

	POINT ptUrgent[2025], ptInit;

	ptInit.x =ptInit.y =-1;
	for (i=0; i<2025; i++)
		ptUrgent[i].x =ptUrgent[i].y =-1;
              
    // Seed the random-number generator with current time so that
    // the numbers will be different every time we run.
    //
	POINT ptCurrent;
	i0=(GETTIMEMS()%2) ? 0:LINE_COUNT-1;               
	int nGrade1, nGrade2;
	int nUrgent1, nUrgent2, nUrgent;
	
	for (i=i0; !i0 ? i<LINE_COUNT:i>=0; !i0 ? ++i:--i)
	{
	    j0=(GETTIMEMS()%2) ? 0:LINE_COUNT-1;
	    for (j=j0; !j0 ? j<LINE_COUNT:j>=0; !j0 ? ++j:--j)
	    {
	    	if (pdata->man[i][j]==0)
	    	{
        		ptCurrent.x = i;
        		ptCurrent.y = j;
                
				nGrade1 = FIVE_CheckStat(pdata, i, j, (char)(byColor+1));
				nGrade2 = FIVE_CheckStat(pdata, i, j, (char)(!byColor+1));
				if (pdata->skill == 3)
				{
		    		switch (nGrade1)
		    		{
						case 0 : nUrgent1 = 0; break;
						case 1 : nUrgent1 = 2; break;					
						case 2 : nUrgent1 = 4; break;					
						case 3 : nUrgent1 = 5; break;					
						case 4 : nUrgent1 = 8; break;					
						
						case 5 : nUrgent1 = 10; break;																									
						case 6 : nUrgent1 = 11; break;					
						case 7 : nUrgent1 = 12; break;					
						case 8 : nUrgent1 = 13; break;					
 						case 9 : nUrgent1 = 14; break;					
						case 10 : nUrgent1 = 15; break;					
						case 11 : nUrgent1 = 16; break;					
						case 12 : nUrgent1 = 17; break;					
						case 13 : nUrgent1 = 18; break;					
						case 14 : nUrgent1 = 19; break;					
						case 15 : nUrgent1 = 20; break;					
						
						case 16 : nUrgent1 = 32; break;					
						case 17 : nUrgent1 = 34; break;					
						case 18 : nUrgent1 = 36; break;					
						case 19 : nUrgent1 = 38; break;					
						case 20 : nUrgent1 = 40; break;					
						default : nUrgent1 = 40; break;					
					}
		    		switch (nGrade2)
		    		{
						case 0 : nUrgent2 = 1; break;
						case 1 : nUrgent2 = 3; break;					
						case 2 : nUrgent2 = 6; break;					
						case 3 : nUrgent2 = 7; break;					
						case 4 : nUrgent2 = 9; break;					
						
						case 5 : nUrgent2 = 21; break;																									
						case 6 : nUrgent2 = 22; break;					
						case 7 : nUrgent2 = 23; break;					
						case 8 : nUrgent2 = 24; break;					
						case 9 : nUrgent2 = 25; break;					
						case 10 : nUrgent2 = 26; break;					
						case 11 : nUrgent2 = 27; break;					
						case 12 : nUrgent2 = 28; break;					
						case 13 : nUrgent2 = 29; break;					
						case 14 : nUrgent2 = 30; break;					
						case 15 : nUrgent2 = 31; break;					
						
						case 16 : nUrgent2 = 33; break;											
						case 17 : nUrgent2 = 35; break;					
						case 18 : nUrgent2 = 37; break;					
						case 19 : nUrgent2 = 39; break;					
						case 20 : nUrgent2 = 41; break;					
						default : nUrgent2 = 41; break;											
					}
				}
				if (pdata->skill == 2)
				{
		    		switch (nGrade1)
		    		{
						case 0 : nUrgent1 = 0; break;
						case 1 : nUrgent1 = 2; break;					
						case 2 : nUrgent1 = 4; break;					
						case 3 : nUrgent1 = 5; break;					
						case 4 : nUrgent1 = 8; break;					
						
						case 5 : 
						case 6 : 
						case 7 : nUrgent1 = 10; break;					
						case 8 : 
 						case 9 : 
						case 10 : nUrgent1 = 11; break;					
						case 11 : nUrgent1 = 12; break;					
						case 12 : nUrgent1 = 13; break;					
						case 13 : 
						case 14 : 
						case 15 : nUrgent1 = 14; break;					
						
						case 16 : nUrgent1 = 20; break;					
						case 17 : nUrgent1 = 22; break;					
						case 18 : nUrgent1 = 24; break;					
						case 19 : nUrgent1 = 26; break;					
						case 20 : nUrgent1 = 28; break;					
						default : nUrgent1 = 28; break;					
					}
		    		switch (nGrade2)
		    		{
						case 0 : nUrgent2 = 1; break;
						case 1 : nUrgent2 = 3; break;					
						case 2 : nUrgent2 = 6; break;					
						case 3 : nUrgent2 = 7; break;					
						case 4 : nUrgent2 = 9; break;					
						
						case 5 : 
						case 6 : 
						case 7 : nUrgent2 = 15; break;					
						case 8 : 
						case 9 : 
						case 10 : nUrgent2 = 16; break;					
						case 11 : nUrgent2 = 17; break;					
						case 12 : nUrgent2 = 18; break;					
						case 13 :
						case 14 :
						case 15 : nUrgent2 = 19; break;					
						
						case 16 : nUrgent2 = 21; break;											
						case 17 : nUrgent2 = 23; break;					
						case 18 : nUrgent2 = 25; break;					
						case 19 : nUrgent2 = 27; break;					
						case 20 : nUrgent2 = 29; break;					
						default : nUrgent2 = 29; break;											
					}
				}
				if (pdata->skill == 1)
				{
		    		switch (nGrade1)
		    		{
						case 0 : nUrgent1 = 0; break;
						case 1 : nUrgent1 = 2; break;					
						case 2 : nUrgent1 = 4; break;					
						case 3 : nUrgent1 = 5; break;					
						case 4 : nUrgent1 = 8; break;					
						
						case 5 : 
						case 6 : 
						case 7 : 
						case 8 : 
 						case 9 : 
						case 10 : nUrgent1 = 10; break;					
						case 11 : 
						case 12 : 
						case 13 : 
						case 14 : 
						case 15 : nUrgent1 = 11; break;					
						
						case 16 : nUrgent1 = 14; break;					
						case 17 : nUrgent1 = 16; break;					
						case 18 : nUrgent1 = 18; break;					
						case 19 : nUrgent1 = 20; break;					
						case 20 : nUrgent1 = 22; break;					
						default : nUrgent1 = 22; break;					
					}
		    		switch (nGrade2)
		    		{
						case 0 : nUrgent2 = 1; break;
						case 1 : nUrgent2 = 3; break;					
						case 2 : nUrgent2 = 6; break;					
						case 3 : nUrgent2 = 7; break;					
						case 4 : nUrgent2 = 9; break;					
						
						case 5 : 
						case 6 : 
						case 7 : 
						case 8 : 
						case 9 : 
						case 10 : nUrgent2 = 12; break;					
						case 11 :
						case 12 :
						case 13 :
						case 14 :
						case 15 : nUrgent2 = 13; break;					
						
						case 16 : nUrgent2 = 15; break;											
						case 17 : nUrgent2 = 17; break;					
						case 18 : nUrgent2 = 19; break;					
						case 19 : nUrgent2 = 21; break;					
						case 20 : nUrgent2 = 23; break;					
						default : nUrgent2 = 23; break;											
					}
				}
                
				nUrgent = ((nUrgent1>nUrgent2)?nUrgent2:nUrgent1)*45 + ((nUrgent1<nUrgent2)?nUrgent2:nUrgent1);// lgd
				ptUrgent[nUrgent] = ptCurrent;
            }
		}
    }

	for (i=0; i<2025; ++i)   
		if (ptUrgent[i].x != -1 && ptUrgent[i].y !=-1)             
			break;

	if (ptUrgent[i].x ==-1 && ptUrgent[i].y ==-1)	// 和棋
	{
		//;
	}
	
	return ptUrgent[i];
}

⌨️ 快捷键说明

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