积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
一个扑克牌网络游戏的例子(C++)
error997 (error997)    2014-11-20 20:21:07      目标    课题
   一个扑克牌网络游戏的例子
    近来没什么事干,于是灵机一动,何不把自己经常玩的扑克牌游戏用程序实现呢?经过几天的努力,总算基本完成了,操作起来有点像QQ的斗地主,经测试在局域网上运行良好。由于以前没有做过游戏的开发,也没有参考这方面的代码,还是吃了一些亏,一面写一面设计,所以整体结构以及代码风格有些乱。现在把自己的一点不成熟的经验来说说,这里主要讲一下关键部分功能的实现,其它部分及其具体代码下载即可获得。下载地址:http://free.ys168.com/?yyhlm;http://download.csdn.net/source/179332#aa
1.整体构架
    基于C/S模式(TCP/IP协议)。服务器负责所有游戏调度,监视各游戏玩家的情况以及数据的传递。客户端只接收服务器的命令,并作出应答。
2.文件布置
    主程序,dll文件(纯资源文件,含扑克牌的图像数据),声音文件(点牌的声音)。
3.扑克牌的设计
    定义单张扑克牌类,存储扑克牌的点数,花色,以及它的ID(为了便于识别并在网络上传输时只需传递ID,而不需要传递整个扑克牌类),完成扑克牌的显示,大小比较等功能。
    定义一幅扑克牌类,存储所有的55牌(含一张背景),完成扑克牌资源的加载,完成洗牌。洗牌的算法基本是随机选两张牌,将它们的位置交换,重复一万次。
    定义玩家出的牌类,完成它们的大小的比较。
    定义玩家手上所拿的牌类,完成出牌动作,完成自动选牌功能(这个稍有麻烦,具体见代码,而且笔者懒,所以并不完美)。
4.界面设计
    基于MFC对话框,懒的原因,做的比较简陋。关键的鼠标点牌的功能,实际上是通过扑克牌类作一下加减运算确定位置来完成。
5.网络通讯
    关键部分就是网络传输的数据结构,采用数据头加数据的格式,比如数据头0表示文本数据,1表示传输的是扑克牌数据,2是开始游戏等等(注意这里是打比方,我的代码不一定是这样)。无论是服务器还是客户端都是根据这些数据头作出响应的处理。
   该游戏玩法简介。
    游戏名称为“五十K”,积分扑克牌游戏,三人两副牌玩,最后谁得的分最多就谁赢(只有5 10 K为分)。牌的大小比较(类似斗地主):8张牌点一样>7张牌点一样>...>5张牌点一样>纯五十K(指只含五十K三张牌,且花色一样)>4张牌点一样>杂五十K(指只含五十K三张牌,且花色不一样)>3张牌点一样、两张牌点一样、单张(这三类彼此平级),张数一样的按点数大小比较,纯五十K之间按黑红梅方比较,杂五十K都一样大。手上有管的住别人的牌不能不管。别人都管不住你的牌,你就将出下的牌的分得到。
   下载地址:http://free.ys168.com/?yyhlm;http://download.csdn.net/source/179332#aa

转自 http://blog.csdn.net/y___y/article/details/1605601
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累