网络版控制台三国杀结构图

一、简介

这个网络版控制台三国杀是在原来单机版上加入网络通信功能制作出来的,从第一版到第三版用了大半年时间,也算是我大一学习C++历程的里程碑吧。

它可以选择进行几人局的游戏(2~10人),所用游戏包为标准包+EX,游戏流程以及身份分配按照三国杀多人局的一般规则进行。所有标准包+EX涉及的功能、概念全部实现,对输入输出进行检测,提高程序的鲁棒性。

二、架构

在原来单机版三国杀的Service层外部加入GameServer层,负责建立游戏并组织与外界的输入输出。客户端和服务器用tcp协议通信。

三、模块功能讲解

1、服务器

deskPoker桌牌,提供桌面上未用牌堆、已用牌堆、正在处理牌堆的功能。

Player玩家,是流程进行的基本单位,提供单个玩家的所有功能,用多态性实现武将技能。

Poker牌,用多态性实现不同牌的功能。

Service服务,掌管游戏进程,集中处理杀、锦囊、求无懈可击、求桃、判断游戏胜负等等功能。

GameServer游戏服务器,负责调配Service启动与结束、掌管所有客户端的Socket数据、负责分发接受各种消息等等功能。

2、客户端

IO解析,负责判断一条消息是否要求回复。因为在三国杀中有些消息仅仅算作提示,例如某某人对某某人出了一张杀;有些消息需要回复,例如某某人对自己出了一张杀,自己须响应此消息,回复自己是否打出某一张闪。

GameClient游戏客户端,负责把IO解析出来的数据提供用户,用户在此进行输入操作,接受输出结果。

详见我“自己写三国杀之架构分析”文章。

四、缺点以及改进措施

首先请原谅一下,我们学校一直到大二都还没有正式讲解过GUI方面的知识,而且这个三国杀开始编写时我并没有掌握GUI的任何知识,思维固定在控制台上面,所有的输入输出最终都是cin cout。界面问题虽然是个绝对硬伤,但是我会争取在下一个版本做出GUI的。

其他可以改进的缺点:

1、只能支持单局游戏。这是由于Service只是负责掌管某一局游戏的流程,从开始游戏到结束游戏而已,而在学习并写出网络功能时,没有足够的时间研究多场游戏如何实现,GameServer里只有一个Service。以我目前的知识,我认为每一局游戏应该开多个线程,玩家游戏结束后并不退出而是可以选择进行下一场游戏。

2、玩家意外断线后游戏停止响应。一开始做单机版的时候只有cin、cout,并不会出现某一玩家失去响应的问题;做出网络版后出现这个问题,在现有架构上没有办法解决。在下一个版本中要把流程和输入输出分离更彻底,并加入超时则返回默认值的功能。

3、扩展性不高。就是因为“玩家”和“武将技能”两个概念耦合度太高,导致原架构不能适应新武将技能涉及的概念(尤其是山包武将,可以让武将技能动态添加删除改变)当时在CSDN论坛上发帖子求助,也没有起到多大作用,纠结了很长时间。最后因为赶时间就把这两个概念结合在一起了。在下一个版本中架构已经经过重新设计,支持多扩展包、武将技能和流程上新的概念。

五、下一版的计划

下一版要做出跨平台的服务器,让程序有更强的鲁棒性,而且要有GUI。

写这个三国杀只是个人爱好,而且现在要参加的比赛要写的其他程序也很多,课程也需要我花时间学好,所以下一版的开发进度很慢,到现在仅仅完成设计以及初步编码阶段,核心部分还有很多很多的问题没有解决,所以发布时间将会遥遥无期。


控制台三国杀的说明 这个程序耗费了我三四个星期的时间与精力,不过做的很粗糙,没有实现三国杀的全部功能。 现在这个版本,实现的功能是两个武将一对一,玩家开始时控制A武将,由电脑接管B武将来响应A的出牌;A武将回合 结束后,玩家控制B武将,由电脑接管A武将响应B武将出牌。(不要喷我哦~现在没实现AI控制主动出牌~)如此循环往复,直 到一名武将阵亡,游戏宣告结束。 这个程序使用三国杀标准包,一共104张牌。实现了杀、闪、桃、乐不思蜀、闪电、无中生有、南蛮入侵、万箭齐发 、桃园结义、过河拆桥、顺手牵羊、决斗、五谷丰登(不能自由选牌)、标准回合顺序;没实现借刀杀人、无懈可击、装备( 装备牌可以装上,但是没有功能)、距离、武将技能。没实现的原因是建立框架时没有考虑完全,以致这些功能无法加入其中 。 在游戏中,A武将为“刘备”,座位号0;B武将为“张飞”,座位号1。运行游戏时在命令行显示“>>”时输入“z” 然后回车即可开始游戏(输入h可查看用于调试模式的命令)。 本程序共1417行代码,使用C++语言于VS2010平台编写。我会继续完善它直到实现它所有的功能,现在临近期末考试 ,没有时间继续完善它了,结构说明书也没有写。我的QQ:744676345(羽枫),有问题可以加我询问。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值