|
返回目录
这是我两年前离职在家,用一个半月写的一套源码,写完后就公布了所有代码,将近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的闪烁问题
发表评论
包包终于离职了?
不知道这个代码直升3.5还能不能跑得起来,试试先
以刺激性的言语+多幅游戏截图,来吸引大家的眼球。这样的文章会误导很多新人,同时,会导致博客园的文风往“假大空”的方向发展。
包包说得不错,先声明,我不是针对某一个人或是某一些人来说,就最近这几天园里发布的关于这方面的文章来看,“老温博客”他所发表的文章就是这类型的,我也不支持他这种写作方式,虚有外表而无内脏。
呵呵,我不怕众人看了这个留言后都想K我,这就是我要说的话,虽然园里有些人很看重老温,说他走红,崇拜、欣赏他。个人而言,技术上不否认他有这个实力,不过写文章的方式感觉就不爽了。
very good, very strong big
#10楼 [楼主]2008-07-05 14:27 |
--引用--------------------------------------------------
夕颜子: 太棒了老大,希望能详细的讲解一下
--------------------------------------------------------
反正在家闲着也是闲着,争取把我当初写在纸上的思路都搬上来,同时升级一下版本,把当初没实现的功能做掉。
同意楼主的观点。
===================================
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个人这个消息,请仔细看我的代码,我会在后面详细讲解这个技术的实现。
MVP的境界就是不一样啊,没有什么保留的:只要你需要,只要我知道。
老包
真的不错啊!!!
我怎么 登录不了呢?
我把数据库 都倒进去了
我的服务器 和client在同一台机器上
 首先 使用高级评论引起注意
然后下来看看...
#18楼 [楼主]2008-07-05 15:45 |
--引用--------------------------------------------------
王孟军!: 老包
真的不错啊!!!
我怎么 登录不了呢?
我把数据库 都倒进去了
我的服务器 和client在同一台机器上
--------------------------------------------------------
调试一下吧,用db中的用户名和密码
支持博主把这个系列写好。
这才是我们软件圈中应该有的风气,不像某些人,感觉和我们不是一个圈子里面的人,和周围优秀的同事说话气质,思考方式都不一样。
我还是蛮喜欢这种纯技术,务实的作风。
在哪里可以看到枚举?打开每个文件的属性,我们会看到只读、隐藏的选项;操作一个文件时,你可以采用只读、可写、追加等模式;设置系统级别时,你可能会选择紧急、普通和不紧急来定义。 http://***
老包,没来得仔细看你的博文,不知道你的设计思想是什么,我感觉目前.net并发最好应该是异步I/O完成端口的思想!
严重支持楼主!!
那个无聊的XX系列实在是让人看得难受。回个帖说句实话还被删了。
简直就快要连带影响我对博客园的好感了,有屏蔽功能就好了,眼不见为净。
期待楼主的文章。
你好 我是出版社的编辑,我看到你博客中的内容,感觉写的非常好,如果想把这些内容
和更多的人分享,可以和我联系,把这些东西写成书。
我的邮箱:books_522008@yahoo.com.cn
或者加我的MSN:pyq_19852008@hotmail.com
看到包包的玉照出现在了blog的左侧,然后又看到了包包把标题下的个人签名更新了,哇,包包看上去很年长……完了,去SH后不敢去见包包了,被当作小弟弟来忽悠……哈哈
事实上序列化对象传递的话用remoting是比较省力的。
#31楼 [楼主]2008-07-07 15:25 |
--引用--------------------------------------------------
A.Z!: 事实上序列化对象传递的话用remoting是比较省力的。
--------------------------------------------------------
所以我自己在TCP层写了一个自定义信道,来解析这些传递的字节。
--引用--------------------------------------------------
3 二级代理技术 开始打牌后,指定其中一人为ProxyServer,打开Socket,承担与其他三人打牌逻辑的判断,打牌结束后由其负责 通知主Server 实现了均衡负载,让Server负担大幅度减轻
-------------------------------------------------------
网络游戏开发中应该尽量避免由客户端判断逻辑
太容易作弊了
数据库安装好后,用里面的用户登陆也登陆不了呀。请问还要修改什么吗?
#35楼 [楼主] 2008-07-31 14:54 |
这个是我当初基于.NET 1.1版本写的,数据库配套是SQL Server2000,建议你看一下我后面的文章,下载2.0版本的源码
|