扑克游戏

2024-07-26

扑克游戏(通用5篇)

扑克游戏 篇1

随着云计算技术的落地和移动网络带宽的提高,移动互联网迎来了一个高速发展的新时代.借助云端强大的数据计算、存储、挖掘和整合能力,整个移动互联网的格局正发生翻天覆地的变化,移动终端将不仅仅作为一个通讯工具。而且会变成强大的云计算的终端之一。手机不再是打电话的代名词,拍照,广播,手机游戏等各种功能已经把这个小小的机器武装的十分完美。

如今手机操作系统的竞争已呈白热化,以iphone,andriod等为代表的新一代智能手机正吞噬着传统手机市场的份额。这时Windows Phone操作系统应时而生。该系统采用与安卓,苹果手机完全不同的Metro UI,并且最新的Windows Phone 8操作系统与Windows 8共享内核,因此可以和Windows 8共享核心代码,这意味着手机用户可使用更多的设备和应用。

1 系统意义

与传统的纸牌相比,手机版的游戏有很多优势。第一、不用为到处找牌友而烦恼;只需轻轻一点,打开游戏便可以随心所欲的玩游戏了,想什么时候退出便可以退出。第二、保护环境;因为制造纸牌需要以树木为原料,所以会造成大量砍伐树木来造纸牌。很多人经常打完牌之后就把牌扔了,下次打的时候再买。这样也造成了一定的浪费。第三、使用更方便,不用烦恼于当想玩扑克牌的时候而身边又没有扑克牌。

2 系统功能

该系统包含打牌功能打牌功能,提示功能,pass功能,更改除主玩家外其他玩家的背景功能,恢复默认背景功能,计时功能等。计时功能是系统自动运行,无需玩家参与。这些功能都需要玩家打开游戏并按下开始按钮才可用。如图1所示。

3 模块设计

该游戏设计有三大类,包括Base Enum类,Judgment类,Player类。Judgment类,Player类继承于Base Enum类。Main Page是系统的主类,通过它来调用其他类,所以主类和其他类存在关联关系,List Head是结构体,被Player类调用。Player类是玩家类,主要的作用是充当一个玩家,所以它具有智能打牌、删除牌方法、比较牌大小、将牌排列好等方法,Judgment类在整个游戏中充当一个裁判的作用,主要负责发牌、获取各玩家的牌数、判断游戏是否结束等功能Base Enum类是锄大地游戏规则中可以出牌的牌数和五张牌的类型。

4 详细设计

4.1 发牌功能

发牌功能是将52张牌洗乱,然后将牌分发到各个玩家中,每个玩家得到的牌都是无规则的,大概思想就是没发一张牌就把这张牌从数组中删掉。发完为止

4.2 智能出牌流程图

智能出牌流程图如图2和3所示。

这里列举了智能出牌的模块4,如图3所示。

4.3 智能提示功能

智能提示功能类似总体上类似与智能出牌功能,不过智能提示还是有他不同的一些特点,智能出牌是选择合适的牌出牌,而智能提示是选择能打得上的牌,比如当主家的上一玩家出一张,按下智能提示后,算法会在主家中找出一张能打得上的牌。如果上一玩家打得是一对,算法会找出一对能打得上的一对。当按下一次提示功能后,找出了能打得上上一玩家的牌后,继续按提示功能,算法会在主玩家的牌中寻找下一个能打得上的牌。如果主玩家中没有一个牌比上一玩家大,则会自动pass。提示功能类似与腾讯的斗地主游戏。

4.4 智能打牌功能

打牌功能主要主要是判断出的牌是否符合规则,若出牌不符合规则,则提示错误。若正确则继续打牌。

4.5 系统特色功能

更改对手背景功能是一个较为创新的功能,也符合Windows Phone"以人为本"的界面特点,你可以把其他玩家的牌的背景设为你想要的背景,只要点击更改背景按钮,就会跳到照相的窗口,然后可以把照的照片作为其他玩家的背景

5 系统的实施与测试

5.1 系统测试的重要性

软件测试的他的目的就是确保软件的质量、确认软件以正确的方式做了你所期望的事情,所以他的工作主要是发现软件的错误。软件测试在整个软件开发的过程中的至关重要的决定性,也许最简单的输入的错误使数十年的心血毁于一旦。

5.2 系统测试

