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

📄 24diandlg.cpp

📁 24点游戏,用c++实现
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		for(int i=0; i<4; i++)
		{
			CRect rc(m_rcExpCardPos[i].left-15,
					m_rcExpCardPos[i].top-15,
					m_rcExpCardPos[i].left+15,
					m_rcExpCardPos[i].top+15);
			if(rc.PtInRect(CPoint(m_rcCardPos[nIndex].left, m_rcCardPos[nIndex].top)))
			{
				m_rcCardPos[nIndex]=m_rcExpCardPos[i];
				CRect tmprc = m_rcCardPos[nIndex];
				tmprc.InflateRect(15, 15);
				InvalidateRect(tmprc,FALSE);

				GetExp();

				return;
			}

		}
	}
	if(m_nCapturedOp >= 0)
	{
		for(int i=0; i<9; i++)
		{
			CRect rc(m_rcExpOpPos[i].left-15,
					m_rcExpOpPos[i].top-15,
					m_rcExpOpPos[i].left+15,
					m_rcExpOpPos[i].top+15);
			if(rc.PtInRect(CPoint(m_rcOpPos[nIndex].left,m_rcOpPos[nIndex].top)))
			{
				m_rcOpPos[nIndex]=m_rcExpOpPos[i];
				CRect tmprc = m_rcOpPos[nIndex];
				tmprc.InflateRect(15, 15);
				InvalidateRect(tmprc,FALSE);

				GetExp();

				return;
			}

		}
	}

	GetExp();	
}


void CMy24DianDlg::GetExp()
{
	CString strExpCard[4];
	CString strExpOp[9];

	CString strNum[4];
	strNum[0]=m_strNum1;
	strNum[1]=m_strNum2;
	strNum[2]=m_strNum3;
	strNum[3]=m_strNum4;

	for(int i=0; i<4; i++)
	{
		for(int j=1; j<5; j++)			
		{
			CRect rc(m_rcCardPos[j].CenterPoint().x-15,
					m_rcCardPos[j].CenterPoint().y-15,
					m_rcCardPos[j].CenterPoint().x+15,
					m_rcCardPos[j].CenterPoint().y+15);

			if(rc.PtInRect(m_rcExpCardPos[i].CenterPoint()))
			{
				if(!m_bIsEnter)
					strExpCard[i].Format("%.0f", m_dNum[j-1]);
				else
					strExpCard[i]=strNum[j-1];
				break;
			}
			else
				strExpCard[i]="";

		}
	}
	for(i=0; i<9; i++)
	{
		for(int j=0; j<21; j++)			
		{
			CRect rc(m_rcExpOpPos[i].CenterPoint().x-4,
					m_rcExpOpPos[i].CenterPoint().y-4,
					m_rcExpOpPos[i].CenterPoint().x+4,
					m_rcExpOpPos[i].CenterPoint().y+4);
		
			if(rc.PtInRect(m_rcOpPos[j].CenterPoint()))
			{
				switch(j/3)
				{
					case 0:
						strExpOp[i]="+";
						break;
					case 1:
						strExpOp[i]="-";
						break;
					case 2:
						strExpOp[i]="×";
						break;
					case 3:
						strExpOp[i]="÷";
						break;
					case 4:
						strExpOp[i]="(";
						break;
					case 5:
						strExpOp[i]=")";
						break;
					case 6:
						strExpOp[i]="^";
						break;
				}
				break;
			}
			else
				strExpOp[i]="";

		}
	}
	m_strAnswer="";
	m_strAnswer+=strExpOp[0];
	m_strAnswer+=strExpCard[0];
	m_strAnswer+=strExpOp[1];
	m_strAnswer+=strExpOp[2];
	m_strAnswer+=strExpCard[1];
	m_strAnswer+=strExpOp[3];
	m_strAnswer+=strExpOp[4];
	m_strAnswer+=strExpOp[5];
	m_strAnswer+=strExpCard[2];
	m_strAnswer+=strExpOp[6];
	m_strAnswer+=strExpOp[7];
	m_strAnswer+=strExpCard[3];
	m_strAnswer+=strExpOp[8];

	m_ctlEditAnswer.SetWindowText(m_strAnswer);

//	UpdateData(FALSE);
}

