试着自己写了个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