系统测试分为,一张牌,两张牌,三张牌和五张牌的测试,下面已五张牌的测试为例子,五张牌分为顺子、花、俘虏、金刚。它们的由小到大的顺序为顺子、花、金刚。比如如果其他玩家出俘虏,主玩家不出、出牌的牌数不为5或者出比前一玩家出的俘虏要小的牌,则提示出牌错误。否则通过。具体见图4。

6 结束语

本系统面向社会大众,游戏操作简单,界面友好,具有一定的娱乐性,可以作为工作之余,空隙之中作为一种休闲娱乐的作用。此游戏还有很大的提升,可移植性较强,有一定的应用推广价值。通过做这个系统,让自己在专业水平有很大的提高,而且更多的是学到了做事有耐心,有恒心,培养了独立克服困难的能力。同时非常感谢张浩明老师给我的鼓励和技术支持。

参考文献

[1]Charles Petzold.Programming Windows Phone7Microsoft Silverlight Edition[M].林永坚,姜泳涛,李鹏,译.北京:人民邮电出版社出版社,2010.

[2]Christian Nagel,Bill evjen,Jay Grynn.Professional C#4and.NET4[M].李铭,译.北京:清华大学出版社出版社,2012.

[3]Karli Watson,Christian Nagel.Beginning Visual C#2010[M].齐立波,译.北京:清华大学出版社出版社,2010.

扑克游戏 篇2

这本小说主要讲的是:一个学期开始了,学生们期待他们新老师是年轻、帅气而充满活动力的,但等来的却是一位身材很胖,肚子圆滚滚、头发银白像一大捆木柴堆在教室门口的“老头”,孩子们当时的心情是非常、特别、极其失望的。新老师却假装没有看到孩子们失望,也没有先介绍自己的名字或者用其他方式跟他们打招呼,而是很简单地说了一句“我有一份礼物送给你们”,这份礼物就是给每位同学一副扑克牌,一副上面写着“一张牌可以逃学一次、一张可以不带作业、一张牌可以上课睡觉、一张牌可以在上课吃东西、一张牌可以发出噪音、一张牌可以说一次谎……”的扑克牌,这就是新老师给他们带来的“扑克游戏”。在同学们读完这些扑克牌文字,心情变得又兴奋又惊讶的时候,新老师才说出他的名称:乌伯特·盛旦。

当我读到小说的以上内容的时候,好像自己也是里面的学生一样,心情激动了起来,也好想要一幅像拥有各种“免死金牌”一样的扑克牌,非常好奇小说里面学生门会怎么样使用这些扑克牌,先使用哪一张呢?是把它们全部都用完,还是都不舍得用存起来呢,我猜不管怎么样,盛旦老师肯定是喜欢那些没有使用扑克牌的学生吧。但小说的结局完全出乎我的意料,盛旦老师说:“我给你们扑克牌就是为了让你们能用上它!”原来我们从出生的那天起,我们就拥有了生活这副扑克牌,那些全部都是让我们学会怎么样生活的扑克牌,比如“会走路的扑克牌”、“变得开心的扑克牌”、“可以大哭的的扑克牌”、“学会爱的的扑克牌”等等。看完了《扑克游戏》这本小说,我终于明白了:我们不但要学习,更要体验生活、感受生活、学会独立、学会开心、学会面对、学会接爱生活赋予我们的一切。有时候,简单的生活反而让人感到无穷的乐趣。

扑克游戏中的数学 篇3

洗牌有抽洗法,也叫印度洗牌法,抽洗是粗略地打乱上下重叠关系:还有混洗,也叫交叉洗、对洗或弹洗;另外还有一种里夫洗牌法,但洗牌效果与混洗差不多,只是握持手法有不同。

有两位曾出入赌场的数学家留意过洗牌过程中的数学原理。他们发现,混洗7次就可以完全洗转,也就是洗净度可达到99.99%。这两位数学家就是美国哈佛大学的岱科尼斯和哥伦比亚大学的贝尔。他们长期观察玩牌时人们的洗牌方式,最后发现一种有效洗牌方式,即弹洗——将牌分成两半,然后交互切入的洗牌法——如果继续洗到第七次,递增数列可达26组,这副牌几乎就看不出原来的顺序了,也就是说一副扑克牌弹洗七次就洗“干净”了。

后来,英国牛津大学的数值分析教授特里费顿和他的父亲,一名机械工程教授一道分析研究了许多副牌,根据他们的研究报告,一副按顺序排列未被洗过的牌中,总共包含了225.58 bits(比特,二进制数系统中的单位)的资讯,这些资讯将会在洗牌过程中逐渐被洗掉。

