首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  网络/通讯  |  棋牌游戏


包包版网络游戏大厅+桥牌系统 序


原作者:包建强    源出处:博客园    发布者:施昌权    发布类型:转载    发布日期:2009-03-21

  

返回目录 

这是我两年前离职在家,用一个半月写的一套源码,写完后就公布了所有代码,将近8k的代码量,当时还是基于.NET 1.1的,具体介绍见这篇文章:棋牌游戏大厅简介
源码下载地址:http://files.cnblogs.com/Jax/PlayCard.rar

时至今日,又一次离职在家,翻看之前的设计文档,很多感慨,2年的技术沉淀,使我对这套源码又产生很多新想法。

还有就是,最近看到博客园首页上关于“网络游戏大厅”话题很热,但是仔细拜读了若干文章之后,发现有很多问题,比如说没有涉及到关键技术,包括架构、异步通信和游戏逻辑这些真材实料,而是以刺激性的言语+多幅游戏截图,来吸引大家的眼球。这样的文章会误导很多新人,同时,会导致博客园的文风往“假大空”的方向发展。对此,我持抵制态度。技术文章,还是要严谨为主,可以适当幽默,但是过度yy,就不免哗众取宠了。

因此,更觉得有必要详细讲解一下“网络游戏大厅”的设计思路,而暂时停止手头的一些事情。

我的一些具体感受是,用C#开发网络游戏,不划算。最多是代码逻辑架构比较清晰,但是效率大打折扣,所以大家不要太热衷于这方面的开发,没有前途的,最多是练练手。我会在接下来的一个系列,介绍我的设计思想以及开发心得,包括当初设计的一些失败之处。

以下是我这套源码的一些主逻辑:
1 基于C# TCP Socket异步通讯 多线程 开发
2 近60个自定义通信协议 使用了序列化技术 传输byte流
3 二级代理技术 开始打牌后,指定其中一人为ProxyServer,打开Socket,承担与其他三人打牌逻辑的判断,打牌结束后由其负责 通知主Server 实现了均衡负载,让Server负担大幅度减轻
4 在Server端 将连接方存入哈希表,这样Server想发信息给谁 都可以点对点发送
5 主裁和边裁的设定 分别在CLient和Server端验证
6 Flyweight模式画 手中的牌
7 Observer模式 负责窗体间的通讯
8 由于是在一台机器上开发, 所以用同一IP不同端口来模拟 不同IP的玩家,所以要略作修改才可以实现不同IP的玩家进入大厅


以及未完成的部分
1 出过的牌 显示: 数据已经准备好 就差表现出来
2 分数的显示:数据已经准备好 就差表现出来
3 界面的美化 由其是排版
4 用Strategy 实现 拱猪/桥牌/80分 的不同玩法 甚至是棋牌的不同玩法
5 强制退出游戏的处理
6 CardControl的闪烁问题

发表评论
  回复  引用    
#1楼 2008-07-05 13:35 | lt1 [未注册用户]
沙发
  回复  引用  查看    
#2楼 2008-07-05 13:39 | BAsil      
不错
  回复  引用  查看    
#3楼 2008-07-05 13:52 | 丁学      
包包终于离职了?
不知道这个代码直升3.5还能不能跑得起来,试试先
  回复  引用  查看    
#4楼 2008-07-05 13:57 | Clingingboy      
打擂台哈...
  回复  引用  查看    
#5楼 2008-07-05 14:03 | 红尘中迷茫      
呵呵。
  回复  引用    
#6楼 2008-07-05 14:15 | 阿寬 [未注册用户]
多謝分享。
支持博主。
  回复  引用    
#7楼 2008-07-05 14:21 | 夕颜子 [未注册用户]
太棒了老大,希望能详细的讲解一下
  回复  引用  查看    
#8楼 2008-07-05 14:22 | Bēniaǒ      
以刺激性的言语+多幅游戏截图,来吸引大家的眼球。这样的文章会误导很多新人,同时,会导致博客园的文风往“假大空”的方向发展。


包包说得不错,先声明,我不是针对某一个人或是某一些人来说,就最近这几天园里发布的关于这方面的文章来看,“老温博客”他所发表的文章就是这类型的,我也不支持他这种写作方式,虚有外表而无内脏。
呵呵,我不怕众人看了这个留言后都想K我,这就是我要说的话,虽然园里有些人很看重老温,说他走红,崇拜、欣赏他。个人而言,技术上不否认他有这个实力,不过写文章的方式感觉就不爽了。
  回复  引用    
#9楼 2008-07-05 14:22 | gfsfg [未注册用户]
very good, very strong big
  回复  引用  查看    
#10楼 [楼主]2008-07-05 14:27 | 包建强      
--引用--------------------------------------------------
夕颜子: 太棒了老大,希望能详细的讲解一下
--------------------------------------------------------

反正在家闲着也是闲着,争取把我当初写在纸上的思路都搬上来,同时升级一下版本,把当初没实现的功能做掉。
  回复  引用  查看    
#11楼 2008-07-05 14:40 | Hollen Zhao      
同意楼主的观点。
===================================
3 二级代理技术 开始打牌后,指定其中一人为ProxyServer,打开Socket,承担与其他三人打牌逻辑的判断,打牌结束后由其负责 通知主Server 实现了均衡负载,让Server负担大幅度减轻
===================================
好奇的问一下:
如果这个代理Server断网了,其他的3个人怎么通知主Server这个异常呢
  回复  引用  查看    
