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

📄 pentedlg.cpp

📁 这是一个五子棋的源代码配合上一些声音文件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	    	break;
	}   
	//j = nY;
	for (i=nX+1, j=nY-1; i<BOARD_LINE_NUMBER&&j>=0; i++, j--)           // ./
	{      
		//j--;
	    if (m_Board[i][j]==cValue)
	    	nXYEnd = i;
		else if (m_Board[i][j]==0)
		{
			bXYEndEmpty = TRUE;   
			for (k=i+1, l=j-1; l>=0&&k<BOARD_LINE_NUMBER; l--, k++)            // /'
			{
			    if (m_Board[k][l]==cValue)
	    			nXYEndAdd = k-i;
				else if (m_Board[k][l]==0)
				{
					bXYEndEmpty1 = TRUE; 
                    break;
                }
                else
                	break;
            }
			break;
		}
	    else
	    	break;
	}
	    	
	//j = nY;
	for (i=nX-1, j=nY-1; i>=0&&j>=0; i--, j--)            // '`
	{
	    //j--;
	    if (m_Board[i][j]==cValue)
	    	nYXStart = i;
		else if (m_Board[i][j]==0)
		{
			bYXStartEmpty = TRUE; 
			for (k=i-1, l=j-1; k>=0&&l>=0; k--, l--)            // /'
			{
			    if (m_Board[k][l]==cValue)
	    			nYXStartAdd = i-k;
				else if (m_Board[k][l]==0)
				{
					bYXStartEmpty1 = TRUE; 
                    break;
                }
                else
                	break;
            }
			break;
		}
	    else
	    	break;
	}   
	//j = nY;
	for (i=nX+1, j=nY+1; i<BOARD_LINE_NUMBER&&j<BOARD_LINE_NUMBER; i++, j++)           // `.
	{      
		//j++;
	    if (m_Board[i][j]==cValue)
	    	nYXEnd = i;
		else if (m_Board[i][j]==0)
		{
			bYXEndEmpty = TRUE;   
			for (k=i+1, l=j+1; l<BOARD_LINE_NUMBER&&k<BOARD_LINE_NUMBER; l++, k++)            // /'
			{
			    if (m_Board[k][l]==cValue)
	    			nYXEndAdd = k-i;
				else if (m_Board[k][l]==0)
				{
					bYXEndEmpty1 = TRUE; 
                    break;
                }
                else
                	break;
            }
			break;
		}
	    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));
	
	m_nType = -1;	                           
	
	////////	
	if (nXStep>=5 || nYStep>=5 || nXYStep>=5 || nYXStep>=5)
	{
		nGrade = 0;
		m_nType = 0;
	}
	////////	
	else if (bX_4 || bY_4 || bXY_4 || bYX_4)
	{
		nGrade = 1;             
		m_nType = 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;
		m_nType = 1;
	}		
    /////////
	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;
		m_nType = 1;
	}		
	////////	
	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;
		m_nType = 2;
	}		
	////////
	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;
		m_nType = 1;
	}		                     
	else if ((bXY4 && (bYX3 || bY3 || bX3))||
	         (bYX4 && (bXY3 || bY3 || bX3))||
	         (bX4 && (bXY3 || bYX3 || bY3))||
	         (bY4 && (bXY3 || bYX3 || bX3)))
	{
		nGrade = 6;
		m_nType = 1;
	}		
	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;
		m_nType = 2;
	}		
	else if ((bXY4 && (bYX2 || bY2 || bX2))||
	         (bYX4 && (bXY2 || bY2 || bX2))||
	         (bX4 && (bXY2 || bYX2 || bY2))||
	         (bY4 && (bXY2 || bYX2 || bX2)))
	
	{
		nGrade = 8;
		m_nType = 1;
	}		
	else if (bXY4 || bYX4 || bX4 || bY4)
	{
		nGrade = 9;
		m_nType = 1;
	}		
	////////
	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;
		m_nType = 2;
	}		
	else if ((bXY_3 && (bYX3 || bY3 || bX3))||
	         (bYX_3 && (bXY3 || bY3 || bX3))||
	         (bX_3 && (bXY3 || bYX3 || bY3))||
	         (bY_3 && (bXY3 || bYX3 || bX3)))
	{
		nGrade = 11;
		m_nType = 2;
	}		
	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;
		m_nType = 2;
	}		
	else if ((bXY_3 && (bYX2 || bY2 || bX2))||
	         (bYX_3 && (bXY2 || bY2 || bX2))||
	         (bX_3 && (bXY2 || bYX2 || bY2))||
	         (bY_3 && (bXY2 || bYX2 || bX2)))
	{
		nGrade = 13;
		m_nType = 2;
	}		
	else if (bXY_3 || bYX_3 || bX_3 || bY_3)
	{
		nGrade = 14;
		m_nType = 2;
	}		           
	////////		
	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 ((m_Board[nX][nY-1]==0 || m_Board[nX][nY-1]==cValue) &&
			(m_Board[nX+1][nY]==0 || m_Board[nX+1][nY]==cValue) &&
			(m_Board[nX][nY+1]==0 || m_Board[nX][nY+1]==cValue) &&
			(m_Board[nX-1][nY]==0 || m_Board[nX-1][nY]==cValue) &&
			((nX+2<15 && nY-2>=0 && (m_Board[nX+2][nY-2]==0 || m_Board[nX+2][nY-2]==cValue) &&
			 m_Board[nX][nY-2]==cValue && m_Board[nX+1][nY-1]==cValue && m_Board[nX+2][nY]==cValue) ||
	     	(nX+2<15 && nY+2<15 && (m_Board[nX+2][nY+2]==0 || m_Board[nX+2][nY+2]==cValue) &&
	     	 m_Board[nX][nY+2]==cValue && m_Board[nX+1][nY+1]==cValue && m_Board[nX+2][nY]==cValue) ||
	     	(nX-2>=0 && nY+2<15 && (m_Board[nX-2][nY+2]==0 || m_Board[nX-2][nY+2]==cValue) &&
	     	 m_Board[nX][nY+2]==cValue && m_Board[nX-1][nY+1]==cValue && m_Board[nX-2][nY]==cValue) || 
		  	(nX-2>=0 && nY-2>=0 && (m_Board[nX-2][nY-2]==0 || m_Board[nX-2][nY-2]==cValue) &&
		  	 m_Board[nX][nY-2]==cValue && m_Board[nX-1][nY-1]==cValue && m_Board[nX-2][nY]==cValue)))
			nGrade = 15;
	/////////

	return nGrade;		
}

