📄 dot04_02dlg.cpp
字号:
{
pCmdUI->SetCheck(over10==1);
}
void CDot04_02Dlg::OnBelow10()
{
over10=0;
}
void CDot04_02Dlg::OnUpdateBelow10(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(over10==0);
}
int CDot04_02Dlg::compu1(float i1, float i2, float i3, float i4, CString &s)
{
char op[4][6]={"+","-","*","/"};
int i,j,k;
float f;
for(i=0;i<4;i++)
for (j=0;j<4;j++)
for (k=0;k<4;k++)
{
f =compu3(compu3(compu3(i1,i2,i),i3,j),i4,k);
if (f>23.9999&&f<24.0001)
{
s.Format("((%2d %s %2d) %s %2d) %s %2d=24",(int)i1,op[i],(int)i2,op[j],(int)i3,op[k],(int)i4);
return 1;
}
f =compu3(compu3(i1,i2,i),compu3(i3,i4,k),j);
if (f>23.9999&&f<24.0001)
{
s.Format("(%2d %s %2d) %s (%2d %s %2d)=24",(int)i1,op[i],(int)i2,op[j],(int)i3,op[k],(int)i4);
return 1;
}
f =compu3(compu3(i1,compu3(i2,i3,j),i),i4,k);
if (f>23.9999&&f<24.0001)
{
s.Format("(%2d %s (%2d %s %2d)) %s %2d=24",(int)i1,op[i],(int)i2,op[j],(int)i3,op[k],(int)i4);
return 1;
}
f =compu3(i1,compu3(compu3(i2,i3,j),i4,k),i);
if (f>23.9999&&f<24.0001)
{
s.Format("%2d %s ((%2d %s %2d) %s %2d)=24",(int)i1,op[i],(int)i2,op[j],(int)i3,op[k],(int)i4);
return 1;
}
f =compu3(i1,compu3(i2,compu3(i3,i4,k),j),i);
if (f>23.9999&&f<24.0001)
{
s.Format("%2d %s (%2d %s (%2d %s %2d))=24",(int)i1,op[i],(int)i2,op[j],(int)i3,op[k],(int)i4);
return 1;
}
}
return 0;
}
float CDot04_02Dlg::compu3(float i1, float i2, int i)
{
switch(i)
{
case 0:
return i1+i2;
case 1:
return i1-i2;
case 2:
return i1*i2;
case 3:
if (i2>0.0001||i2<-0.0001) return i1/i2;
else return 9999.9;
}
return 9999.9;
}
CString CDot04_02Dlg::compu(int i1, int i2, int i3, int i4)
{
CString s;
int i,j,k,l;
float a[4];
a[0]=(float)i1;
a[1]=(float)i2;
a[2]=(float)i3;
a[3]=(float)i4;
for (i=0;i<4;i++)
for (j=0;j<4;j++)
for (k=0;k<4;k++)
for (l=0;l<4;l++)
if (i!=j&&i!=k&&j!=k&&i!=l&&j!=l&&k!=l)
if (compu1(a[i],a[j],a[k],a[l],s))
return s;
s.Format("%d,%d,%d,%d 无解",i1,i2,i3,i4);
return s;
}
void CDot04_02Dlg::OnPai1()
{ if(stop==0)
{ if(over10==0)
{if(t1>=10) t1=t1-3;}
CString s;
s.Format("%d",t1);
m_input=m_input+s;
UpdateData(false);
}
}
void CDot04_02Dlg::OnPai2()
{ if(stop==0)
{ if(over10==0){if(t2>=10) t2=t2-3;}
CString s;
s.Format("%d",t2);
m_input=m_input+s;
UpdateData(false);}
}
void CDot04_02Dlg::OnPai3()
{ if(stop==0)
{ if(over10==0){if(t3>=10) t3=t3-3;}
CString s;
s.Format("%d",t3);
m_input=m_input+s;
UpdateData(false);
}}
void CDot04_02Dlg::OnPai4()
{ if(stop==0)
{ if(over10==0){if(t4>=10) t4=t4-3;}
CString s;
s.Format("%d",t4);
m_input=m_input+s;
UpdateData(false);
}}
//定位最后一个算术符号的位置
int CDot04_02Dlg::AnyLastPos(CString Str)
{
int SubPos=Str.ReverseFind('-')+1;
int PluPos=Str.ReverseFind('+')+1;
int MulPos=Str.ReverseFind('*')+1;
int DivPos=Str.ReverseFind('/')+1;
int Pos=SubPos;
if(Pos<PluPos)
Pos=PluPos;
if(Pos<MulPos)
Pos=MulPos;
if(Pos<DivPos)
Pos=DivPos;
return Pos;
}
//定位最先一个算术符号的位置
int CDot04_02Dlg::AnyFirstPos(CString Str)
{
int SubPos=Str.Find('-')+1;
int PluPos=Str.Find('+')+1;
int MulPos=Str.Find('*')+1;
int DivPos=Str.Find('/')+1;
int ForPos=Str.Find('^')+1;
int Pos=200;
if(SubPos==0) //如果没有-号
SubPos=200; //将SubPos设置成一个不可能的值
if(PluPos==0) //如果没有-号
PluPos=200; //将PluPos设置成一个不可能的值
if(MulPos==0) //如果没有-号
MulPos=200; //将MulPos设置成一个不可能的值
if(DivPos==0) //如果没有-号
DivPos=200; //将DivPos设置成一个不可能的值
if(ForPos==0) //如果没有-号
ForPos=200; //将ForPos设置成一个不可能的值
if(Pos>SubPos)
Pos=SubPos;
if(Pos>PluPos)
Pos=PluPos;
if(Pos>MulPos)
Pos=MulPos;
if(Pos>DivPos)
Pos=DivPos;
if(Pos>ForPos)
Pos=ForPos;
return Pos;
}
//判断最先出现的符号是+号、-号、*号还是/号
char CDot04_02Dlg::AnyFirstF(CString Str)
{
int SubPos=Str.Find('-')+1;
int PluPos=Str.Find('+')+1;
int MulPos=Str.Find('*')+1;
int DivPos=Str.Find('/')+1;
if(SubPos==0)
SubPos=200;
if(PluPos==0)
PluPos=200;
if(MulPos==0)
MulPos=200;
if(DivPos==0)
DivPos=200;
char Result='-';
int tempPos=SubPos;
if(PluPos<tempPos)
{
Result='+';
tempPos=PluPos;
}
if(MulPos<tempPos)
{
Result='*';
tempPos=MulPos;
}
if(DivPos<tempPos)
{
Result='/';
tempPos=DivPos;
}
return Result;
}
//此计算用于计算不带()号的乘方、加、减、乘、除运算
int CDot04_02Dlg::SubCompute(CString Str)
{
CString Middle="";
CString Mul2="";
CString Right="";
//定位第一个^号位置 ,计算乘方
int First=Str.Find("^")+1;
if(First) //循环计算乘方
{
CString tempStr=Str.Mid(0,First-1);
int temp=AnyLastPos(tempStr);
CString Left=Str.Mid(0,temp);
CString Mul1 =Str.Mid(temp,First-temp-1);
tempStr=Str.Mid(First,Str.GetLength()-First);
temp=AnyFirstPos(tempStr);
if(temp==200)
{
Mul2=tempStr;
Right="";
}
else
{
Mul2 =tempStr.Mid(0,temp-1);
Right=tempStr.Mid(temp-1,tempStr.GetLength()-temp+1);
}
Middle.Format("%d",(int)(pow(atof(Mul1),atof(Mul2))));
Str=Left+Middle+Right;
First=Str.Find("^")+1;
}
//定位第一个*号或/号的位置
int MulPos=Str.Find('*')+1;
int DivPos=Str.Find('/')+1;
First=MulPos;
if(MulPos>DivPos)
First=DivPos;
if(DivPos==0 && MulPos!=0)
{
First=MulPos;
DivPos=2000; // 将除号所在位置设置成一个大于MulPos但又不可能的值
}
if(DivPos!=0 && MulPos==0)
{
First=DivPos; // 将乘号所在位置设置成一个大于DivPos但不可能的值
MulPos=2000;
}
while(First) //循环计算乘、除
{
CString tempStr=Str.Mid(0,First-1);
int temp=AnyLastPos(tempStr);
CString Left=Str.Mid(0,temp);
CString Mul1 =Str.Mid(temp,First-temp-1);
tempStr=Str.Mid(First,Str.GetLength()-First);
temp=AnyFirstPos(tempStr);
if(temp==200)
{
Mul2=tempStr;
Right="";
}
else
{
Mul2 =tempStr.Mid(0,temp-1);
Right=tempStr.Mid(temp-1,tempStr.GetLength()-temp+1);
}
if(MulPos>DivPos)
Middle.Format("%d",(int)(strtod(Mul1.GetBuffer(Mul1.GetLength()),&stopstring)/strtod(Mul2.GetBuffer(Mul2.GetLength()),&stopstring)));
else
Middle.Format("%d",(int)(strtod(Mul1.GetBuffer(Mul1.GetLength()),&stopstring)*strtod(Mul2.GetBuffer(Mul2.GetLength()),&stopstring)));
Str=Left+Middle+Right;
MulPos=Str.Find('*')+1;
DivPos=Str.Find('/')+1;
First=MulPos;
if(MulPos>DivPos)
First=DivPos;
if(DivPos==0 && MulPos!=0)
{
First=MulPos;
DivPos=2000; // 将除号所在位置设置成一个大于MulPos但又不可能的值
}
if(DivPos!=0 && MulPos==0)
{
First=DivPos; // 将乘号所在位置设置成一个大于DivPos但不可能的值
MulPos=2000;
}
}
//定位+、-号首先出现的位置
First=AnyFirstPos(Str);
if(First==200)//如果没有+、-号,则可以直接返回结果
return (int)strtod(Str.GetBuffer(Str.GetLength()),&stopstring);
char Fuhao=AnyFirstF(Str); //确定首先出现的符号是+号还是-号
while(First)
{ //如果找到+号或-号
CString tempStr=Str.Mid(0,First-1);
int temp=AnyLastPos(tempStr);
CString Left=Str.Mid(0,temp);
CString Mul1 =Str.Mid(temp,First-temp-1);
tempStr=Str.Mid(First,Str.GetLength()-First);
temp=AnyFirstPos(tempStr);
if(temp==200)
{
Mul2=tempStr;
Right="";
}
else
{
Mul2 =tempStr.Mid(0,temp-1);
Right=tempStr.Mid(temp-1,tempStr.GetLength()-temp+1);
}
if(Fuhao=='+')
Middle.Format("%d",(int)(strtod(Mul1.GetBuffer(Mul1.GetLength()),&stopstring)+strtod(Mul2.GetBuffer(Mul2.GetLength()),&stopstring)));
else
Middle.Format("%d",(int)(strtod(Mul1.GetBuffer(Mul2.GetLength()),&stopstring)-strtod(Mul2.GetBuffer(Mul2.GetLength()),&stopstring)));
Str=Left+Middle+Right;
First=AnyFirstPos(Str);
if(First==200)
break;
Fuhao=AnyFirstF(Str);
}
return (int)strtod(Middle.GetBuffer(Middle.GetLength()),&stopstring);
}
//用于计算表达式的结果
int CDot04_02Dlg::TotalCompute(CString Str)
{
int First=Str.ReverseFind('(')+1; //定位最后一个(号位置
while(First)
{
CString SubStr =Str.Mid(First,(Str.GetLength()-First));
int Last= SubStr.Find(')')+1;
Last+=First; //定位最后一个(号以后的最开始的)号位置
CString LeftStr=Str.Mid(0,First-1); //(号左边的字符串
CString Middle =Str.Mid(First,Last-First-1); //()号中间的字符串
CString Right =Str.Mid(Last,Str.GetLength()-Last); //)号右边的字符串
int Result=SubCompute(Middle); //进入下面的计算
Middle.Format("%d",Result);
Str=LeftStr+Middle+Right;
First=Str.ReverseFind('(')+1;
}
int Result=SubCompute(Str);
return Result;
}
void CDot04_02Dlg::Onzanting()
{
stop=1;
KillTimer(1);
}
void CDot04_02Dlg::Onjixu()
{
stop=0;
SetTimer(1,900,NULL);
}
void CDot04_02Dlg::Onfapai()
{
if(stop==0)
{
m_lunshu++;
if(m_lunshu>=14)
{m_jushu++;
m_lunshu=1; }
i=rand()%13;
j=rand()%13;
k=rand()%13;
l=rand()%13;
t1=i+1;
t2=j+1;
t3=k+1;
t4=l+1;
if(over10==0)
{if((i+1)>=10) i-=3;
if((j+1)>=10) j-=3;
if((k+1)>=10) k-=3;
if((l+1)>=10) l-=3;}
m_button[1]->SetBitmap(HBITMAP(card1[i]));
m_button[2]->SetBitmap(HBITMAP(card2[j]));
m_button[3]->SetBitmap(HBITMAP(card3[k]));
m_button[4]->SetBitmap(HBITMAP(card4[l]));
m_jf--;
m_js++;
SetTimer(1,900,NULL);
m_LIST = _T("");
m_input = _T("");
CListBox *p;
p=(CListBox *)GetDlgItem(IDC_LIST2);
p->ResetContent();
UpdateData(false); }
}
void CDot04_02Dlg::Onbj()
{
back gg;
if(gg.DoModal()==IDOK){
m_button[0]->SetBitmap(HBITMAP(bj[gg.ghback]));}
}
void CDot04_02Dlg::OnChangeEdit1()
{UpdateData(true);
UpdateData(false);
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
}
void CDot04_02Dlg::OnAbout()
{
CAboutDlg d;
d.DoModal();
}
void CDot04_02Dlg::OnNandu()
{
}
void CDot04_02Dlg::OnAboutgame()
{
CHp e;
e.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -