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

📄 pentedlg.cpp

📁 这是一个五子棋的源代码配合上一些声音文件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			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 + -