試著自己寫了個24點游戲,如有改進或者不對的地方請指出。
基本知識:
游戲規則很簡單,就是利用加減乘除將撲克牌的任一4張牌的組合,運算后得到結果24.
界面用Qt完成后
界面沒有多下功夫,可以添加時間提醒,修改目標數值(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