📄 pentedlg.cpp
字号:
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 + -