网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx

上传人:b****6 文档编号:22180547 上传时间:2023-02-02 格式:DOCX 页数:29 大小:87.79KB
下载 相关 举报
网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx_第1页
第1页 / 共29页
网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx_第2页
第2页 / 共29页
网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx_第3页
第3页 / 共29页
网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx_第4页
第4页 / 共29页
网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx

《网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。

网络斗地主服务端项目文档DOC 28页Word文档下载推荐.docx

进入和退出桌子的方法已经加了线程保护synchronized,所以此方法就不用加线程保护。

桌子用户数

i获取桌子用户数的方法

在斗地主桌子类中给玩家找桌子的方法中会用到,主要配合方法k判断当前桌子玩家数有没有满

得到桌子用户数

j设置桌子允许最大用户数的方法

在初始化桌子信息时,可根据游戏不同传入不同的参数

桌子允许最大用户数

k获取桌子允许最大用户数的方法

主要用来判断当前桌子玩家数有没有满

得到桌子允许最大用户数

l设置桌子状态的方法

如准备中、叫分中、玩牌中

桌子的状态

m获取桌子状态的方法

得到桌子的状态

n设置桌子用户列表的方法

在桌子初始化时,给每个桌子加一个包含三个空对象的用户列表

桌子的用户列表

o获取桌子用户列表的方法

得到一个桌子的用户列表,便于遍历桌子中的每个玩家

得到桌子的用户列表

p设置桌子消息队列的方法

初始化桌子信息时,每个桌子对象都会new一个消息队列,所以这个方法一般不会用到

桌子的消息队列

q获取桌子消息队列的方法

获取到桌子的消息队列,可使用队列的add方法添加消息。

得到桌子的消息队列

r将收到的消息加入到桌子的消息队列中

将消息加入到桌子的消息队列中,会被处理所有桌子消息队列的线程MessageThread处理

消息类型、消息对象

实现过程:

1>

创建一个消息队列单元类型MessageUnit的对象unit

2>

把参数消息类型和消息对象打包到unit中

3>

调用方法q得到消息队列对象,用消息队列对象的添加方法,把unit添加到消息队列中

s给桌子的玩家列表中的每个玩家发送消息的方法

t玩家进入桌子的处理(同一时刻只能有一个线程执行此操作)

被斗地主房间类中找桌子的方法调用(找桌子的方法是先找有2人的桌子,再找有1人的桌子,最后找无人的桌子)

玩家对象

是否进入成功

传入一个玩家对象,判断桌子是否有空位(被找桌子的方法调用时此判断无用),有空位则遍历桌子用户列表中为空的玩家给替换掉进入成功,否则进入失败

u玩家退出桌子的处理(同一时刻只能有一个线程执行此操作)

玩家退出桌子后对桌子的处理

遍历桌子的玩家列表,取得每个玩家的用户名与参数的用户名比较,把相同的置空,减少桌子的用户数

v进入桌子所属的房间

玩家进入桌子所属的房间后的处理

通过方法b获取得到桌子所属的房间ID,来增加当前房间的人数

w退出桌子所属的房间:

玩家退出桌子所属的房间后的处理

用户名

通过方法b获取得到桌子所属的房间ID,来减少当前房间的人数并且移除此用户

x开始游戏:

在子类中会被重写,暂无定义

y结束游戏:

在子类中会被重载,暂无定义

z同步信息:

null

aa超时处理:

3玩家Player类

用户名、玩家交互、所属的桌子(可能没有桌子),用户ID,昵称

a构造方法:

b发送给当前玩家消息的方法

c设置当前用户名的方法

设置当前用户名

d获取当前用户名的方法

获取当前用户名

e设置当前玩家交互的方法

设置当前玩家的交互

用户交互实例(被服务端用来识别用户)

f获取当前用户交互的方法

获取当前玩家交互实例

当前玩家交互实例

g设置当前用户所在的桌子方法

设置当前用户所在的桌子

当前用户所在的桌子

h获取当前用户所在的桌子的方法

获取当前用户所在的桌子

用户所在的桌子

i设置当前用户ID的方法

标记客户端,服务端数据也应该以此为用户信息表的主键

当前用户ID

j获取当前用户ID的方法

用户ID

k设置当前用户昵称的方法

l获取当前用户昵称的方法

4牌Card类

面值、花色、权值

a构造方法1

注释:

初始化牌的面值、花色和权值(权值默认初始化为1)

数值、花色

b构造方法2

初始化牌的面值、花色和权值(按传入的参数初始化权值)

数值、花色、权值

c获取牌面值的方法

获取牌的面值

面值

d获取牌花色的方法

获取牌的花色

花色

e获取牌权值的方法

获取牌的权值

权值

f设置牌权值的方法

设置牌的权值

5牌组CardArray类

牌组中牌的张数、牌对象的数组、牌组的权值

a构造方法1

初始化牌的张数、牌对象的数组、牌组的权值(牌组权值默认初始化为1)

牌组中牌的张数、牌对象的数组

初始化牌的张数、牌对象的数组、牌组的权值(按传入的参数初始化牌组的权值)

牌组中牌的张数、牌对象的数组、牌组的权值

<

构造方法3

牌对象

c构造方法4

初始化牌的张数、牌对象的数组、牌组的权值(牌组权值默认初始化为1)

d获取牌组中牌的张数方法

获取牌组中牌的张数

牌组中牌的张数

e获取一个排序后的全部数值数组1

获取一个排序后的全部数值数组(默认按照面值递增排序)

一个排序后的牌组

f获取一个排序后的全部数值数组2

获取一个排序后的全部数值数组(按照传入参数方式排序)

排序方式(面值正排序1、面值逆排序2、权值大小正排序3或权值大小逆排序4)

一个排序后的数值数组

g添加牌对象1

添加牌对象

一个添加后的牌组

h添加牌对象2

添加牌对象的数组

牌对象的数组

i删除牌对象1

删除牌对象

删除后的数值数组

j删除牌对象2

删除牌对象的数组

k比较面值是否相同1

比较数值是否相同

是否相同

l比较面值是否相同2

m比较数值是否相同3

比较数值是否相同

牌组类的对象

n比较数值是否包含1

比较牌对象数值是否包含

是否包含

o比较数值是否包含2

比较牌对象的数组的数值是否包含

p比较数值是否包含3

比较牌类对象的数值是否包含

牌组对象

q是否清一色

比较牌对象是否相同花色

是、否

r获取牌组对象的权值

获取牌组对象的权值

牌组对象的权值

s设置牌组对象的权值

设置牌组对象的权值

t比较牌组对象权值的大小

比较牌组对象权值的大小

要比较的牌组对象的权值

1(大于)、0(等于)、-1(小于)

//斗地主游戏框架

6斗地主房间RoomDdz3类

继承Room类

房间底注

b设置斗地主房间底注的方法

设置斗地主房间底注

要设置的底注的值

c获取斗地主房间底注的方法

获取斗地主房间底注

d重写父类自动分配桌子的方法

给玩家找到一个有位置的桌子,先找已经有2人的桌子,如果没有再找已经有1人的桌子,如果没有再找已经有0人的桌子,如果没有则返回null

分配到的桌子

调用找桌子方法

e找桌子的方法

桌子的人数,玩家对象

找到的桌子

7斗地主桌子TableDdz3类

继承Table类

桌子底注、倍数、谁是地主、最高分数、叫分次数

当前操作人、当前出的牌、牌型、用户的牌(Map)

已准备的人数、叫分人、上一轮出的牌(Map)、炸弹

春天、时间、时间限制、不出次数

a构造方法

初始化属性‘用户的牌’、‘上一轮出的牌’为<

用户名,牌组>

初始化倍数默认为1.

b准备游戏

