承接上一章:房卡麻将游戏算法修改课程二,游戏逻辑部分是我们 的核心,这里之所以没有全部讲解的原因一是因为篇幅有限,二是后面我们会详 细讲解每一个关于逻辑的变量和函数,这里就不重复讲解了。
这一节主要是对相 关的头文件和源文件做一个简要的介绍,让大家在总体上有一个印象,这样在我 们后面详细介绍每一个算法的时候,说到某个变量或者函数的时候不至于让大家 不知所措。所以我希望大家讲我这里介绍过的每一个变量和函数都仔细的看一遍, 最好是我这里提到的函数或者变量你们至少要知道他们在什么地方。
GameServerManager.h 头文件:
这个头文件的内容不多,但是很关键。
我们这次的课程用的不多这里主要讲 几个函数;
创建游戏桌:
这是创建游戏桌的代码,他的功能 就是创建我们的游戏场景,CTableFrameSink是游戏桌子类,创建之初给他赋予了 null 值,然后在异常捕捉中用构造函数对 其进行初始化。
这是构造函数,RepositionSink()函数是复位桌子,有学员问有的时候进入游戏还保
留上次的得分是怎么回事,其实就是这个函数没有被正常的调用。没有对桌子复
位。这个函数的东西比较多,后面的教程我们会细讲。有兴趣的学员可以进入这个函数看看,修改
一下里面的游戏得分就可以了。
我们回到创建游戏桌这个函数,成功调用构造函数过后,用一个判断来验证构造函数调用结果,如果
没有创建成功就抛出错误提示,然后创建一个无类型的指针,调用游戏桌子对象的内部函数“接口查
询”,进行赋值。然后再次判断查询结果,失败抛出错误提示,如果成功返回指针对象。
获取属性:
这个函数就更简单了,他的参数是服务属性,对其赋值的也是服务属性变量,最后返回一个 true 值。
从这两段代码我们可以了解到这个结构的内容。
这是对这个变量的赋值,这里包含了版本号,进程名,游戏 ID 等等,等后期我
们进行游戏整体改版的时候需要用到这些,比如我们现在的湖南麻将 ID 是 310,如果我改一个汪炎地区麻将 可能就要讲 ID 改成其他的,这样才能对分辨出不同
的进程,当然 dll 的名字也要改。这在我们做游戏集合的时候是必须的。
修改参数:
这里定义单位积分,也就是游戏的金币,__max 是一个宏,他是读取最大值的宏。TableFrameSink.h 头文件: 这个头文件是我们的最后一个头文件,也是最重要的头文件。
这段代码里面的信息已经注释的很清楚了,我想大家看名字应该知道个大概。这 里比较关键的一个变量就是是否能胡牌,当然长沙杠这些后面我们也要用到,但 是这个是否能胡牌在我们修改玩法的时候必须用到。
我们看他一共有两个复制语句,一个是 1,一个是 0;1 代表了放弃,那么 0 是什么就不用说了。
这里的长沙杠,有些人问过什么是长沙杠,其实这个就是长沙地方一个玩法,和 我们这里的玩法不同,四川的玩法是杠了摸一张牌,然后打出一张。长沙是一次 杠两张,你可以任意选一个胡,如果你胡不了,别人可以胡就是杠上炮了。
这里起手胡分数,权位,吃胡卜克,吃胡结果都是我们要 用的到。但是这里最重 要的就是这个游戏逻辑变量。在 GameLogic 头文件中我们讲过这个类。后面讲 源码的时候还有详细的讲一次,如果这里你已经记不清这个类,那么麻烦你返回GameLogic 头文件部分再看一次。这个非常重要,我们的游戏玩法修改课程大部 分内容都在这里实现。
这里我们先来看看游戏开始:
Repos itionSink()复位桌子函数之前我们就提到过,首先对桌子复位然后在开始游戏,这个函数里的判断,循环等等我们在源码里再讲。 游戏结束,和发送场景这两个函数也是我们这次必须要用的函数,起内部结构比游戏开始还要复杂, 这三个函数的重要性不分先后,大家有时间最好提前看看这些函数的内部构成,我们讲游戏修改源码 的时候这几个函数都是重点。
这段代码比较重要的地方首先就是游戏消息处理:
用一个 switch 语句来完成对消息的处理,这是客户端发送给服务器的消息,服 务器接收到客户端发送的消息后做一系列的处理,然后返回给客户端。这里包括 出牌,杠牌等等动作。这个函数是重点的重点。 用户断线,用户重入这两个函数看名字应该知道是什么东西,之前红中麻将出现 用户断线后重入不正常,那么就是这个用户重入函数有问题。 然后用户同意和用户起立这两个函数就是我们解散房间中必要两个函数。
用户出牌,用户操作就不说了,因为后面会细讲,这里说一下托管:
这个函数托管函数,我们现在的麻将由于担心玩家接电话等等耽误了时间,如果
这个时候给用户托管了,可能导致玩家输钱。所以基本上所有的房卡麻将都取消
了托管功能,但是托管在我们以后的金币房间中可能还会用到。
第一个判断是否是私人场模式:
如果是私人模式就返回 false,所以第一个 IF 语句对结果进行了取反操作,如果是
私人场就直接 return 了,第二个 IF 如果玩家人数大于或者等于也就 terurn 了。
这样大家就知道了为什么我们的房卡麻将没有托管了吧。
最后就是响应判断,这两响应判断对应了不同的游戏类型,这里包括出牌,碰牌, 杠牌,胡牌等等。
好了到现在位置所有的头文件我们都讲完了,后面就是源码了,每一个有关 的源码我们都会详细的讲,每一个相关的函数都会细讲。 讲完所有的源码过后, 我们会做一个实例,一次解决这个课程。
上面的头文件介绍,虽然没有很深的技术含量,但是这些头文件为我们提供 了一个理解源码的框架,我希望大家以后阅读一个源码的时候一定要先看头文件。
相关课程:
- 创建游戏桌:
- 获取属性:
- 修改参数:
发表评论