特里费顿父子利用电脑程式来弹洗这些牌,发现第一次弹洗后,牌里剩173.58 bits的资讯:第二次弹洗后剩121.58 bits的资讯。如果只想要让牌混乱化,其实只要弹洗五六次就够了。弹洗六次后,这副牌就洗掉99%的资讯了(如下表)。

洗牌不可能花很多时间,很少有人有耐心混洗7次。大多是仅抽洗几次,混洗一次,就开始发牌。其实打完一盘,收起来的牌,次序本来就是很混乱无序的。

那么洗牌、发牌,究竟谁轻谁重?我们先看看发牌的组合的可能性。扑克是54张,每张不重样,某张牌到手的概率是1/54。扑克牌的玩法,各地有许多种,因而有不同的发牌模式。

先说现在全国很流行“斗地主”,这是3个人打,要用到大小鬼,留底3张,每人发17张,能发出的组合数为:

C1754×C1737×C1720=854 990 375 116 200 574 569318 000 000(30位数)。

再说“打千分”,这是4个人打,不用大、小鬼,留底4张,每人发12张,能发出的组合数为:

C1252×C1240×C1228×C1216=63 839473 138 338 558 845 060 855160 000(32位数)。 “拱猪”这种玩法不用鬼,不留底,全发完,还有桥牌也是这样发牌的。52张发给4个人,能发出的组合数为:

C1352×C1339×C1326×C1313=53 644737 765 488 792 839 237 440000(29位数)

至于其他玩法的发牌模式,分别有不同的组合,有兴趣的牌友可以算一算。

从以上几种玩法可看出,发出牌的组合样本空间是极其巨大的,达29~32位数,只能用电脑的计算器才能完成计算。这天文数字般的组合样本空间,说明它具备的随机性极强。我们常说彩票中的特等奖、一等奖是小概率事件。如江苏风彩(35选7)中一等奖的概率是1/6724520,浙江风彩(34选7)中一等奖的概率是1/5379616,北京体彩(36选7)中特等奖的概率是1/8347680等等。可以看出,无论是香港的六合彩,还是内地的形形色色的彩票,其能产生的组合样本空间,比扑克的组合样本不知要小多少倍。

有这些数学上的知识,在牌友们玩牌时就会明白洗牌主要是心理上的、习惯上的需要,而不是洗得越彻底越好。洗牌的目的是增加随机性、增加不确定性。由于发出牌的组合是极大的天文数字,每一种出现的概率是极小的,它所具有的随机性也是极大的。只要动一动重叠的牌,如任意切一下,或随便洗一下,发出的牌就会完全不同。4位牌友要拿到一副一模一样的原来打过的牌,是他们一辈子也碰不到的事。

扑克游戏 篇4

Texas Hold’em poker,全称德克萨斯扑克,中文简称为德州扑克,是一款源自德克萨斯的棋牌游戏。由于它易学难精的特点,备受各地棋牌爱好者瞩目,在过去30年间流传甚广,而在中国则刚刚起步。

德州扑克玩法简单,很适合作为大众人群消遣娱乐。近年来,移动互联网的迅猛发展,智能手机快速普及,移动平台特别适合休闲娱乐类棋牌游戏。

本文设计了一款以Client/Server模式进行的德州扑克游戏。

1 游戏内容及核心功能

1.1 游戏内容

德州扑克是一种每局至少两人最多22人的竞技类扑克牌游戏,不过,通常由2~10人组成一局游戏。每场游戏所用的牌组共有52张牌,其中不包括小丑牌。游戏分为5轮:

(1)发牌圈。小盲位玩家和大盲位玩家下注,在场的玩家由荷官每位派发两张牌,游戏按顺时针方向进行,在大盲位玩家后的首位玩家选择跟注、加注或者放弃,以此类推,最后再由大盲位玩家决定。

(2)翻牌圈。荷官首先一次发出3张公共牌,牌面大家都可看见,然后小盲位玩家开始(若小盲位玩家放弃,则由紧随小盲位玩家的下一位玩家开始)作决定,游戏顺序依然是顺时针。

(3)转牌圈。荷官派发第4张公共牌,依然按照顺时针方向,由小盲位玩家开始。

(4)河牌圈。荷官派发第5张公共牌,依然按照顺时针方向,由小盲位玩家开始。

