📄 pentedlg.cpp
字号:
str1.LoadString(g_bChinese ? IDS_CANNOT_UNDO_CHINESE:IDS_CANNOT_UNDO_ENGLISH);
str2.LoadString(g_bChinese ? IDS_TITLE_CHINESE:IDS_TITLE_ENGLISH);
MessageBox(str1, str2);
return;
}
if (m_byColor)
m_wWhiteUndo++;
else
m_wBlackUndo++;
g_nStoneNum -= 2;
m_Board[m_wXCur1][m_wYCur1] = 0;
m_Board[m_wXCur2][m_wYCur2] = 0;
InvalidateRect(m_rcCur1, TRUE);
InvalidateRect(m_rcCur2, TRUE);
UpdateWindow();
PlaySound(IDSOUND_UNDO);
m_bCanUndo = FALSE;
m_pMenu->EnableMenuItem(IDM_UNDO, m_bCanUndo ? MF_ENABLED : MF_GRAYED);
m_rcCur1.SetRectEmpty();
m_rcCur2.SetRectEmpty();
}
else
{
PlaySound(IDSOUND_ERROR);
CString str1, str2;
str1.LoadString(g_bChinese ? IDS_CANNOT_UNDO_CHINESE1:IDS_CANNOT_UNDO_ENGLISH1);
str2.LoadString(g_bChinese ? IDS_TITLE_CHINESE:IDS_TITLE_ENGLISH);
MessageBox(str1, str2);
}
}
void CPenteDlg::OnHint()
{
if (m_bGameOver)
{
PlaySound(IDSOUND_ERROR);
CString str1, str2;
str1.LoadString(g_bChinese ? IDS_CANNOT_HINT_CHINESE:IDS_CANNOT_HINT_ENGLISH);
str2.LoadString(g_bChinese ? IDS_TITLE_CHINESE:IDS_TITLE_ENGLISH);
MessageBox(str1, str2);
return;
}
int x1, y1, x2, y2;
if (g_nStoneNum==0)
{
x1 = 7*m_cxGrid + m_wXNull-4;
y1 = 7*m_cyGrid + m_wYNull-4;
x2 = 7*m_cxGrid + m_wXNull+4;
y2 = 7*m_cyGrid + m_wYNull+4;
}
else
{
CPoint ptBest = UrgentPoint(!m_byColor);
x1 = ptBest.x*m_cxGrid + m_wXNull-4;
y1 = ptBest.y*m_cyGrid + m_wYNull-4;
x2 = ptBest.x*m_cxGrid + m_wXNull+4;
y2 = ptBest.y*m_cyGrid + m_wYNull+4;
}
CClientDC dc(this);
COLORREF crColor = m_byColor ? RGB(255,255,255) : RGB(0,0,0);
CPen pen(PS_SOLID, 1, crColor);
CPen *pOldPen = dc.SelectObject(&pen);
dc.MoveTo(x1, y1);
dc.LineTo(x2, y1);
dc.LineTo(x2, y2);
dc.LineTo(x1, y2);
dc.LineTo(x1, y1);
dc.SelectObject(pOldPen);
m_rcHint = CRect(x1-1,y1-1,x2+1,y2+1);
}
void CPenteDlg::OnNew()
{
InitParams();
Invalidate();
UpdateWindow();
CSetupDlg setupDlg;
if (setupDlg.DoModal()==IDCANCEL)
{
CDialog::EndDialog(0);
return;
}
CString str;
if (g_nRunMode==MODE_WITH_COMPUTER && g_bUserBlack)
str.LoadString(g_bChinese ? IDS_SINGLE_USER_CHINESE:IDS_SINGLE_USER_ENGLISH);
else if (g_nRunMode==MODE_WITH_COMPUTER && !g_bUserBlack)
str.LoadString(g_bChinese ? IDS_SINGLE_COMPUTER_CHINESE:IDS_SINGLE_COMPUTER_ENGLISH);
else if (g_nRunMode==MODE_2PLAYER)
str.LoadString(g_bChinese ? IDS_DOUBLE_CHINESE:IDS_DOUBLE_ENGLISH);
SetWindowText(str);
m_pMenu->DestroyMenu();
m_pMenu->LoadMenu(g_bChinese ? IDR_MENU_CHINESE : IDR_MENU_ENGLISH);
SetMenu(m_pMenu);
m_pMenu->CheckMenuItem(IDM_SOUND, g_bSoundOn ? MF_CHECKED : MF_UNCHECKED);
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);
m_pMenu->EnableMenuItem(IDM_GRADE1, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
m_pMenu->EnableMenuItem(IDM_GRADE2, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
m_pMenu->EnableMenuItem(IDM_GRADE3, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
if (g_nSkill == 1)
{
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 2)
{
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 3)
{
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
}
PlaySound(IDSOUND_NEWGAME);
if (g_nRunMode==MODE_WITH_COMPUTER && !g_bUserBlack)
{
CPoint pt; // Computer first
m_byColor = !m_byColor; // 1-Black 0-White
m_Board[7][7]=m_byColor+1;
pt.x = 7*m_cxGrid + m_wXNull;
pt.y = 7*m_cyGrid + m_wYNull;
InvalidateRect(GetCurStoneArea(pt), FALSE);
UpdateWindow();
ClientToScreen(&pt);
SetCursorPos(pt.x, pt.y);
PlaySound(IDSOUND_PUTSTONE);
Judge(7, 7, m_Board[7][7]);
Ring();
}
}
void CPenteDlg::ReponseNew()
{
InitParams();
Invalidate();
UpdateWindow();
CSetupDlg setupDlg;
if (setupDlg.DoModal()==IDCANCEL)
{
CDialog::EndDialog(0);
return;
}
CString str;
if (g_nRunMode==MODE_WITH_COMPUTER && g_bUserBlack)
str.LoadString(g_bChinese ? IDS_SINGLE_USER_CHINESE:IDS_SINGLE_USER_ENGLISH);
else if (g_nRunMode==MODE_WITH_COMPUTER && !g_bUserBlack)
str.LoadString(g_bChinese ? IDS_SINGLE_COMPUTER_CHINESE:IDS_SINGLE_COMPUTER_ENGLISH);
else if (g_nRunMode==MODE_2PLAYER)
str.LoadString(g_bChinese ? IDS_DOUBLE_CHINESE:IDS_DOUBLE_ENGLISH);
SetWindowText(str);
m_pMenu->DestroyMenu();
m_pMenu->LoadMenu(g_bChinese ? IDR_MENU_CHINESE : IDR_MENU_ENGLISH);
SetMenu(m_pMenu);
m_pMenu->CheckMenuItem(IDM_SOUND, g_bSoundOn ? MF_CHECKED : MF_UNCHECKED);
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);
m_pMenu->EnableMenuItem(IDM_GRADE1, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
m_pMenu->EnableMenuItem(IDM_GRADE2, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
m_pMenu->EnableMenuItem(IDM_GRADE3, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
if (g_nSkill == 1)
{
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 2)
{
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 3)
{
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
}
PlaySound(IDSOUND_NEWGAME);
if (g_nRunMode==MODE_WITH_COMPUTER && !g_bUserBlack)
{
CPoint pt; // Computer first
m_byColor = !m_byColor; // 1-Black 0-White
m_Board[7][7]=m_byColor+1;
pt.x = 7*m_cxGrid + m_wXNull;
pt.y = 7*m_cyGrid + m_wYNull;
InvalidateRect(GetCurStoneArea(pt), FALSE);
UpdateWindow();
ClientToScreen(&pt);
SetCursorPos(pt.x, pt.y);
PlaySound(IDSOUND_PUTSTONE);
Judge(7, 7, m_Board[7][7]);
Ring();
}
}
void CPenteDlg::OnSkill1()
{
g_nSkill = 1;
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
void CPenteDlg::OnSkill2()
{
g_nSkill = 2;
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
void CPenteDlg::OnSkill3()
{
g_nSkill = 3;
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
}
void CPenteDlg::OnSound()
{
g_bSoundOn = ! g_bSoundOn;
GetMenu()->CheckMenuItem(IDM_SOUND, g_bSoundOn ? MF_CHECKED : MF_UNCHECKED);
}
void CPenteDlg::OnAbout()
{
CAboutDlg aboutDlg(this);
aboutDlg.DoModal();
}
void CPenteDlg::OnBest()
{
CBestDlg bestDlg;
bestDlg.DoModal();
}
void CPenteDlg::OnLanguage()
{
g_bChinese = ! g_bChinese;
CString str;
if (g_nRunMode==MODE_WITH_COMPUTER && g_bUserBlack)
str.LoadString(g_bChinese ? IDS_SINGLE_USER_CHINESE:IDS_SINGLE_USER_ENGLISH);
else if (g_nRunMode==MODE_WITH_COMPUTER && !g_bUserBlack)
str.LoadString(g_bChinese ? IDS_SINGLE_COMPUTER_CHINESE:IDS_SINGLE_COMPUTER_ENGLISH);
else if (g_nRunMode==MODE_2PLAYER)
str.LoadString(g_bChinese ? IDS_DOUBLE_CHINESE:IDS_DOUBLE_ENGLISH);
SetWindowText(str);
m_pMenu->DestroyMenu();
m_pMenu->LoadMenu(g_bChinese ? IDR_MENU_CHINESE : IDR_MENU_ENGLISH);
SetMenu(m_pMenu);
m_pMenu->CheckMenuItem(IDM_SOUND, g_bSoundOn ? MF_CHECKED : MF_UNCHECKED);
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);
if (g_nSkill == 1)
{
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 2)
{
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 3)
{
m_pMenu->CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_CHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
m_pMenu->CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
}
}
void CPenteDlg::OnExit()
{
KillTimer(ID_TIMER_NET);
PlaySound(IDSOUND_GOODBYE, SND_SYNC);
CDialog::EndDialog(0);
}
void CPenteDlg::PutStone(BYTE byColor, CPoint point, CDC *pDC)
{
int nX = point.x*m_cxGrid + m_wXNull - m_wStoneWidth/2;
int nY = point.y*m_cyGrid + m_wYNull - m_wStoneHeight/2;
CPoint ptLUCorner(nX, nY);
m_pDibMask->Display(pDC, ptLUCorner, SRCAND);
if (byColor == 0)
m_pDibWhite->Display(pDC, ptLUCorner, SRCPAINT);
else if (byColor == 1)
m_pDibBlack->Display(pDC, ptLUCorner, SRCPAINT);
}
CRect CPenteDlg::GetCurStoneArea(CPoint point)
{
int nXd = point.x-m_wStoneWidth/2;
int nYd = point.y-m_wStoneHeight/2;
return CRect(nXd, nYd, nXd+m_wStoneWidth, nYd+m_wStoneHeight);
}
BOOL CPenteDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
CPoint point, pt;
::GetCursorPos(&point);
ScreenToClient(&point);
if (PointToStonePos(point, pt) && !m_bGameOver)
{
::SetCursor(AfxGetApp()->LoadCursor(m_byColor ? IDC_WHITE_HAND:IDC_BLACK_HAND));
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
void CPenteDlg::OnPaletteChanged(CWnd* pFocusWnd)
{
CDialog::OnPaletteChanged(pFocusWnd);
if (pFocusWnd != this)
OnQueryNewPalette();
}
BOOL CPenteDlg::OnQueryNewPalette()
{
CClientDC dc(this);
CPalette *pOldPal = dc.SelectPalette (m_pDibBoard->GetPalette(), FALSE);
int nChangedColors = dc.RealizePalette();
dc.SelectPalette (pOldPal, FALSE);
// If any palette entries changed, repaint the window.
if (nChangedColors > 0)
Invalidate();
return CDialog::OnQueryNewPalette();
}
void CPenteDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if (nID == SC_CLOSE)
OnExit();
CDialog::OnSysCommand(nID, lParam);
}
void CPenteDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
menu.LoadMenu(g_bChinese ? IDR_MENU_CONTEXT_CHINESE : IDR_MENU_CONTEXT_ENGLISH);
menu.CheckMenuItem(IDM_SOUND, g_bSoundOn ? MF_CHECKED : MF_UNCHECKED);
menu.EnableMenuItem(IDM_UNDO, m_bCanUndo ? MF_ENABLED : MF_GRAYED);
menu.EnableMenuItem(IDM_HINT, m_bCanHint&&(g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
menu.EnableMenuItem(IDM_GRADE1, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
menu.EnableMenuItem(IDM_GRADE2, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
menu.EnableMenuItem(IDM_GRADE3, (g_nRunMode==MODE_WITH_COMPUTER) ? MF_ENABLED : MF_GRAYED);
if (g_nSkill == 1)
{
menu.CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_CHECKED);
menu.CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
menu.CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 2)
{
menu.CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_CHECKED);
menu.CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
menu.CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_UNCHECKED);
}
else if (g_nSkill == 3)
{
menu.CheckMenuItem(IDM_GRADE3, MF_BYCOMMAND | MF_CHECKED);
menu.CheckMenuItem(IDM_GRADE1, MF_BYCOMMAND | MF_UNCHECKED);
menu.CheckMenuItem(IDM_GRADE2, MF_BYCOMMAND | MF_UNCHECKED);
}
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
point.x, point.y, this);
}
void CPenteDlg::OnCancel()
{
}
void CPenteDlg::OnOK()
{
}
////////////////////////// End of PENTEWND.CPP ////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -