自娱自乐~经典24点游戏

首先上传界面结果:

自娱自乐~经典24点游戏

 

然后附上算法代码:

  1 void CMy24pointgameDlg::OnEnChangeEdit4()

  2 {

  3     // TODO:  如果该控件是 RICHEDIT 控件,则它将不会

  4     // 发送该通知,除非重写 CDialog::OnInitDialog()

  5     // 函数并调用 CRichEditCtrl().SetEventMask(),

  6     // 同时将 ENM_CHANGE 标志“或”运算到掩码中。

  7 

  8     // TODO:  在此添加控件通知处理程序代码

  9     m_WndButton.EnableWindow(TRUE);    //输入第四个数字时,计算按钮变为可按

 10 }

 11 

 12 void CMy24pointgameDlg::Count24PointGame(void)

 13 {

 14 

 15 

 16     UpdateData(TRUE);

 17 

 18     m_iWndNum1 = m_iWndNum1 % 10;

 19     m_iWndNum2 = m_iWndNum2 % 10;

 20     m_iWndNum3 = m_iWndNum3 % 10;

 21     m_iWndNum4 = m_iWndNum4 % 10;

 22 

 23     dVec.push_back(m_iWndNum1);

 24     dVec.push_back(m_iWndNum2);

 25     dVec.push_back(m_iWndNum3);

 26     dVec.push_back(m_iWndNum4);

 27 

 28     CString temp;

 29     temp.Format(L"%d",m_iWndNum1);

 30     sVec.push_back(temp);

 31     temp.Format(L"%d",m_iWndNum2);

 32     sVec.push_back(temp);

 33     temp.Format(L"%d",m_iWndNum3);

 34     sVec.push_back(temp);

 35     temp.Format(L"%d",m_iWndNum4);

 36     sVec.push_back(temp);

 37     

 38     if (!Search24Point(COUNT_OF_NUMBER))

 39     {

 40         m_WndResult += L"Fail.";

 41     }

 42     else

 43     {

 44         m_WndResult = L"";

 45         int c = 0;

 46         for (vector<CString>::iterator it = sResult.begin(); it != sResult.end(); it++)

 47         {

 48             CString temp;

 49             temp = *it;

 50             c++;

 51             if (c == 3)

 52             {

 53                 temp += "\r\n";

 54                 c = 0;

 55             }

 56             else

 57                 temp += "\t";

 58             m_WndResult += temp;

 59         }

 60     }

 61 

 62     dVec.clear();

 63     sVec.clear();

 64 

 65     m_cResult.SetSel(0,-1);

 66     m_cResult.ReplaceSel(m_WndResult);

 67 

 68     UpdateData(FALSE);

 69 }

 70 

 71 bool CMy24pointgameDlg::Search24Point(int n)

 72 {

 73     if (n == 1)

 74     {

 75         if (dVec.front() - NUMBER_TO_BE_CAL == 0)

 76         {

 77             CString temp;

 78             temp = sVec.front();

 79             temp += " = 24";

 80             sResult.push_back(temp);

 81             return TRUE;

 82         }

 83         else

 84             return FALSE;

 85     }

 86     for (int i = 0; i < n; i++)

 87     {

 88         for (int j = i + 1; j < n ; j++)

 89         {

 90             double a,b;

 91             CString s1,s2;

 92 

 93             a = dVec[i];            // 保存起来,在方法最后再恢复,以便继续计算  

 94             b = dVec[j];            // 保存起来,在方法最后再恢复,以便继续计算  

 95             dVec[j] = dVec[n - 1];    // 将最后一个数挪过来  

 96 

 97             s1 = sVec[i];            // 保存起来,在方法最后再恢复,以便继续计算  

 98             s2 = sVec[j];            // 保存起来,在方法最后再恢复,以便继续计算  

 99             sVec[j] = sVec[n - 1];    // 将最后一个式子挪过来j' 

100 

101             // 看看加法能否算出,如果能算出,返回true              

102             sVec[i] = '(' + s1 + '+' + s2 + ')';

103             dVec[i] = a + b;

104             if (Search24Point(n -1))

105             {

106                 return TRUE;

107             }

108             

109             // 看看减法能否算  

110             sVec[i] = '(' + s1 + '-' + s2 + ')';

111             dVec[i] = a - b;

112             if (Search24Point(n - 1))

113             {

114                 return TRUE;

115             }

116             

117             sVec[i] = '(' + s2 + '-' + s1 + ')';

118             dVec[i] = b - a;

119             if (Search24Point(n - 1))

120             {

121                 return TRUE;

122             }

123 

124             // 看看乘法能否算 

125             sVec[i] = '(' + s1 + '*' + s2  + ')';

126             dVec[i] = a * b;

127             if (Search24Point(n - 1))

128             {

129                 return TRUE;

130             }

131 

132             // 看看除法能否算 

133             if (b != 0)

134             {

135                 sVec[i] = '(' + s1 + '/' + s2  + ')';

136                 dVec[i] = a / b;

137                 if (Search24Point(n - 1))

138                 {

139                     return TRUE;

140                 }

141             }

142 

143             if (a != 0)

144             {

145                 sVec[i] = '(' + s2 + '/' + s1  + ')';

146                 dVec[i] = b / a;

147                 if (Search24Point(n - 1))

148                 {

149                     return TRUE;

150                 }

151             }

152              //如果以上的加、减、乘、除都不能得到有效的结果,则恢复数据进行下一轮的计算。   

153             dVec[i] = a;

154             dVec[j] = b;

155             sVec[i] = s1;

156             sVec[j] = s2;

157         }

158     }

159     return false;

160 }

 

你可能感兴趣的:(游戏)