(5)比牌圈。场上未弃牌的所有玩家亮牌,手上的底牌与台面上5张公共牌组成的牌组,牌型最大者赢得台面上下注的所有筹码。

1.2 核心功能

(1)网络通信。基于Socket建立通信连接,通过完成端口模型处理用户并发请求,以此实现服务端与客户端间的交互通信。

(2)数据库。在服务器上创建MDB格式的数据源,通过OLEDB驱动操作,以此实现账号记录、密码记录、积分记录等需要持久化保存的信息。

(3)游戏大厅。由于德州扑克的游戏特点,需要有游戏大厅功能,大厅包含多个房间,基于移动端屏幕的显示内容有限,因此设定每个房间最多可容纳6个人,游戏以房间为单位进行,能同时进行多组比赛。

(4)游戏逻辑。实现德州扑克的游戏逻辑,包括扑克牌组的洗牌、手牌牌型的判断、手牌牌型大小比较和游戏进程的控制与调度。

(5)效果表现。客户端部分基于Cocos2d-x引擎,使用引擎内部所自带的Animation System,实现发牌、翻牌等游戏中使用的特效,并通过内置的音效系统实现音乐和音效的播放,并配合LUA脚本语言编写业务逻辑,保证游戏进程顺利推进。

2 功能实现

2.1 游戏逻辑

2.1.1 牌组创建

每场游戏所使用的扑克牌组为52张牌,其中不包括小丑牌,也就是俗称的王牌。因此,扑克牌组内的牌由花色为黑桃A至K,花色为红桃A至K,花色为梅花A至K,花色为方块A至K这52张牌所组成。由于公共牌信息需要从服务端下发到客户端,为了节省服务器资源、减少传递的数据量、提高服务器性能,将使用一个字节对应一张牌,一个字节共有8位,可以表示0-255,共256个数,这对于只有52张牌的扑克牌牌组来说绰绰有余。为了让代码清晰易懂,牌面用十六进制数表示,高位决定牌的花色,低位决定牌的值,具体定义如下:

2.1.2 牌组洗牌

每场游戏开始之前都需要对牌组洗牌,因此需要定义一个洗牌函数,将牌组数组和所需牌的张数作为参数传入。所需洗牌的张数根据在场的玩家数目动态变化,因为每位玩家只会有两张底牌,公共牌也固定只有5张,因此每局游戏开始时需要牌的张数就确定下来。既然每局只需要这么多张牌,那么也只需洗这么多张牌,具体如下:

2.1.3 牌型判断

在德州扑克游戏里有以下几种牌型:散牌、单对、两对、三张、顺子、同花、葫芦、四张、同花顺、皇家同花顺,牌型大小依次递增。散牌是牌型中最小的一类牌,由单牌不连续无同花牌组成;单对就是牌中有且只有两张相同;两对就是牌中有两对单对;三张就是牌中有三张相同;顺子就是牌值连续的五张牌;同花就是花值连续的五张牌;葫芦则是由三张加对子组合起来的牌;四张就是牌中有四张相同;同花顺就是牌值连续且花值相同的五张牌;皇家同花顺则是带黑桃A的同花顺。

在牌型判断中,首先判断牌型是否顺子或同花或既是顺子又是同花,因为这样的牌型判断起来比较简单,只要有一张牌不连续就不是顺子,只要有一张花色不同就不是同花。由于在牌组定义时将A定义作1,而在实际游戏中,A是最大的,因此取实际牌值大小时应将A取值为14,大于K的13。待判断的牌组在传入前会由大到小排序。因此,有可能漏判掉以A开头的同花顺类型,所以需要单独处理这种特殊的牌型。另外,带黑桃A的同花顺是最大的牌型,所以也无需比较。

如果既不是同花又不是顺子,则需要继续分析。通过二重循环获取牌中相同牌的个数,以判断出牌型是单对、两对、三张还是四张。

2.1.4 大小比较

定义牌组大小比较函数,将需要比较的两个牌组和牌组的张数传入函数,首先从判断牌型开始,牌型大的牌取胜,若牌型相同,则继续进行比较。当牌组1小于牌组2时,函数返回1,当牌组1大于牌组2时,函数返回2,当牌组1与牌组2相同时,函数返回0,具体规则如下:

(1)牌型为四条时,首先比较哪个玩家的四条大,如果四条一样大,则比较谁的单牌大。