#12楼 [楼主]2008-07-05 14:42 | 包建强      
--引用--------------------------------------------------
Hollen Zhao: 同意楼主的观点。
===================================
3 二级代理技术 开始打牌后,指定其中一人为ProxyServer,打开Socket,承担与其他三人打牌逻辑的判断,打牌结束后由其负责 通知主Server 实现了均衡负载,让Server负担大幅度减轻
===================================
好奇的问一下:
如果这个代理Server断网了,其他的3个人怎么通知主Server这个异常呢
--------------------------------------------------------

代理Server断网,会抛出异常到主Server,然后由主Server通知其他3个人这个消息,请仔细看我的代码,我会在后面详细讲解这个技术的实现。
  回复  引用  查看    
#13楼 2008-07-05 14:46 | 老温博客      
期待楼主的文献!
  回复  引用  查看    
#14楼 2008-07-05 15:01 | lexus      
很好
  回复  引用    
#15楼 2008-07-05 15:14 | KeLin [未注册用户]
MVP的境界就是不一样啊,没有什么保留的:只要你需要,只要我知道。
  回复  引用  查看    
#16楼 2008-07-05 15:32 | 王孟军!      
老包
真的不错啊!!!
我怎么 登录不了呢?
我把数据库 都倒进去了

我的服务器 和client在同一台机器上
  回复  引用  查看    
#17楼 2008-07-05 15:39 | xrainfir      
首先 使用高级评论引起注意
然后下来看看...
  回复  引用  查看    
#18楼 [楼主]2008-07-05 15:45 | 包建强      
--引用--------------------------------------------------
王孟军!: 老包
真的不错啊!!!
我怎么 登录不了呢?
我把数据库 都倒进去了

我的服务器 和client在同一台机器上
--------------------------------------------------------

调试一下吧,用db中的用户名和密码
  回复  引用  查看    
#19楼 2008-07-05 15:55 | 怪怪      
嘿嘿, 还是包包实在~
  回复  引用  查看    
#20楼 2008-07-05 16:37 | 狼Robot      
学习楼主无私的精神,期待楼主升级版的代码.
  回复  引用  查看    
#21楼 2008-07-05 17:02 | 代码乱了      
呵呵,只能说:不错,我很喜欢
  回复  引用  查看    
#22楼 2008-07-05 17:44 | Kevin Shan      
支持博主把这个系列写好。
这才是我们软件圈中应该有的风气,不像某些人,感觉和我们不是一个圈子里面的人,和周围优秀的同事说话气质,思考方式都不一样。
我还是蛮喜欢这种纯技术,务实的作风。
  回复  引用    
#23楼 2008-07-05 18:05 | aoner [未注册用户]
在哪里可以看到枚举?打开每个文件的属性,我们会看到只读、隐藏的选项;操作一个文件时,你可以采用只读、可写、追加等模式;设置系统级别时,你可能会选择紧急、普通和不紧急来定义。http://***

  回复  引用  查看    
#24楼 2008-07-05 18:40 | 李涛      
老包,没来得仔细看你的博文,不知道你的设计思想是什么,我感觉目前.net并发最好应该是异步I/O完成端口的思想!

  回复  引用    
#25楼 2008-07-05 19:18 | kes.king [未注册用户]
严重支持楼主!!

那个无聊的XX系列实在是让人看得难受。回个帖说句实话还被删了。

简直就快要连带影响我对博客园的好感了,有屏蔽功能就好了,眼不见为净。

期待楼主的文章。
  回复  引用  查看    
#26楼 2008-07-05 23:48 | 飄lá┽蕩去      
支持楼主。
  回复  引用    
#27楼 2008-07-06 09:50 | 庞永庆 [未注册用户]
你好 我是出版社的编辑,我看到你博客中的内容,感觉写的非常好,如果想把这些内容

和更多的人分享,可以和我联系,把这些东西写成书。
我的邮箱:books_522008@yahoo.com.cn
或者加我的MSN:pyq_19852008@hotmail.com
  回复  引用  查看    
#28楼 2008-07-06 20:48 | airwolf2026      
....
  回复  引用  查看    
#29楼 2008-07-07 04:46 | volnet(可以叫我大V)      
看到包包的玉照出现在了blog的左侧,然后又看到了包包把标题下的个人签名更新了,哇,包包看上去很年长……完了,去SH后不敢去见包包了,被当作小弟弟来忽悠……哈哈
  回复  引用    
#30楼 2008-07-07 13:50 | A.Z! [未注册用户]
事实上序列化对象传递的话用remoting是比较省力的。
  回复  引用  查看    
#31楼 [楼主]2008-07-07 15:25 | 包建强      
--引用--------------------------------------------------
A.Z!: 事实上序列化对象传递的话用remoting是比较省力的。
--------------------------------------------------------

所以我自己在TCP层写了一个自定义信道,来解析这些传递的字节。
  回复  引用  查看    
#32楼 2008-07-09 10:08 | FP0991      
--引用--------------------------------------------------
3 二级代理技术 开始打牌后,指定其中一人为ProxyServer,打开Socket,承担与其他三人打牌逻辑的判断,打牌结束后由其负责 通知主Server 实现了均衡负载,让Server负担大幅度减轻
-------------------------------------------------------

网络游戏开发中应该尽量避免由客户端判断逻辑
太容易作弊了
  回复  引用    
#33楼 2008-07-12 07:21 | 万能试验机 [未注册用户]
飚车网络游戏加速器。*
http://www.tyyiqi.net
  回复  引用  查看    
#34楼 2008-07-31 14:46 | 寻梦E.net      
数据库安装好后,用里面的用户登陆也登陆不了呀。请问还要修改什么吗?
  回复  引用  查看    
#35楼 [楼主]2008-07-31 14:54 | 包建强      
这个是我当初基于.NET 1.1版本写的,数据库配套是SQL Server2000,建议你看一下我后面的文章,下载2.0版本的源码



关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号