二打一(斗地主)计算机博弈竞赛规则一、前言二打一,民间俗称斗地主,因玩法简单、娱乐性强已成为国内最受喜爱的牌类游戏之一。2013年正式成为国家体育总局认定的正式比赛项目之一。本规则是根据中国机器博弈专业委员会主办的全国大学生计算机博弈大赛的需要,参考人民体育出版社《中国二打一扑克竞赛规则》并结合JJ斗地主、百度百科、维基百科、联众游戏、腾讯游戏等网站文献编写完成。相关博弈平台和引擎示例程序将在比赛前在比赛官方网站()和哈尔滨理工大学计算中心实践与创新中心网站()发布,维护和更新,交流意见可发送邮件至amansoft@sohu.com。二、术语约定1、局(Round)一副牌(编码见附表1)包括发牌、叫牌、出牌、记分的博弈过程,称为一局。2、轮(Turn)三个参赛选手共坐一桌完成的若干局构成一轮。3、牌型玩家一次出牌的牌张组合(见附表2)。主要包括火箭、炸弹和普通牌型。4、春天与反春天地主所有牌出完,其它两家一张都未出,称为“春天”。其它两家中有一家先出完牌,地主只出过一手牌,“反春天”。三、一局牌的比赛过程一局牌需三个玩家(按方位西0、南1、东2区分)参与。过程包括发牌、叫牌、出牌和计分4步骤完成。通过叫牌,一个玩家成为地主(庄家),其余两个玩家作为农民(防守方)与地主对抗。以某一玩家率先出尽手中牌来结束牌局判定胜负,并计算本局小分。1、发牌一副牌54张,每个玩家发17张,剩余3张作为底牌,在地主未确定之前所有玩家不能看底牌,待地主确定后,亮出底牌并将其归于地主。2、叫牌每轮从西家(0)开始叫牌,并按出牌的顺序轮流进行,每人叫一次牌。叫牌时可以叫“1分”,“2分”,“3分”或“不叫(0)”。后叫牌者只能叫比前面叫过的分数都高或者不叫。如果有牌手叫分后,另外两人选择不叫或有牌手叫到“3分”则结束叫牌,叫牌结束后所叫分值最大的牌手确定为地主。如果三位牌手均选择不叫则视为完成一局,各家本局不得分。确定地主后,底牌亮出并发给地主。3、出牌每局由庄家先出,按逆时针顺序玩家依次出牌或过牌不出。后续跟牌者须按照同样牌型和张数进行跟牌,也可出炸弹或者火箭,后面的出牌必须大于前一手出牌。如果连续两家不出则最后出牌者可领出任意合法牌型。出牌大小的比较:对于单牌,自大到小的牌张分值次序为大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3。各花色之间无大小的区别。对于组合牌,除火箭及炸弹外,必须牌型与张数均相同时方可进行比较。其中对牌、三条、单顺、双顺、三顺以最大牌张比较大小;三带一、三顺带牌、四带二仅按其中三条、三顺、四条的牌张比较大小,与带牌大小无关。火箭大于炸弹,火箭及炸弹均大于其他牌型,炸弹之间按牌张大小进行比较。4、计分一局牌打完之后,双方小分计算方法如下:地主得分=2×胜负参数×100×底分×倍数农民得分=胜负参数×100×底分×倍数胜负参数:胜利方为1,失败方为-1;底分:叫牌时的1、2、3分;倍数:初始为1。本局打出过炸弹则倍数×(1+炸弹个数)。(为减少分数波动程度,避免运气因素影响高技术牌手发挥,因此不采用2n算法)打出火箭,倍数×2打出“春天”,倍数×2打出“反春天”,倍数×2四、协议使用示例下表示例为南方位选手与平台交互信息一例序号平台发送信息AI应答信息信息内容1DOUDIZHUVER1.0协议版本号2NAMEhrbust选手名称3INFO1,4,1,6,9,2100,15轮局信息4OKINFO应答轮局信息5DEALB0,4,5,7,9,10,17,21,25,33,34,39,41,43,44,45,46发牌信息(不换行)6OKDEAL应答发牌信息7BIDA1西方位叫牌转播8OKBID应答叫牌转播9BIDWHAT询问南方位叫牌10BIDB3应答叫牌询问11BIDC0东方位叫牌转播12OKBID应答叫牌转播13LEFTOVERB27,48,53底牌信息与交付14OKLEFTOVER应答底牌信息15PLAYWHAT询问出牌16PLAYB0,4,5,7应答出牌询问17PLAYC-1东方位出牌转播18OKPLAY应答出牌转播19PLAYA12,13,14,20西方位出牌转播20OKPLAY应答出牌转播21PLAYWHAT询问出牌............重复到一方出尽nGAMEOVERC赢家信息n+1OKGAMEOVER应答赢家信息例外信息:序号平台发送信息AI应答信息信息内容1ERRORA超时等错误2OKERROR应答超时等信息3五、协议指令解释注意:以下一条指令中如含多张牌编码,应按升序排列1、DOUDIZHUVERver裁判告知选手所采用的协议版本号,当前为1.0例如:DOUDIZHUVER1.02、NAMEplayer选手回复姓名。例如:NAMEhrbust3、INFOturnid,turncount,roundid,roundcount,upcount,maxscore,time裁判告知选手当前轮局信息turnid为当前轮序号turncount为总轮数,暂定4轮,视参赛选手人数可赛前调整roundid为当前局序号roundcount为每轮总局数,暂定6局,视参赛选手人数可赛前调整upcount为本轮可晋级到下一轮的选手数,视比赛进程可赛前调整maxscore为封顶分数,暂定2100,视参赛选手人数可赛前调整time为AI引擎应答时间限制,单位秒,暂定为15,视比赛进程可赛前调整例如:INFO1,4,1,6,9,2100,154、OKINFO选手应答轮局信息,无可变参数5、DEALdC1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17裁判告知选手方位和发牌编码d为A时表示选手为西方位,d为B时表示选手为南方位,d为C时表示选手为东方位Ci为发给选手的纸牌编码,参见附表1,各牌编码间用逗号分隔例如:DEALB0,4,5,7,9,10,17,21,25,33,34,39,41,43,44,45,466、OKDEAL选手应答发牌信息,无可变参数7、BIDdW裁判转发其它选手叫牌信息d为A时表示该选手为西,d为B时表示该选手为南,d为C时表示该选手为东W为0表示不叫,1表示1分,2表示2分,3表示3分例如:BIDA18、OKBID选手应答叫牌信息,无可变参数9、BIDWHAT裁判询问选手叫牌,无可变参数10、BIDdW选手应答叫牌询问d为A时表示该选手为西,d为B时表示该选手为南,d为C时表示该选手为东W为0表示不叫,1表示1分,2表示2分,3表示3分例如:BIDB311、LEFTOVERdC1,C2,C3裁判通知底牌信息,含地主方位和牌编码d为A时表示地主为西,d为B时表示地主为南,d为C时表示地主为东Ci为发给地主的底牌编码,参见附表1,各牌编码间用逗号分隔12、OKLEFTOVER选手应答底牌信息,无可变参数13、PLAYWHAT裁判询问选手出牌,无可变参数14、PLAYdC1,C2,...,Cn选手应答裁判出牌询问d为A时表示选手为西,d为B时表示选手为南,d为C时表示选手为东Ci为选手出牌编码,参见附表1,各牌编码间用逗号分隔如果C0为-1,表示弃权不出牌例如:PLAYB0,4,5,7或PLAYC-1如果d与引擎方位相同且C0为-1。表示判定引擎所在方位本次因无可出牌张自动PASS。15、PLAYdC1,C2,...,Cn裁判转发其它选手出牌信息,参数含义见上一指令。16、OKPLAY选手应答裁判出牌转发信息,无可变参数17、GAMEOVERd裁判告知本局最先出尽手中牌的赢家方位d为A表示赢家为西,d为B表示赢家为南,d为C表示赢家为东18、OKGAMEOVER选手应答裁判本局赢家信息,无可变参数19、ERRORd裁判转发选手异常错误信息,本局结束d为A表示异常选手为西,d为B表示异常选手为南,d为C表示异常选手为东20、OKERROR选手应答裁判异常错误信息,无可变参数提示:1、选手引擎程序可通过标准输入输出流(例如cin和cout)以行为单位接受和发送指令。2、指令和参数之间以一个空格分隔。3、竞赛平台可发出的指令类型为:DOUDIZHUVER、INFO、DEAL、BID、LEFTOVER、PLAY、GAMEOVER和ERROR,选手引擎程序可发出的指令类型为:NAME、BID、PLAY和OK。六、赛制1、预赛(瑞士移位积分赛)暂定初赛进行4轮,每轮6局,最后取前9名选手晋级决赛(轮数和局数可根据当年报名参赛队数赛前适度调整)。每局采用同场牌(每张桌打相同的牌)。赛前按种子选手优先及抽签方法确定第一轮选手桌号和方位,之后各轮按积分采用瑞士编排座位。初赛场分方案:每轮小分封顶值为350*局数,底线值为-350*局数。每轮结束后,选手按当前所在方向名次获得初赛场分,各方向积分最低者,得1场分,各方向积分每前进1名加1场分,如果其小分低于底线分数再减1场分,如果其小分高于封顶分数再加1场分。如果多人小分相同时,则他们均分其应得的场分。小分高于封顶值时按封顶值记录,其他情况按实际积分记录。晋级与淘汰:第2轮比赛结束后取前18名进入下一轮第3轮比赛结束后取前12名进入下一轮第4轮比赛结束后取前9名进入决赛场积分均值:总队数除以6取整+1,例如21个队,该值为INT(21/6)+1=4轮空处理:首轮轮空选手由抽签决定,之后各方向名次最后者抽签决定轮空,但每名选手在全部赛事中只轮空一次。轮空者获得场分均值+1,6副牌时小分得2100。迟到处理:选手5分钟内不能到场或开局,本轮按弃权处理,扣弃权者2倍场分均值,另外两家各得场分均值。小分按本场局数*350计。2、决赛决赛采用复式循环赛赛制(决赛9人以下,含9人):带分规则:初赛(瑞士移位赛)晋级名单第1名带5.6比赛分,之后每个名次少带0.7比赛分,第8名带0.7比赛分,第9名无带分。进行4轮,每轮6局,按积分排定名次。(轮数和局数也可能根据进程,赛前调节)座位编排:采用固定编排,每名选手与其他8名对手相都遇于一次,按预赛瑞士积分赛的名次入座。积分计算:每桌打相同的牌,每副牌的三个结果中,同方向得分最高的选手获得4比赛分,居中者获得2比赛分,最低者获得0比赛分。得分相同者分享其应得的比赛分。轮空处理:轮空者在轮空牌副得到2.5比赛分。迟到处理:选手5分钟内不能到场或开局,本轮按弃权处理,扣弃权者6场分,另外两家各得3分。3、名次排定及平分处理预赛(瑞士移位积分赛):排定名次时先比较总场分,再比较总小分。小分仍相同者按抽签决定名次。决赛(复式循环赛):排定名次时先比较总场分,如总场分相同以瑞士移位赛的名次为准。七、竞赛行为准则和处罚方法1、参赛程序必须按照协议与组委会提供的统一平台系统进行通信,不得通过平台以外途径获取信息。2、一轮比赛进程中不能更换对手、程序、参数;各轮之间可以更换对手、程序、参数。3、因该项目同时含有合作和对抗性质,为保障竞赛公平性,每校只能有一只队伍参赛。参赛队必须确保操作员按比赛指定位置及时到位开始比赛,任何场次迟到或超时,按相应规则处罚。4、超时处理因为比赛进程比较紧凑,需要各桌选手严格按照比赛进程完成各轮比赛。选手及引擎与平台单次交互时间应在15秒钟内,如果超过时限,按超时错误处理,本局进程到此结束,计分规则为:(1)如果在底牌分发前产生超时,由超时方支付相应另外两个玩家每人350分(即封顶分除以局数)。(2)如果在底牌分发后产生超时,按底牌归属后各玩家组成的炸弹总数计算炸弹数(不含春天和反春天),如果地主超时,则支付另外两个玩家每人(炸弹总数+1)*叫牌分*100,如果含火箭则再乘2;如果农民超时,则支付另一农民(炸弹总数+1)*叫牌分*100,如果含火箭则再乘2,支付地主为另一农民分数的双倍。八、附表附表1牌编码(大王点数大于小王点数)编码花色点数编码花色点数编码花色点数编码花色点数0♥31♦32♠33♣34♥45♦46♠47♣48♥59♦510♠511♣512♥613♦614♠615♣616♥71