双升的双升游戏规则则

双升游戏规则_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
双升游戏规则
上传于||文档简介
&&双​升​游​戏​规​则
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢当前位置:>>
佳作,公认的佳作!
应用宝是全面、专业的应用市场,将为您安装PP手机助手,启动高速引擎,安全无毒、极速下载应用!
&双升介绍双升是一款非常有趣的棋牌类游戏,这款游戏在民间流传非常广泛,玩法有趣,可以四人同时游戏,下面带来双升手机版下载,快来体验下吧!
双升,又名拖拉机、80分、双扣。本游戏为单机版本,支持安卓系统。
&双升游戏规则
(1)庄家和闲家:每一局牌都有一方担任庄家。*局的庄家由抢先亮主的玩家担任。庄家与其对家组成一方。其余两家组成一方,称闲家(抓分方)。
(2)底牌:发牌时,剩余8张牌做为底牌。庄家取走底牌,并扣下自己不需要的8张牌作为底牌。
(3)分牌:5、10和K是分牌,5代表5分,10和K代表10分。
(4)抠底:如果*后一轮牌由闲家获胜,称为扣底。底牌中的分数按照如下规则加成。*后一轮中含拖拉机,底牌分数乘8;*后一轮中含对牌,底牌分数乘4;否则,底牌分数乘2。底分加成后和本局闲家抓到的分数合并成为闲家的*终得分。...
你可能感兴趣的游戏
1体育竞技安卓2射击枪战安卓3射击枪战安卓4休闲益智安卓5角色扮演安卓6角色扮演安卓7射击枪战安卓8模拟经营安卓9赛车空战安卓10射击枪战安卓
扫描二维码添加微信公众账号,关注游戏吧手游,超值礼包免费拿!快来扫一扫,打开微信,扫描关注,赢取每月粉丝奖。
浙ICP备号-3 Copyright 2013 游戏吧手机游戏下载基地
我们致力于为您提供更多好玩的单机游戏下载大全中文版下载
游戏吧手机游戏下载基地温馨提示:适度游戏娱乐,沉迷游戏伤身,合理安排时间,享受健康生活问卷正在加载中,请稍候...
如果由于网络原因导致此框一直不消失,请重新刷新页面!
此问卷处于停止状态,仅供浏览,请勿填写!
请认真填写该问卷,之后我们将从参与者中选取幸运玩家,奖励VIP会员一个月。
您的游戏ID(我们将根据您的ID进行发奖)&*提示:您的性别?&*男女您的年龄?&*15岁以下16~2526~3536~4545以上您玩双升多久了?&*没玩过1年以下1~2年2年以上您是如何知道我们双升游戏的?&*百度搜索朋友推荐电视其他 您觉得双升的游戏界面如何?&*很漂亮不错一般很糟糕如果让您来选择双升每局开始时的限制,您更喜欢哪一种?&*游戏强制入桌限制,如必须打5局或必须打18局等等第一个入桌玩家设置本桌限制无所谓如果我们做双升分享活动,您希望通过以哪种方式告诉你的朋友们?&*&[多选题]微信微博QQ空间QQ群其他 您希望哪种奖励作为双升分享活动的奖励?&*&[多选题]金蛋奖券双倍积分卡负分清零VIP如果可以在网页上看到看到精彩复盘重播, 你会对哪个敢兴趣?&*每周前10精彩复盘可以保存自己的精彩复盘, 分享给朋友其他(自己填写) 平台双升你是希望玩有信号的还是无信号的?&*有信号无信号都可以看到豫游双升的广告,那些会吸引你注册?&*&[多选题]新手注册奖励游戏界面线上活动多丰富的玩法本身想玩在今后的双升新版本中,您最希望在哪些方面得到优化?&*&[多选题]逃跑补偿禁止踢人界面任务系统新手引导您希望玩到的双升是怎样的?
大家对双升的建议或者对游戏中存在问题的一些意见,可以在这里写下来告诉我们局域网内双升游戏的设计(3)
& & & & 当每个玩家都准备完毕后,那么第一步就是要发牌。需要做到一个完全随机的发牌,就要保证每张牌发到每个玩家手里的概率都是一样的,而且牌的顺序是等概率随机打乱的。程序中采用的是如下的发牌算法(感谢Dr.Light提供):
& & & & 假如有两幅牌,编号从1到108,首先随机选出一个,并且将牌发给玩家,然后将这个编号的牌与108号牌交换编号,那么剩下的牌就是从1到107号。于是再从中选出一个,重复以上的过程,这样一来,算法的复杂度就是O(n)。
在升级中,牌只有三种形式,一种是拖拉机,一种是单张(对子其实就只是长度为1的拖拉机),另一种就是甩牌时两种牌的混合。在程序中,将牌的类型抽象为三个类,如下图所示:(CCardFactory只是创建牌用的,不是具体的牌类型)
图 1. &&&&&&&&&&&&牌的类结构图
& & & & 里面的几个虚函数主要解决了以下几个问题:
& & & & ?&&&&&&&&牌对象的创建。
& & & & ?&&&&&&&&两手牌比大小。
& & & & ?&&&&&&&&甩牌时判断是否能够甩,即:保证甩出来的各个牌对象在其他玩家中,都是最大的。
& & & & ?&&&&&&&&先出拖拉机(对子)时,对方出牌时必须从最长的拖拉机开始出,通俗点的意思就是有对子必须先出对子。在后面的讨论中,我们将其称为出的牌是否饱满。
& & & & 在研究牌的算法前,首先要将牌按照当前的主的类型和数字来排列好。为了计算的方便,将牌散列到一个大小为52(常主是一样大)的哈希表中,这样,从中找出拖拉机就相对方便些。
图 2. &&&&&&&&&&&&散列后牌的分布
& & & & 假如方片为主,那么哈希表中每一部分对应的牌的类型就如上图所示,其中,常主和方块同属于主,(图中黄色标记)。这样一来,2244(3为主)就很容易被识别为拖拉机。方块AA黑桃33(3为主)也是连在一起的,也很容易被识别为拖拉机,同时,主的大小比其他的牌都大,这在杀的判断过程中也是有用的。另外,还需要一个判断的方法,即:一堆牌中是否都是属于同一个类型的牌(哈希表中是否为同一个颜色),如果不同类型,那么就不用判断。
& & & & 在打常主(亮大王)的时候,会有一些区别(4个常主一样大),这些小区别这里不赘述。
& & & & 接下来就是具体的算法。
牌对象的创建
& & & & 在每一轮出牌的过程中,只保存一个牌的对象,就是当前这轮中,最大的一手牌,保存在m_pCurrentCards中。下一个人出的牌,都由m_pCurrentCards来创建,通过虚函数createCards来实现,这样的好处是可以将不同类型的创建规则分散到不同的类中去。
& & & & 举例说明:如果当前第一个人出了一个3344的拖拉机,而第二个人出了4个单张,此时由m_pCurrentCards(保存着3344的CPairCards对象)来创建一个新的牌,于是就按照CPairCards的规则来创建一个牌对象,返回一个NULL,那么说明第二个人没有大过第一个人的牌,就可以忽略他。如果第三个人出了个5566拖拉机,此时由m_pCurrentCards的对象(保存着3344的CPairCards对象)来创建一个新的牌,就是保存着5566的CPardCard的对象,大过了第一个人出的牌,于是将此时m_pCurrentCards给替换为保存着5566的CPardCard对象。
& & & & 首先按照上一节所说的方法将玩家打的牌散列到哈希表中。然后调用m_pCurrentCards的createCards函数创建新牌。单张牌和拖拉机(对子)的创建比较简单,就不做说明,主要说下甩牌时CBlendCards的创建。在介绍具体创建过程之前,先介绍一下程序中定义的一个动作:strip。
& & & & 从字面上看,就是剥离。假设第一个出牌的人出了一个对子和一个单张,那么CBlendCards对象中分别有一个CSingleCard和CPairCards对象。那么,就要依次从后面人出的牌中,剥离出一个单张和一个对子,即:创建一个CSingleCard和CPairCards对象,并且从哈希表中删除对应的计数(在操作中,要考虑是否类型匹配)。下面将用图的形式说明:
图 3. &&&&&&&&&&&&散列后的黑桃AKK
& & & & 如上图所示:假如某人先甩了黑桃的AKK,那么将牌散列到哈希表中后就如上图所示(省略其他部分)。此时由CCardFactory来创建牌,首先用一个CPairCards的对象对其做strip操作,操作后等于将其中的一个对子给剥离出来,并创建一个CPairCards对象:
图 4. &&&&&&&&&&&&剥离出一个对子后
& & & & 同理,再剥离出后,最后生成一个CPairCards对象和一个CSingleCard对象。两者组合成一个CBlendCards对象。
图 5. &&&&&&&&&&&&最后生成的牌对象
& & & & 此时如果第二个玩家出了红桃AKK(假设红桃为主),那就是杀了这一对。此时由于不是第一手牌,那么就会由当前最大的牌来创建新的牌。也就是刚生成的CBlendCards对象。生成的过程也是使用strip操作,先用CPairCards对象对其strip,生成一个新的对子对象:
图 6. &&&&&&&&&&&&使用CBlendCards对象生成新对象
& & & & 同理,在使用CSingleCard对其strip后,就生成了一个新的CBlendCards对象,其中包含一个CPairCard和一个CSingleCard:
图 7. &&&&&&&&&&&&根据第二个人出的牌生成的结果
& & & & 有了strip操作,那么创建CBlendCards的步骤就是针对它拥有的CSingleCard和CPairCards对象,依次调用strip操作,如果每个都能正常strip,那么就将生产的牌对象组成一个CBlendCards对象,就生成了新出的牌对象。strip操作在后续还会使用到。
& & & & 如果是第一手出牌的话,当前没有最大的牌,就由CCardFactory来创建。CCardFactory虽然也是CShengjiCardBase的子类,但是它并不代表具体的牌。只是根据第一个玩家打过来的牌的集合来创建出一个牌的对象。它内部分别有一个CSingleCard、CPairCards和CBlendCards对象,每次新建的时候使用默认的这几个对象来创建。如果三个对象都创建不了,说明出牌错误。一轮出牌结束后,统计完分数,就将当前最大的牌删除,并且使用CCardFactory对象替换m_pCurrentCards中原有的牌。
两手牌比大小
& & & & 每个玩家出牌后,就需要判断出来的牌的大小。现在就体现出前面保存最大牌的好处了。每次只要将新出的牌与最大的牌比大小就可以了。而具体的比大小的工作在每种牌各自的重载函数largerThan中做即可。
& & & & 拖拉机(对子)和单张的牌比较好比。主要说明一下甩牌CBlendCard的大小比较机制。在升级规则中如果甩牌的话,所以的牌都必须是其他人中最大的,否则不能出。那么,在甩牌后,如果想比出牌人更大的话,就必须要用主来杀。在我们程序中,保证最大这个是由出牌的时候的机制来保证,而比大小的时候,只要依次判断每个牌是否都大即可,如果新出的牌中,某一部分牌不大,就说明新出的牌没有大过m_pCurrentCards。
甩牌时判断是否能够甩
& & & & 在第一手出牌时,还需要判断当前的牌是否能出的出去:甩牌时每一部分的牌都需要比别人手中同花色最大的牌还要大。虚函数getIllegalCards实现了这个功能。它能获取一堆牌中,比其他人手中的牌小的那部分牌。
& & & & 判断的逻辑主要用到了前面说到的strip操作。当甩牌后,会由CCardFactory创建一个CBlendCards对象,其中有若干个CSingleCard和CPairCards对象。此时,将其他玩家的手牌散列到哈希表中,然后依次调用CBlendCards中各个牌对象的stripCards方法,剥离出对应的牌对象。如果某一次剥离出的牌对象比当前CBlendCards中的对象大,说明甩牌失败,需要强制出小。
出牌是否饱满
& & & & 根据前面的问题说明,先出拖拉机(对子)时,对方出牌时必须从最长的拖拉机开始出,通俗点的意思就是有对子必须先出对子。在后面的讨论中,我们将其称为出的牌是否饱满。
& & & & 拿一个简单的例子作为说明:
图 8. &&&&&&&&&&&&出牌饱满性示意图
& & & & 假设玩家1先出了一个拖拉机,玩家2手中有776543的牌,按照规则,应该将一对7给出出去,但是玩家2却没有将对7打出,所以应该要能够识别出这种错误状态。
& & & & 首先,玩家1打出拖拉机后,会生成一个CPairCards的对象,长度为2,接着用这个CPairCards对象对玩家2的手牌和玩家2打出的牌分别提取其中一个最饱满的牌。何为最饱满的牌?如上图所示,如果出了一个拖拉机后,饱满长度按照以下排列:长度为2的拖拉机>对子>单张。提取方法就是前面所说的strip,但是要strip直到生成牌的个数相等。
& & & & 举例说明,按照玩家1打出的牌,生成一个CPairCards牌对象后,这个对象的长度为2,那么从2开始,先用一个2的CPairCards对象strip手牌,结果得到是空,因为玩家我2手中没有拖拉机,然后依次递减,用长度为1的CPairCards对象来strip手牌,得到一个长度为1的CPairCards对象(对7)。但是到现在还不能结束,要等到生成的对象的牌个数等于4张(AAKK)的时候才能结束。于是继续strip长度为1的CPairCards,返回为空,因为剥离出一个对7后只有单张牌。那么就换CSingleCard对象继续做以上的操作,直到strip出两个CSingleCard对象后才算结束。此时,strip出的对象牌数加起来是4(CPairCards和两个CSingleCard对象)。操作结束。
& & & & 同理,用手牌生成的长度为2的CPairCards对象对玩家2打出的牌做同样操作,得到4个CSingleCard对象。
& & & & 最后,通过饱满度从大到小比较得到的两组对象,比较后发现,从手牌中得到的一组对象中,对7对应的CPairCards对象的饱满度大于从打出的牌中得到的CSingleCard对象。所以出牌错误。
总结(出牌说明)
& & & & 下面两个流程图分别给出了第一手牌和非第一手牌时,服务器收到出牌消息后的处理:
图 9. &&&&&&&&&&&&第一手牌的处理
图 10. &&&&&&&&非第一手牌的处理
& & & &&& 参考代码+编译后的程序:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4942次
排名:千里之外}

我要回帖

更多关于 双升比赛规则 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信