招新赛出的一个竞争题
实现了一个比较完整的德州扑克游戏,只有选手和AI两个玩家,目标是赢完AI的所有筹码
源码比较长,大概900行,但大部分代码都是德州相关的业务逻辑,与题目漏洞无关,考虑到IDA起码是层次化的显示代码,进来就能看到最关键的main,比平铺900行c看起来要没那么吓人一些,下发了带调试符号的二进制
目录:
预期是用户先把程序跑起来,试着和AI玩玩,发现是个德州,没玩过的可以参考下面的规则:
如果是第一次运行,仔细看提示语会发现程序会告诉你没找到存档,从空状态开始
然后能发现当前目录下会生成savefile文件,下次再运行就会询问是否加载存档,为啥写这样一个功能呢?我们暂且不管
然后就会进入游戏,每轮都会显示目前场上双方的余额,以及对于你来说已知的牌信息,例如盲注轮你只知道你的手牌,而不知道任何公共牌(更多规则参考上面提过的链接)
然后会显示你和AI进行过的行动,最后是目前你能采取的行动,可以是 过牌、跟注、加注、盖牌 四种,根据规则无法采取的操作以 X 表示,并在后方括号中标明了原因
初始你有10块,AI有 10 * (2^20) 块,意味着即便你每局将资金翻倍,至少也要20局才能获胜。
同时,你是庄家,故AI是小盲,你是大盲,这也意味着你盲注轮起码需要下注 2倍的底注(虽然我们游戏并没有底注轮),且由于你永远是大盲,你每局游戏至少要下注 2 * 底注。
同时,我们会发现,第一句游戏时底注就已经是2了,且每局都会翻倍,这意味着我们后面每局至少要付出的基本筹码是倍增的,这会导致我们没法进行太多策略,因为即便盲注完就弃牌,仍然会丢失几乎所有资金。