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

📄 pentedlg.cpp

📁 这是一个五子棋的源代码配合上一些声音文件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	CPoint pt1((nPosX+1)*m_cxGrid+m_wXNull, nPosY*m_cyGrid+m_wYNull);
	CPoint pt2((nPosX+1)*m_cxGrid+m_wXNull, (nPosY+1)*m_cyGrid+m_wYNull);
	CPoint pt3(nPosX*m_cxGrid+m_wXNull, (nPosY+1)*m_cyGrid+m_wYNull);
	
	int nDis0 = Distance(pt, pt0);
	int nDis1 = Distance(pt, pt1);
	int nDis2 = Distance(pt, pt2);
	int nDis3 = Distance(pt, pt3);
	int nLimit = m_wStoneWidth/2-4;
	if (nDis0 <= nLimit)
		ptStone = CPoint(nPosX, nPosY);
	else if (nDis1 <= nLimit)
		ptStone = CPoint(nPosX+1, nPosY);
	else if (nDis2 <= nLimit)
		ptStone = CPoint(nPosX+1, nPosY+1);
	else if (nDis3 <= nLimit)
		ptStone = CPoint(nPosX, nPosY+1);
	else
	{
		int nMin1 = min(nDis0, nDis1);
		int nMin2 = min(nDis2, nDis3);
		int nMin = min(nMin1, nMin2);

		if (nMin == nDis0)
			ptStone = CPoint(nPosX, nPosY);
		else if (nMin == nDis1)
			ptStone = CPoint(nPosX+1, nPosY);
		else if (nMin == nDis2)
			ptStone = CPoint(nPosX+1, nPosY+1);
		else if (nMin == nDis3)
			ptStone = CPoint(nPosX, nPosY+1);

		IsStonePoint(ptStone);

		return FALSE;
	}

	return IsStonePoint(ptStone);
}

