上周,隔壁的程序猿小哥来求助:中秋节要跟女朋友回四川见家长了,从来没有打过麻将的他在听说“四川人命都可以不要,但必须要打麻将”后,整天担心会被老丈人、丈母娘嫌弃,脱发量也开始日益激增。
有什么方法能1秒教会程序员打麻将?公式拿好不谢。
也就是说,必须满足size%3 == 2的形式才算胡牌。你学会了吗?
光会背公式不行,得实践出真知。一心要讨老丈人欢心的小哥哥提出让我们陪练几晚,在他的声(chou)泪(bu)俱(yao)下(lian)的恳(wei)求(xie)下,愣是一局麻将战到天明,害得我第二天上班脑袋昏昏沉沉挨了不少骂。
熬夜,就困成了个皮皮,再来几次怕是要命丧当场,我果断跟小哥祭出了压箱底的游戏秘籍——同城游APP,在这里面玩四川麻将的时候还能听到地道的四川方言,玩法正宗,随时随地都能玩,再也不用找人熬夜苦练了。
事后小哥哥对打麻将的总结,也让我等凡人长了见识。
写代码时最核心的是数据结构,回到麻将游戏上就得设计一个“麻将结构”——麻将本身是一个集合,这个集合分为两大类:桌面上的麻将,人手上拿的13张麻将。
(1) 桌面上的麻将——它的,值是恒定的,只能被随机delete不能被add,为空后游戏结束。(这就是3个算法)
(2) 人们手上的麻将——它的值始终是恒定的,随机add,选定delete,每delete一次,同时被从桌面麻将上add一个进来。(这是4个算法)
说人话就是:打麻将时桌面上的麻将数只会少不会多,而手上的麻将数量是不变的。Emmm…这还得编个算法?
当拿到一副麻将时,第一步应该是“分解”,排除手里“缺一门”的牌之后,按照牌型分解成三个数组,然后按照上面的公式出牌就行了。
俗话说“打牌胡牌靠手气,对此说法要同意”,为了验证这句话的真实性,小哥专门写了个脚本,演算了一下四川麻将中出现天胡与地胡的概率。
结论就是:打四川麻将地胡的概率是320万分之一,至于天胡嘛,抽样4.8亿次没有出现一次天胡,所以还没算出来…
除了复杂的规则和捉摸不定的运气,打麻将时的另一难点就是猜牌,根据自己的牌和打出去的牌,以及对手的表情和行为,来推测对方手里会有什么牌,这不仅是对记忆力的考验,更是一场心理上的博弈。要想get猜牌技能,就得在牌桌上多累积点经验了。
除了四川麻将外,同城游APP里还有800多款热门游戏,小哥哥们快操练起来见家长啦!