void CMy24DianDlg::DrawExpPos(CDC *pDC)
{
	CBrush* pOldBrush=(CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	CPen pen(PS_SOLID, 2, RGB(255, 0, 0));
	CPen* pOldPen=pDC->SelectObject(&pen);
	for(int i=0; i<4; i++)
	{
		CRect rc=m_rcExpCardPos[i];
		rc.InflateRect(0,0,2,2);
		pDC->Rectangle(rc);
	}
	for(i=0; i<9; i++)
	{
		CRect rc=m_rcExpOpPos[i];
		rc.InflateRect(0,0,3,3);
		pDC->Rectangle(rc);
	}
	for(i=0; i<7; i++)
	{
		pDC->SelectObject(pOldPen);
		CPen penGreen(PS_SOLID, 2, RGB(0,255,64));
		pOldPen=pDC->SelectObject(&penGreen);
		CRect rc;
		CStatic *pStatic=(CStatic*)GetDlgItem(IDC_OP_ADD+i);
		pStatic->GetWindowRect(rc);
		ScreenToClient(rc);
		rc.InflateRect(0,0,3,3);
		pDC->Rectangle(rc);
	}
	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldPen);
}

void CMy24DianDlg::SetAnswerList()
{
	LOGFONT logFont;

	/* 屏幕dc初始化*/
	HDC screenDC;
	int colorBits, xRes, yRes;
	screenDC = CreateDC("DISPLAY", NULL, NULL,NULL);
	/* 检索设备 */
	colorBits = GetDeviceCaps(screenDC, BITSPIXEL);
	xRes = GetDeviceCaps(screenDC, HORZRES);
	yRes = GetDeviceCaps(screenDC, VERTRES);
	/* 清除 */
	DeleteDC(screenDC);

	int nResponse = IDOK;
	if(xRes==1024 && yRes==768)
	{
		logFont.lfHeight=25;
	}
	else
	{
		logFont.lfHeight=20;
	}
	logFont.lfWidth=0;
	logFont.lfWeight=FW_NORMAL;
	logFont.lfEscapement=0;
	logFont.lfOrientation=0;
	logFont.lfItalic=FALSE;
	logFont.lfStrikeOut=FALSE;
	logFont.lfUnderline=FALSE;
	logFont.lfCharSet=ANSI_CHARSET;
	logFont.lfQuality=DEFAULT_QUALITY;
	logFont.lfOutPrecision=OUT_CHARACTER_PRECIS;
	logFont.lfClipPrecision=CLIP_DEFAULT_PRECIS;
	logFont.lfPitchAndFamily=DEFAULT_PITCH | FF_SWISS;
	strcpy(logFont.lfFaceName,"宋体");

	m_ctlEditAnswerList.SetColor(RGB(0,0,255));
	m_ctlEditAnswerList.SetFont(logFont);


}





void CMy24DianDlg::DrawNum(CDC *pDC)
{
	LOGFONT logFont;
	logFont.lfHeight=40;
	logFont.lfWidth=20;
	logFont.lfWeight=FW_NORMAL;
	logFont.lfEscapement=0;
	logFont.lfOrientation=0;
	logFont.lfItalic=FALSE;
	logFont.lfStrikeOut=FALSE;
	logFont.lfUnderline=FALSE;
	logFont.lfCharSet=ANSI_CHARSET;
	logFont.lfQuality=DEFAULT_QUALITY;
	logFont.lfOutPrecision=OUT_CHARACTER_PRECIS;
	logFont.lfClipPrecision=CLIP_DEFAULT_PRECIS;
	logFont.lfPitchAndFamily=DEFAULT_PITCH | FF_SWISS;
	strcpy(logFont.lfFaceName,"宋体");

	CFont font;
	font.CreateFontIndirect(&logFont);
	CFont *pOldFont=pDC->SelectObject(&font);

	UpdateData();

	CString strNum[4];
	strNum[0]=m_strNum1;
	strNum[1]=m_strNum2;
	strNum[2]=m_strNum3;
	strNum[3]=m_strNum4;

	int nMode=pDC->SetBkMode(TRANSPARENT);
	COLORREF oldColor=pDC->SetTextColor(RGB(255, 0, 0));
	CPen pen(PS_SOLID, 1, RGB(255, 255, 0));
	CPen *pOldPen=pDC->SelectObject(&pen);
	for(int i=0; i<4; i++)
	{
		if(atoi(strNum[i]) < 1 || atoi(strNum[i]) > 13)
		{
			CRect rc=m_rcCardPos[i+1];
			rc.top=rc.top+rc.Height()/3;
			pDC->Rectangle(m_rcCardPos[i+1]);
	//		pDC->FillRect(, &CBrush(RGB(255, 255, 255)));		
			pDC->DrawText(strNum[i],rc, DT_CENTER);
		}
		else
		{
			//m_bmpCard[1].LoadFromFile("bmp\\"+m_CarInfo[
			m_bmpCard[i+1].Draw(*pDC,&m_rcCardPos[i+1]);
		}
	}
	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldFont);
	pDC->SetTextColor(oldColor);
	pDC->SetBkMode(nMode);	

	GetExp();	
}