(2)牌型为三条时,如果是葫芦牌型,则比较谁的对子大。如果是三条带单的牌型,则比较谁的单牌数值大。

(3)牌型为对子时,比较谁的对子大。

(4)牌型为单牌时,比较谁的单牌大。

(5)牌型为顺子或同花顺时,则取出牌组1和牌组2的第二张牌比较。之所以不取第一张牌,是因为可能是A至5,也可能是A到10。

(6)牌型为同花时,则对牌组遍历,逐张逐张比较。

2.2 IOCP服务器

IOCP全称I/O Completion Port,中文又叫I/O完成端口,这种模型在高并发的应用场景下尤为适用。本文游戏基于Socket编程,因此与IOCP配合,初始化流程如下:(1)InitCompletionPort();//创建和初始化I/O完成端口;(2)InitListenSocket();//创建和初始化Socket;(3)InitListenEvent();//创建和初始化监听事件;(4)InitAcceptThread();//创建和初始化应答线程。

整个工作流程如图1所示。

2.3 数据库功能

数据库采用MDB格式,Microsoft Office Access数据库管理系统可以创建该种格式的数据库文件。

实际使用中,需要先通过系统上的Open Database Connectivity程序将Data Source设置好,然后再通过OLEDB驱动对数据库进行连接、操作。

CAdoConnection objConn;

CString str="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<数据源的名字>";

objConn.Connect(str)

2.4 效果表现

Cocos2d-x引擎中自带动作系统,内置有许多套动作函数,通过这些函数,可以组合出游戏中所用到的各种动作。如发牌动作,表现为从牌桌上荷官的位置将扑克牌派发到玩家所处的位置,通过MoveTo函数,设置好动作的持续时间、动作的目标位置,让扑克牌对象运行这一动作则可实现。

auto actionTo=MoveTo::create(<持续时间>,Vec2(<Position_X>,<Position_Y>));

card->runAction(actionTo)

3 结语

本文介绍了德州扑克游戏的关键逻辑实现过程,如扑克牌组的创建、扑克牌组的洗牌、手牌牌型的判断、手牌牌型的大小比较等,并对数据库功能实现和IOCP完成端口应用进行了阐述。本设计能够多人同时进行游戏,顺利完成整个游戏流程。

摘要:以Client/Server模式实现一款简单的德州扑克游戏。以C++作为开发语言,编写核心逻辑实现游戏流程的控制和调度,通过OLEDB驱动操作MDB格式数据实现数据库功能,使用完成端口模型处理与客户端间的数据交换。基于Cocos2d-x引擎,配合C++和Lua语言,完成程序中特效的表现、客户端的业务逻辑。

关键词:Cocos2d-x,德州扑克,棋牌游戏

参考文献

[1]满硕泉.Cocos2d-x权威指南完整版[M].北京:机械工业出版社,2013.

[2]沈大海.Cocos2d-x手机游戏开发与项目实战详解[M].北京:清华大学出版社,2014.

[3]王艳平.Windows网络与通信程序设计[M].北京:人民邮电出版社,2009.

[4]文必龙,邵庆.开放数据库互联ODBC技术与应用[M].北京:科学出版社,1997.

[5]孙鑫,余安萍.VC++深入详解[M].北京:电子工业出版社,2006.

多人扑克游戏:钓鱼 篇5

[牌局]扑克一副,抽掉大小王。二至数人皆可。洗牌、切牌,各牌手按逆时针顺序轮流抓牌,每次~张,每人抓3张。

[打法]

(1)抓牌结束后,将余牌中翻出4张明着摊到桌上,由最先抓牌者察看自己手上的牌,看能否用其中的一张或数张与已放在桌上的4张牌中的某一张之和凑为14。如行,则将这些牌收到自己的面前,然后从余牌中取出一张,放到桌上,使其仍保持有4张牌,并将手上牌补至3张,然后各下家依此法游戏;如果某位牌手的手中牌不能与桌上的任意一张凑成14,则弃权,由下家继续进行;如所有的牌手都不能从桌上凑成14,那么就将这4张牌打掉,再从余牌中翻出4张,继续进行直到游戏结束。

(2)当余牌全部用完,所有的牌手都不再能凑出14时,则此局结束。然后计算各牌手的得分,记分规则为黑桃牌4分,红桃牌3分,方块牌2分,梅花牌1分。将各牌手“钓”到的牌分别计出分来,分高者为胜。

上一篇:遗址保护与开发下一篇:高中体育教学的创新