线程MessageThread处理准备游戏时调用此函数

玩家状态,玩家对象

c叫分

线程MessageThread处理叫分时调用此函数

叫分的消息包,玩家对象

d不叫分

线程MessageThread处理不叫分时调用此函数

e出牌

线程MessageThread处理出牌时调用此函数

出牌的消息包,玩家对象

f换桌

线程MessageThread处理换桌时调用此函数

快速游戏的消息包,玩家对象

g托管/取消托管

线程MessageThread处理托管/取消托管时调用此函数

托管的消息包,玩家对象

h退出游戏

线程MessageThread处理退出游戏时调用此函数

退出游戏的消息包,玩家对象

i打牌结果处理

线程ResultThread处理打牌结果时调用此函数

斗地主玩家对象,玩家列表,斗地主桌子对象

j计算金币

斗地主桌子对象,用户名,结果消息包,是否赢,是否是地主

结果消息包

k开始游戏

线程ResultThread处理打牌结果时调用此函数,包括调用洗牌发牌,随机叫分方法

l游戏结束

重置斗地主桌子属性和玩家列表

m离开游戏

n斗地主桌子属性的获取和设置方法

8斗地主玩家PlayerDdz3类

继承Player类

金币数、角色名称、胜数、输数、

状态、得分、叫分、是否是地主、

是否准备、打牌超时次数、操作时间、

托管、打牌次数

b发送消息给自己

消息类型,消息对象

c斗地主玩家属性的获取和设置

//游戏数据

9数据库连接池管理类DbManager

创建连接数据库的方法

数据源

(2)方法

a初始化

读取配置文件,获取数据库的位置,连接用户名和密码等信息,并加载到数据源。

b加载配置信息的方法

把配置信息加载到数据源

要加载的信息实例

c同步配置信息的方法

如果数据源为空,就重新加载

返回值:

d修改保存的方法

修改数据库内容并保存

数据库名,要修改内容对象

修改结果

e获取与数据库的连接实例的方法

得到数据库连接的实例

f关闭与数据库的连接实例的方法

数据库连接的实例

10房间数据库管理方法类RoomDao:

(1)属性:

(2)方法:

a加载数据库中房间信息的方法

根据游戏类型获取数据库中的房间信息加载到每个新建的房间对象中

游戏类型(三人斗地主或者其他)

加载好的房间列表

b加载数据库中用户的信息

根据用户名获取数据库中的用户信息加载到每个新建的用户对象中

加载好的用户对象

11任务数据库管理方法类TaskDao

任务数据库管理方法类实例

(2)方法:

a构造方法:

b获取任务数据库管理方法类实例

参数:

返回值:

得到任务数据库管理方法类实例

c新建一个任务数据库管理方法类实例

d获取任务列表

任务列表

e检测任务是否完成

任务类型,用户名

完成或未完成

f查询用户的任务列表

g创建用户名和任务的键值MAP

一组用户名

用户名和任务的键值MAP

h更新任务列表

参数:

打牌结果处理包实例

返回值:

12玩家信息数据库管理方法类UserDao:

属性:

方法:

a添加一个用户

用户信息包实例

b验证用户是否注册(暂时不用)

存在或不存在

c用户登录验证(暂时不用)

注释:

在登录成功后就新建个用户信息包来保存当前数据库中的用户信息。

包括金币,输数,赢数,等级和网名

用户详细信息实例

13数据库数据初始化到内存的方法类

定义一个房间列表的引用(用来只想新建的房间列表)roomList

a、初始化房间到内存方法

初始化房间信息,桌子信息和每个桌子一个空用户列表

实现过程:

<

从数据库中加载出房间列表实例给被roomList引用

根据房间信息新建桌子对象并加入到一个桌子列表中,set到房间对象中

新建桌子对象时新建一个用户对象为空的用户列表给桌子对象

b、设置房间列表引用的方法

房间列表引用

c、获取房间列表引用的方法

