試著自己寫了個24點游戲,如有改進或者不對的地方請指出。

基本知識:

游戲規則很簡單,就是利用加減乘除將撲克牌的任一4張牌的組合,運算后得到結果24.

界面用Qt完成后

clip_image002

clip_image004

界面沒有多下功夫,可以添加時間提醒,修改目標數值(24),增加牌數應該也是可以的,不過我沒有去試一下。感覺花哨了沒有簡單來的好一些。

next會生成新的牌。answer查看答案。

牌的數值使用QlineEdit做的,可以自己設置值。

CardCalculation類會根據輸入的牌數(vector<double>)計算出響應的表達式。

計算流程:

數據結構的書還沒看完,算法完全是自己憑空去試。最后寫出來后其實也不知道自己再考慮這方便問題時思路怎么展開。盡快抽時間看下算法的書才行。

我們拿※作為任意的操作符(+-*/)來說明。

根據vec元素個數:

1. a※b,直接計算即可。

2. a※b※c,可能操作為:

(a※b)※c

a※(b※c)

3. a※b※c ※d,可能操作為:

(a※b)※c ※d

a※(b※c) ※d

a※b※(c ※d)

因此采用遞歸求解,好處是如果增加牌的張數時應該容易修改一些,具體實現函數為calCards。

剛傳進vec時,大小為4,屬于第三種情況。遍歷vec,將可能操作后形成的新的vector再次作為函數參數傳入,直到遇到1情況返回,如果滿足返回true,否則返回false。返回true時,修改第二個參數保存表達式。

關于如何返回表達式這里我弄了很長時間。計算出正確的表達式后,每次遞歸都會加一對括號,其實后面應該可以對表達式優化下可能減少括號的數量,不過我沒有寫。

程序里都寫了注釋~如果還是有問題請給我留言J /Files/izualzhy/TwentyFourGame.rar