void CPenteDlg::Ring()
{	               
	g_nStoneNum++;
	if (m_nType == 0)
	{		  
		m_bGameOver = TRUE;
		m_bCanUndo = FALSE;  
		m_bCanHint = FALSE;
		m_pMenu->EnableMenuItem(IDM_UNDO, m_bCanUndo ? MF_ENABLED : MF_GRAYED);   
		m_pMenu->EnableMenuItem(IDM_HINT, m_bCanHint&&(g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);   
		
		CString str1,str2, str3, str4, str5;
		str1.LoadString(g_bChinese ? IDS_TOTAL_CHINESE:IDS_TOTAL_ENGLISH);
		str2.LoadString(g_bChinese ? IDS_BLACKWIN_CHINESE:IDS_BLACKWIN_ENGLISH);
		str3.LoadString(g_bChinese ? IDS_WHITEWIN_CHINESE:IDS_WHITEWIN_ENGLISH);
		str4.LoadString(g_bChinese ? IDS_UNDO_CHINESE:IDS_UNDO_ENGLISH);
		str5.LoadString(g_bChinese ? IDS_TITLE_CHINESE:IDS_TITLE_ENGLISH);
		
		char str[64];
		wsprintf(str, str1.GetBuffer(256), g_nStoneNum);
		CString strPrompt = m_byColor ? str2 : str3;
		strPrompt += str;                                    
		wsprintf(str, str4.GetBuffer(256), m_wBlackUndo,m_wWhiteUndo);		
		strPrompt += str;                                    
        if (g_nRunMode == MODE_WITH_COMPUTER && 
        	((g_bUserBlack && !m_byColor)||(!g_bUserBlack && m_byColor)))
        {
        	CString str6;              
        	if (g_nStoneNum<20)                                                 
        		str6.LoadString(g_bChinese ? IDS_BAD_CHINESE:IDS_BAD_ENGLISH);	
        	else
        		str6.LoadString(g_bChinese ? IDS_MORE_CHINESE:IDS_MORE_ENGLISH);	
        	strPrompt += str6;
        }
		PlaySound(m_byColor ? IDSOUND_BLACKWIN : IDSOUND_WHITEWIN);
		MessageBox(strPrompt, str5);
        
	    BOOL bWinner = FALSE;
	    if ((g_nSkill==1 && g_nStoneNum<g_nTime1) ||
	    	(g_nSkill==2 && g_nStoneNum<g_nTime2) ||
	    	(g_nSkill==3 && g_nStoneNum<g_nTime3))
	    	bWinner = TRUE;
	    
	    if (g_nRunMode == MODE_WITH_COMPUTER && bWinner &&
	    	((g_bUserBlack && m_byColor) || (! g_bUserBlack && ! m_byColor)))
	    {
	    	CRecordDlg recordDlg;
    		recordDlg.DoModal();
			OnBest();
		}
	}                           
	////////////////////////////
	else if (m_nType == 1)
	{		
		PlaySound(m_byColor ? IDSOUND_BLACK4 : IDSOUND_WHITE4);
	}
	////////////////////////////                                
	else if (m_nType == 2)
	{		                                                 
		PlaySound(m_byColor ? IDSOUND_BLACKD3 : IDSOUND_WHITED3);
	}
}

void CPenteDlg::OnUndo()
{             
    if (m_bCanUndo)
    {
		if (m_bGameOver)     
		{
			PlaySound(IDSOUND_ERROR);
			CString str1, str2;

⌨️ 快捷键说明

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