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