CPoint CPenteDlg::UrgentPoint(BYTE byColor)
{           
	int i, i0, j, j0;             

	BeginWaitCursor();
	                 
	CPoint  ptUrgent[2025], ptInit(-1,-1);
	for (i=0; i<2025; ++i)
		ptUrgent[i] = ptInit;
              
    // Seed the random-number generator with current time so that
    // the numbers will be different every time we run.
    //
    srand((unsigned)time(NULL));
	CPoint ptCurrent;
	i0=(rand()%2) ? 0:BOARD_LINE_NUMBER-1;               
	int nGrade1, nGrade2;
	int nUrgent1, nUrgent2, nUrgent;
	
	for (i=i0; !i0 ? i<BOARD_LINE_NUMBER:i>=0; !i0 ? ++i:--i)
	{
	    srand((unsigned)time(NULL));
	    j0=(rand()%2) ? 0:BOARD_LINE_NUMBER-1;
	    for (j=j0; !j0 ? j<BOARD_LINE_NUMBER:j>=0; !j0 ? ++j:--j)
	    {
	    	if (m_Board[i][j]==0)
	    	{
        		ptCurrent.x = i;
        		ptCurrent.y = j;
                
				nGrade1 = Judge(i, j, (char)(byColor+1));
				nGrade2 = Judge(i, j, (char)(!byColor+1));
				
				if (g_nSkill == 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 (g_nSkill == 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 (g_nSkill == 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 = min(nUrgent1, nUrgent2)*45 + max(nUrgent1, nUrgent2);
				ptUrgent[nUrgent] = ptCurrent;
            }
		}
    }

	for (i=0; i<2025; ++i)   
		if (ptUrgent[i] != ptInit)              
			break;

    EndWaitCursor();
    
	if (ptUrgent[i] == ptInit)              
	{
		CString str1, str2;
		str1.LoadString(g_bChinese ? IDS_DRAW_CHINESE:IDS_DRAW_ENGLISH);
		str2.LoadString(g_bChinese ? IDS_TITLE_CHINESE:IDS_TITLE_ENGLISH);
		MessageBox(str1, str2);
	}
	
	return ptUrgent[i];
}

int CPenteDlg::Judge(int nX, int nY, char cValue)
{
	int  nGrade;
	int  i, j, k, l;
	int  nXStart, nXEnd;
	int  nYStart, nYEnd;
	int  nXYStart, nXYEnd;
	int  nYXStart, nYXEnd;
	int  nXStartAdd, nYStartAdd, nXYStartAdd, nYXStartAdd;            
	int  nXEndAdd, nYEndAdd, nXYEndAdd, nYXEndAdd;            
	BOOL bXStartEmpty, bXEndEmpty, bXStartEmpty1, bXEndEmpty1;
	BOOL bYStartEmpty, bYEndEmpty, bYStartEmpty1, bYEndEmpty1;
	BOOL bXYStartEmpty, bXYEndEmpty, bXYStartEmpty1, bXYEndEmpty1;
	BOOL bYXStartEmpty, bYXEndEmpty, bYXStartEmpty1, bYXEndEmpty1;
		
	nXStart  = nXEnd  = nX;
	nYStart  = nYEnd  = nY;
	nXYStart = nXYEnd = nX;
	nYXStart = nYXEnd = nX;                                           
	nXStartAdd = nYStartAdd = nXYStartAdd = nYXStartAdd = 0;            	
	nXEndAdd = nYEndAdd = nXYEndAdd = nYXEndAdd = 0;            	
	bXStartEmpty = bYStartEmpty = bXYStartEmpty = bYXStartEmpty = FALSE;
	bXEndEmpty = bYEndEmpty = bXYEndEmpty = bYXEndEmpty = FALSE;
	bXStartEmpty1 = bYStartEmpty1 = bXYStartEmpty1 = bYXStartEmpty1 = FALSE;
	bXEndEmpty1 = bYEndEmpty1 = bXYEndEmpty1 = bYXEndEmpty1 = FALSE;
	
	for (i=nX-1; i>=0; i--)            // <-
	{
	    if (m_Board[i][nY]==cValue)
	    	nXStart = i;
	    else if (m_Board[i][nY]==0) 
	    {
			bXStartEmpty = TRUE;
			for (j=i-1; j>=0; j--)            // <-
			{
			    if (m_Board[j][nY]==cValue)
	    			nXStartAdd = i-j;
			    else if (m_Board[j][nY]==0) 
			    {
					bXStartEmpty1 = TRUE;
					break;
				}
				else
					break;
			}
            break;
        }                         
        else
        	break;
	}
	for (i=nX+1; i<BOARD_LINE_NUMBER; i++)           // ->
	{
	    if (m_Board[i][nY]==cValue)
	    	nXEnd = i;
		else if (m_Board[i][nY]==0)
		{
			bXEndEmpty = TRUE;     
			for (j=i+1; j<BOARD_LINE_NUMBER; j++)            // ->
			{
			    if (m_Board[j][nY]==cValue)
	    			nXEndAdd = j-i;
			    else if (m_Board[j][nY]==0) 
			    {
					bXEndEmpty1 = TRUE;
					break;
				}
				else
					break;
			}
            break;
	    }
	    else
	    	break;
	}
	    	
	for (i=nY-1; i>=0; i--)            // ^|^
	{
	    if (m_Board[nX][i]==cValue)
	    	nYStart = i;
		else if (m_Board[nX][i]==0)
		{
			bYStartEmpty = TRUE;   
			for (j=i-1; j>=0; j--)            // <-
			{
			    if (m_Board[nX][j]==cValue)
	    			nYStartAdd = i-j;
			    else if (m_Board[nX][j]==0) 
			    {
					bYStartEmpty1 = TRUE;
					break;
				}
				else
					break;
			}
            break;
		}
	    else
	    	break;
	}
	for (i=nY+1; i<BOARD_LINE_NUMBER; i++)           // v|v
	{
	    if (m_Board[nX][i]==cValue)
	    	nYEnd = i;
		else if (m_Board[nX][i]==0)
		{
			bYEndEmpty = TRUE;     
			for (j=i+1; j<BOARD_LINE_NUMBER; j++)            // ->
			{
			    if (m_Board[nX][j]==cValue)
	    			nYEndAdd = j-i;
			    else if (m_Board[nX][j]==0) 
			    {
					bYEndEmpty1 = TRUE;
					break;
				}
				else
					break;
			}
            break;
		}
	    else
	    	break;
	}
	
	//j = nY;
	for (i=nX-1, j=nY+1; i>=0&&j<BOARD_LINE_NUMBER; i--, j++)            // /'
	{
	    //j++;
	    if (m_Board[i][j]==cValue)
	    	nXYStart = i;
		else if (m_Board[i][j]==0)
		{
			bXYStartEmpty = TRUE; 
			for (k=i-1, l=j+1; k>=0&&l<BOARD_LINE_NUMBER; k--, l++)            // /'
			{
			    if (m_Board[k][l]==cValue)
	    			nXYStartAdd = i-k;
				else if (m_Board[k][l]==0)
				{
					bXYStartEmpty1 = TRUE; 
                    break;
                }
                else
                	break;
            }
			break;
		}
	    else

⌨️ 快捷键说明

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