智游城

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6278|回复: 17
打印 上一主题 下一主题

作为程序员你会怎么设计扑克服务器端程序?

  [复制链接]
跳转到指定楼层
1#
omylove 发表于 2011-2-13 03:15:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
看到关于扑克室的讨论。我也来说说服务器处理的东西。虽然没多大意义。。

首先我们假设服务器端程序是公平公正的。

洗牌过程
   策略一: 跟现场一样先定好所有牌的顺序,随机生成52张牌的全部顺序。比如数组C[0]..C[51],然后依次发给每个玩家。
   策略二: 不洗牌,比如把牌按顺序放在一个数组C[0]..C[51],然后要给某个玩家发牌时生成随机数(0..51)并且判断这张牌没发出去的话,发给此用户。
   似乎没有三了。

同理的公共牌根据洗牌策略1或者2发牌。

那么我们要讨论的问题来了。其实无论哪种策略,从程序的角度来讲,洗牌发牌过程一定需要使用到随机数生成,任意时间点产生的随机数都是不一样的(当然我们的范围只有52个),那么是不是可以认为每一次执行一个操作所使用的时间都会影响到下一张牌(策略二)或者下一手牌(策略一)的出现。

假设以上内容都是成立的,那么有意义么?似乎是没有意义的,因为我们无法得知哪个时间点产生的随机数对我们是有利的,哪个是有害的。而且即使万一你知道了那么由于网络延迟、主机负载等原因你也无法一点能点到那个时间点。


那么我到底想说什么呢?

1.我知道这里也挺多搞计算机的高手,如果是你设计一个network的服务器端你会如何设计呢?

2.因果报应啊。那么你所有遇到的BB都和你自己有关的。因为你上一手牌或者上一张牌的某个动作(call,r,f,b)所使用的时间导致了,当前这张牌的出现。那么是否可以在你特别倒霉的时候多等上几毫秒再行动呢?或者会影响下一手你不是那么倒霉呢?哈哈。说笑的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏
18#
enenppl 发表于 2011-2-24 10:25:10 | 只看该作者
這個問題我也有想過,
總之,遇到BB,都覺得自己點得太快. haha
17#
kaimilove 发表于 2011-2-24 03:00:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
16#
独孤飘云 发表于 2011-2-23 02:07:56 | 只看该作者
复杂啊,留着慢慢研究。
15#
wl23th 发表于 2011-2-17 23:15:15 | 只看该作者
呵呵   存技术贴啊
14#
foolishdaily 发表于 2011-2-16 08:59:44 | 只看该作者
12楼说的对,计算机不可能存在真正的随机,关键是扑克室用的服务器太强大了,你要是想算出来他的发牌顺序或者概率,要有比那个更强大或者至少一样强大的PC服务器才能做到,有这个钱数的,没必要去打牌了。
13#
colin 发表于 2011-2-15 05:07:06 | 只看该作者
不懂软件,太复杂了。
12#
flyinglion 发表于 2011-2-15 01:39:55 | 只看该作者
本帖最后由 flyinglion 于 2011-2-15 01:44 编辑

计算机不可能产生真正的随机数,给的种子一定,随机数也是一定的。
如果随机数是取自系统时钟,那要是我们知道程序,就知道了当前的种子取值为多少,代入的话就可以算出某年某月某分某手牌是什么了。所以他们必须有很多个种子,造成看似随机的效果,其实也不过是计算的复杂性多了一点而已。
又或许随机数取自按键延迟,比如大家考虑多少时间,以及网络的延时,那样的话,你的动作就会影响到下一张牌了。

不过这没有意义,就算知道他们程序是怎么写的,种子取自哪里,也没有他们的服务器啊。诶,不过这么说来,或许因果报应有理?如果特别倒霉,那故意改变一下下注的时间或许有效?不过也有可能更倒霉啊……
11#
dolphin 发表于 2011-2-14 22:59:53 | 只看该作者
没什么意思,就是说有几个系统生成随机数,这几个随机数再合起来产生一张随机牌。这种重复性保证了即使几个系统失败了,那么产生出的牌仍然是随机的。
10#
52magic 发表于 2011-2-14 21:58:56 | 只看该作者
FTP解释其发牌机制 谁来解释下吧
The card shuffles at Full Tilt Poker are better than any physical deck of cards. Our software uses advanced shuffle algorithms to ensure that every possible ordering of cards can be reached, and is as equally likely as any other. This is not achieved in real deck shuffles and it ensures that our players are guaranteed a completely random deal every time.

The server randomizes the deck by using several different core systems which each generate a random number. These randomized numbers are then combined to generate a random card. This redundancy ensures that even if several core systems failed or were compromised in some way, the output would still be random. This means that any card dealt on our system is always guaranteed to be random and completely unpredictable.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|智游城论坛

GMT+8, 2024-5-9 19:01 , Processed in 0.046411 second(s), 9 queries , Redis On.

Powered by Discuz! X3.2

© 2001-2012 Comsenz Inc.

返回顶部