//MINA交互框架

14服务启动Server类

端口号

b初始化服务端配置方法:

bindServer

初始化服务端配置

初始化了服务端的TCP/IP的基于NIO的套接字

然后调用IoSessionConfig设置读取数据的缓冲区大小

读写通道均在10秒内无任何操作就进入空闲状态

4>

使用MINA为我们提供的编解码器工厂来对字符串进行编解码处理,组装编解码器EncoderBean\BaseMessageEncoder\BaseMessageDecoder三个类

5>

注册ServerHandler处理client传过来的数据

6>

绑定端口号

c服务端启动的入口函数:

main

服务端启动

输入行参数args

new了一个Server类的对象

调用bindServer初始化服务端配置

查询数据库初始化房间信息、桌子信息和用户交互信息

HeartBeatThread线程发送心跳信息

MessageThread线程处理所有桌子的消息队列

CounterThread线程处理打牌超时,或者准备超时的处理

ResultThread线程处理显示打牌结果

记录房间和桌子信息于文件(调试使用)

15编码包类EncoderBean类

发送消息时将要发送的信息放入EncoderBean类对象中

编码类型(有默认编码类型)、要编码的内容、自定义编码类型

b获取编码类型的方法:

获取编码类型

编码类型

c设置编码类型的方法:

设置编码类型

编码类型

d获取要编码内容的方法:

获取要编码的内容

编码的内容

e设置要编码内容的方法:

设置要编码的内容

编码的内容

f获取自定义编码类型的方法:

获取自定义编码类型

自定义编码类型

g设置自定义编码类型的方法:

设置自定义编码类型

16编码打包方法类BaseMessageEncoder类

发送消息写入缓冲区实例之后将调用此类中的encode函数

b编码方法encode:

把写入到缓冲IoBuffer中的编码包类对象编码并发送

session实例、编码包对象、encode输出方法类对象

17解码方法类BaseMessageDecoder类

收到client数据后调用此类中的decode方法解包

定义一个保存在IoSession中的对象的键值

b判断是否可解码的方法:

decodable

是否可解码

当前session实例,输入缓冲buffer实例

是否可解码

c解码的方法:

decode

对收到的数据解码

session实例,输入缓冲buffer实例,decode输出方法类实例

解码结果(解码完成、还需要数据)

18服务端处理数据ServerHandler类

a构造函数

注册StringHandler处理client传过来的数据

b发送消息的方法:

sendBeanMsg

把要发送的消息实例和协议传入,然后发送

session实例,协议值,消息对象

创建数据包PackData类的对象

把传入的参数协议值和消息对象set到packdata对象中

调用方法发送消息方法写入IoBuffer缓冲区

c发送消息方法:

sendMsg

把消息对象参数解释成json的String,再由参数session对象的write方法写入缓冲区,框架会调用enconde函数将缓冲区内的buffer编码打包并发送。

session实例,消息对象

创建编码对象bean

把消息对象参数解释成json的String,打包到编码对象bean中

再由参数session对象的write方法把bean写入缓冲区,由框架调用encode编码发送。

19服务端处理数据StringHandler类

用户服务类对象,房间服务类对象,桌子服务类对象,聊天服务类对象

目前将接收到的数据分成这4类来处理,用户服务类单独提出来提供测试使用的注册和登录服务,房间服务类单独提出来提供测试使用的游戏大厅的服务

a处理客户端发来的数据handleMessage

客户端发来数据经解码后由ServerHandler发过来,此功能就是从数据中找到消息类型(即协议),根据不同的数据类型执行对应的操作。

当前交互实例,消息实例

实现过程:

<

把传过来的json型String对象转成数据包类型PackData类对象

使用数据包PackData类的获取数据类型的方法得到数据类型

根据不同的数据类型选择不同的执行方法

//游戏交互数据处理

20心跳线程HeartBeatThread类

a构造函数:

b线程运行函数:

客户端会持续

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1