void CMy24DianDlg::OnSelchangeComboNum1() 
{
	// TODO: Add your control notification handler code here
	InvalidateRect(m_rcCardPos[1],FALSE);	
	m_strAnswerList="";
	m_nAnswerIndex=0;
	CComboBox *pCombo=(CComboBox*)GetDlgItem(IDC_COMBO_NUM1);
	CString strNum;
	int nSel = pCombo->GetCurSel();
	pCombo->GetLBText(nSel, strNum);

	if(atoi(strNum) < 1 || atoi(strNum) >13)
		return;
	if(!m_bmpCard[1].LoadFromFile("bmp\\"+m_CardInfo[nSel].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[nSel].m_strFileName);
}

void CMy24DianDlg::OnEditchangeComboNum1() 
{
	// TODO: Add your control notification handler code here
	InvalidateRect(m_rcCardPos[1],FALSE);
	m_strAnswerList="";
	m_nAnswerIndex=0;

	CComboBox *pCombo=(CComboBox*)GetDlgItem(IDC_COMBO_NUM1);
	CString strNum;
	pCombo->GetWindowText(strNum);

	if(atoi(strNum) < 1 || atoi(strNum) >13)
		return;
	if(!m_bmpCard[1].LoadFromFile("bmp\\"+m_CardInfo[atoi(strNum)-1].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[atoi(strNum)-1].m_strFileName);
}

void CMy24DianDlg::OnEditchangeComboNum2() 
{
	// TODO: Add your control notification handler code here
	InvalidateRect(m_rcCardPos[2],FALSE);
	m_strAnswerList="";
	m_nAnswerIndex=0;

	CComboBox *pCombo=(CComboBox*)GetDlgItem(IDC_COMBO_NUM2);
	CString strNum;
	pCombo->GetWindowText(strNum);

	if(atoi(strNum) < 1 || atoi(strNum) >13)
		return;
	if(!m_bmpCard[2].LoadFromFile("bmp\\"+m_CardInfo[13+atoi(strNum)-1].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[13+atoi(strNum)-1].m_strFileName);
}

void CMy24DianDlg::OnSelchangeComboNum2() 
{
	// TODO: Add your control notification handler code here
	InvalidateRect(m_rcCardPos[2],FALSE);
	m_strAnswerList="";
	m_nAnswerIndex=0;

	CComboBox *pCombo=(CComboBox*)GetDlgItem(IDC_COMBO_NUM2);
	CString strNum;
	int nSel = pCombo->GetCurSel();
	pCombo->GetLBText(nSel, strNum);

	if(atoi(strNum) < 1 || atoi(strNum) >13)
		return;
	if(!m_bmpCard[2].LoadFromFile("bmp\\"+m_CardInfo[13+nSel].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[13+nSel].m_strFileName);
}

void CMy24DianDlg::OnEditchangeComboNum3() 
{
	// TODO: Add your control notification handler code here
	InvalidateRect(m_rcCardPos[3],FALSE);
	m_strAnswerList="";
	m_nAnswerIndex=0;

	CComboBox *pCombo=(CComboBox*)GetDlgItem(IDC_COMBO_NUM3);
	CString strNum;
	pCombo->GetWindowText(strNum);

	if(atoi(strNum) < 1 || atoi(strNum) >13)
		return;
	if(!m_bmpCard[3].LoadFromFile("bmp\\"+m_CardInfo[13*2+atoi(strNum)-1].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[13*2+atoi(strNum)-1].m_strFileName);
}

void CMy24DianDlg::OnSelchangeComboNum3() 
{
	// TODO: Add your control notification handler code here
	InvalidateRect(m_rcCardPos[3],FALSE);
	m_strAnswerList="";
	m_nAnswerIndex=0;

	CComboBox *pCombo=(CComboBox*)GetDlgItem(IDC_COMBO_NUM3);
	CString strNum;
	int nSel = pCombo->GetCurSel();
	pCombo->GetLBText(nSel, strNum);

	if(atoi(strNum) < 1 || atoi(strNum) >13)
		return;
	if(!m_bmpCard[3].LoadFromFile("bmp\\"+m_CardInfo[13*2+nSel].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[13*2+nSel].m_strFileName);

}

void CMy24DianDlg::OnEditchangeComboNum4() 
{
	// TODO: Add your control notification handler code here
	InvalidateRect(m_rcCardPos[4],FALSE);
	m_strAnswerList="";
	m_nAnswerIndex=0;

	CComboBox *pCombo=(CComboBox*)GetDlgItem(IDC_COMBO_NUM4);
	CString strNum;
	pCombo->GetWindowText(strNum);

	if(atoi(strNum) < 1 || atoi(strNum) >13)
		return;
	if(!m_bmpCard[4].LoadFromFile("bmp\\"+m_CardInfo[13*3+atoi(strNum)-1].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[13*3+atoi(strNum)-1].m_strFileName);
}

void CMy24DianDlg::OnSelchangeComboNum4() 
{
	// TODO: Add your control notification handler code here
	InvalidateRect(m_rcCardPos[4],FALSE);
	m_strAnswerList="";
	m_nAnswerIndex=0;

	CComboBox *pCombo=(CComboBox*)GetDlgItem(IDC_COMBO_NUM4);
	CString strNum;
	int nSel = pCombo->GetCurSel();
	pCombo->GetLBText(nSel, strNum);

	if(atoi(strNum) < 1 || atoi(strNum) >13)
		return;
	if(!m_bmpCard[4].LoadFromFile("bmp\\"+m_CardInfo[13*3+nSel].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[13*3+nSel].m_strFileName);

}

void CMy24DianDlg::SetButtonEnabled()
{
	CButton* pButton=(CButton*)GetDlgItem(IDC_BUTTON_ANSWER);
	pButton->EnableWindow(TRUE);
	pButton=(CButton*)GetDlgItem(IDC_BUTTON_NO_ANSWER);
	pButton->EnableWindow(TRUE);
	pButton=(CButton*)GetDlgItem(IDC_BUTTON_ALL_ANSWER);
	pButton->EnableWindow(TRUE);
	pButton=(CButton*)GetDlgItem(IDC_BUTTON_NEXT_ANSWER);
	pButton->EnableWindow(TRUE);
	
}

void CMy24DianDlg::OnHelp() 
{
	// TODO: Add your command handler code here
/*	TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中定义了吧,好象是128
	::GetModuleFileName(NULL,exeFullPath,MAX_PATH);
	CString strCurPath(exeFullPath);
	int nPos=strCurPath.ReverseFind('\\');
	if(nPos!=-1)
		strCurPath=strCurPath.Left(nPos);
	
	::ShellExecute(NULL,NULL,_T("24Dian.chm"),NULL,strCurPath,SW_SHOWMAXIMIZED);*/

//	if(result<=32)
//		AfxMessageBox("Can not open help!");

	CHelpDlg helpDlg;
	helpDlg.DoModal();
}

void CMy24DianDlg::OnEditchangeComboResult() 
{
	// TODO: Add your control notification handler code here
	m_strAnswerList="";
	m_nAnswerIndex=0;
}

void CMy24DianDlg::OnSelchangeComboResult() 
{
	// TODO: Add your control notification handler code here
	m_strAnswerList="";
	m_nAnswerIndex=0;
}

void CMy24DianDlg::SetComboBox()
{
	LOGFONT logFont;
	logFont.lfHeight=20;
	logFont.lfWidth=0;
	logFont.lfWeight=FW_NORMAL;
	logFont.lfEscapement=0;
	logFont.lfOrientation=0;
	logFont.lfItalic=FALSE;
	logFont.lfStrikeOut=FALSE;
	logFont.lfUnderline=FALSE;
	logFont.lfCharSet=ANSI_CHARSET;
	logFont.lfQuality=DEFAULT_QUALITY;
	logFont.lfOutPrecision=OUT_CHARACTER_PRECIS;
	logFont.lfClipPrecision=CLIP_DEFAULT_PRECIS;
	logFont.lfPitchAndFamily=DEFAULT_PITCH | FF_SWISS;
//	char name[32]="Times New Roman";Fixedsys
	strcpy(logFont.lfFaceName,"宋体");
	
	COLORREF color=RGB(255,0,0);
	m_ctlComboResult.SetFont(logFont);
	m_ctlComboResult.SetColor(color);

	m_ctlComboNum1.SetFont(logFont);
	m_ctlComboNum1.SetColor(color);
	m_ctlComboNum2.SetFont(logFont);
	m_ctlComboNum2.SetColor(color);
	m_ctlComboNum3.SetFont(logFont);
	m_ctlComboNum3.SetColor(color);
	m_ctlComboNum4.SetFont(logFont);
	m_ctlComboNum4.SetColor(color);

}

void CMy24DianDlg::DrawLabel(CDC *pDC)
{
	LOGFONT logFont;
	/* 屏幕dc初始化*/
	HDC screenDC;
	int colorBits, xRes, yRes;
	screenDC = CreateDC("DISPLAY", NULL, NULL,NULL);
	/* 检索设备 */
	colorBits = GetDeviceCaps(screenDC, BITSPIXEL);
	xRes = GetDeviceCaps(screenDC, HORZRES);
	yRes = GetDeviceCaps(screenDC, VERTRES);
	/* 清除 */
	DeleteDC(screenDC);

	int nResponse = IDOK;
	if(xRes==1024 && yRes==768)
	{
		logFont.lfHeight=25;
	}
	else
	{
		logFont.lfHeight=16;
	}
	logFont.lfWidth=0;
	logFont.lfWeight=FW_NORMAL;
	logFont.lfEscapement=0;
	logFont.lfOrientation=0;
	logFont.lfItalic=FALSE;
	logFont.lfStrikeOut=FALSE;
	logFont.lfUnderline=FALSE;
	logFont.lfCharSet=ANSI_CHARSET;
	logFont.lfQuality=DEFAULT_QUALITY;
	logFont.lfOutPrecision=OUT_CHARACTER_PRECIS;
	logFont.lfClipPrecision=CLIP_DEFAULT_PRECIS;
	logFont.lfPitchAndFamily=DEFAULT_PITCH | FF_SWISS;
	strcpy(logFont.lfFaceName,"宋体");

	CFont font;
	font.CreateFontIndirect(&logFont);
	CFont *pOldFont=pDC->SelectObject(&font);

	pDC->SetBkMode(TRANSPARENT);

	COLORREF oldColor=pDC->SetTextColor(RGB(255, 255, 0));

	CRect rc;
	CStatic* pStatic=(CStatic*)GetDlgItem(IDC_LABEL_ENTER);
	pStatic->GetWindowRect(&rc);
	ScreenToClient(&rc);
	pDC->DrawText("输入解:", &rc, DT_CENTER);

	pStatic=(CStatic*)GetDlgItem(IDC_LABEL_EQUAL);
	pStatic->GetWindowRect(&rc);
	ScreenToClient(&rc);
	pDC->DrawText("=", &rc, DT_CENTER);

	pDC->SetTextColor(oldColor);
	pDC->SelectObject(pOldFont);
}

BOOL CAboutDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_CoLink.SetURL(_T("www.zjzes.com"));
	m_CoLink.SetUnderline(TRUE);	
	m_AuthorMail.SetURL(_T("mailto:rnl@zjzes.com"));
	m_AuthorMail.SetUnderline(TRUE);	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CMy24DianDlg::InitEnterNum()
{
	m_strNum1 = "1";
	m_strNum2 = "1";
	m_strNum3 = "1";
	m_strNum4 = "1";

	UpdateData(FALSE);

	if(!m_bmpCard[1].LoadFromFile("bmp\\"+m_CardInfo[0].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[0].m_strFileName);

	if(!m_bmpCard[2].LoadFromFile("bmp\\"+m_CardInfo[13].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[13].m_strFileName);

	if(!m_bmpCard[3].LoadFromFile("bmp\\"+m_CardInfo[13*2].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[13*2].m_strFileName);

	if(!m_bmpCard[4].LoadFromFile("bmp\\"+m_CardInfo[13*3].m_strFileName))
		AfxMessageBox("Can not load bmp:"+m_CardInfo[13*3].m_strFileName);

}

void CMy24DianDlg::OnUpdateStart(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(!m_bIsEnter);
}

⌨️ 快捷键说明

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