
近乎全新的24点牌游戏终于在世界杯之前赶出来了,暂且发布一个Beta版,现在大家有机会挑战一把了,呵呵^_^
爬行榜打榜地址:http://www.afdream.com/games/
对比上一个版本做了一些改动:
1、改正了上一个版本有可使用欺骗的漏洞;

做这个游戏才发现这个游戏完全是体力活,仅那52张牌就够我忙的。在网上找了半天没找到想要的,只好自己在windows中想办法了,后来用execope愣是从cards.dll文件中一张一张的导出了52张牌。如果有人想要的话找我吧,Email:ahust#126.com(请把#换成@)。
还没做完,如果有兴趣的可以先练练,准备有空的话再做几个扑克牌游戏,什么梭哈,21点啦,都是我曾经比较喜欢的小游戏。做完几个后,然后再分别弄个排行榜玩玩,呵呵~~
继续说这个24点,这个flash游戏加大了难度,本来应该是1~9个数字,我用了1~13,增加挑战性,呵呵...
先公布一下第一篇文章中提出的问题的答案:
1,5,5,5:(5-1/5)*5=24
3,3,8,8:8/(3-8/3)=24
此文所贴代码均为面向过程的C(++)代码,在VC6下编译通过。
第二种思路:
还是尽量避免处理括号,实在是很麻烦。有一种没有括号的表达式——逆波兰表达式(后缀表达式),逆波兰表达式严格地按照从左至右的顺序执行。因此,只需把所有的数字的排列组合与所有的符号的排列组合再进行排列组合即可遍历所有可能的表达式。在输出结果时,只需把逆波兰表达式按照规则还原成正常的表达式即可。
说明:'-'和'/'有两种情况,'a-b'用'a-b'表示,'b-a'用'a|b'表示,'a/b'用'a/b'表示,'b/a'用'a\b'表示,'\'是转义字符,要用'\\'表示。
程序代码如下...
此文所贴代码均为面向过程的C(++)代码,在VC6下编译通过。
第一种思路:
把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算。在求表达式的过程中,最难处理的就是对括号的处理,而这种思路很好的避免了对括号的处理。基于这种思路有两种算法:
第二种算法(此算法思想参考了CSDN(penguinMII)--企鹅的算法思想):
可以寻找所有表达式的规律,得出如下结论:把表达式看成一个函数F(A,B,C,D)=24,可分两种情况F=(((A,B),C),D)和F=((A,B),(C,D)),对其分别计算即可得到答案,算法过程如下:
1)先对第一个数和第二个数进行计算,并保存结果和表达式;
2)对上述结果与第三个数进行计算,并保存结果和表达式;
3)对上述结果与第四个个数进行计算,并保存结果和表达式;
4)判断结果,并输出结果;
5)对第三个数和第四个数进行计算,并保存结果和表达式;
6)对第一个数与第二个数的结果和第三个数与第四个数的结果进行计算,并保存结果和表达式;
7)判断结果,并输出结果;
在这种算法中需要对所有数据进行排列组合,对所有组合进行上述运算过程。
程序代码如下:
昨天晚上在寝室里觉得无聊,于是就玩这个24点游戏,上网搜了半天,就一个代码是正确的,而且只能给出一个解,于是只好自己写咯,参考了网上现有的一些算法^_^
先简单介绍一下24点游戏:
给出4个1-9之间的自然数,其中每个数字只能使用一次;任意使用 + - * / ( ) ,构造出一个表达式,使得最终结果为24,这就是常见的算24点的游戏。比如两道比较经典的题目:1,5,5,5和3,3,8,8,先自己试试,答案贴在文章最后^_^
此文所贴代码均为面向过程的C(++)代码,在VC6下编译通过。
解决这个问题一般使用穷举法,即穷举4个整数所有可能的表达式,然后对表达式求值。下面的两种思路(三种算法)均是基于穷举法,各有优劣。
第一种思路:
把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算。在求表达式的过程中,最难处理的就是对括号的处理,而这种思路很好的避免了对括号的处理。基于这种思路有两种算法...
Processed in 0.8750112 second(s) , unknow queries
Powered by OWord V0.1, Even Not Alpha
(此博客程序为半成品,请勿索取,以免给您的心灵造成创伤^_^)
鄂ICP备05026031号
2006-6
2006-6
用户中心
日志分类

最新日志
最新评论
统计信息






友情链接