【获取牌的关键值】
函数原型:int getCardKeyValue(vector<int>);
算法设计:构造一个map<int,int>结构来统计牌的张数,在张数最多的所有牌中找出牌值最大的便是此种牌类型的关键值。
【比较两手牌的大小】
函数原型:bool CompareCardValue(vector<int>,vector<int>);
算法设计:getCardKeyValue()方法作用的对象只是同类型的牌,当有一手牌是炸弹另一手不是时需要做特殊处理,如果是同类型的牌则直接调用getCardKeyValue()方法比较大小即可。
【根据牌的类型和张数获取同类型的牌】
函数原型:vector<int> getNeedCard(vector<int>,int,int);
算法设计:找牌跟判牌可以看做两个相反的过程,判牌是通过原始牌数据依照牌的类型及张数一一去核心是否是此类型的牌,并不需要保存过多的数据;而找牌则是根据提供的牌类型及牌的张数,结合牌的类型的一些特征找出此种类型的所有可能的牌数据。实现此算法首先构造map<int,vector<int>>结构用来保存牌值所对应的所有索引值,因为返回值需要的是具体的索引值,由于vector<int>传递的牌数据是排好序的,所以将vector<int>结构转换为map<int,vector<int>>结构比较容易实现;然后根据提供的牌类型及牌的张数组合出所有可能与提供牌的类型一样的牌数据,用vector<int>线性保存返回其值即可。
5.3.7 重玩模块
当有一位玩家出完手中的所有牌时,游戏结束,为了方便玩家继续游戏,设计重玩模块。重玩设计起来比较简单,在游戏结束后在游戏界面的中心位置添加准备菜单项,当玩家单击菜单项后先绘制准备图片提示重玩准备中,然后让准备精灵执行一个延时动作跟回调动作,在其回调函数ShowBack()中重选构造一个PlaygameScene对象,然后让导演类CCDirector重选运行此场景,这样玩家可重新此游戏。
6 软件测试
6.1 测试环境
对测试环境的要求见表6-1。
6.2 测试准则
软件测试设定的一些标准及要求见表6-2。
6.3 功能测试
6.3.1 登录验证功能的测试
在斗地主网络版中,对于每个玩家都需要登录验证方可进入游戏。登录前若没有账号需先注册,详情见图6.1。
图6.1 用户注册界面
注册成功后,开始验证账号密码,若账号密码正确则进入游戏界面,否则继续停留在登录主界面,详情见图6.2。
图6.2 登录前与登录后的界面
6.3.2 自动发牌功能的测试
在接受到服务器发送的发牌指令后,客户端会自动发牌至游戏界面,发牌过程具有动态性(动态添加牌)、抖动性(牌的起始位置会随牌的数量发生改变)、随机插入行(不按大小发牌,发牌后插入到相应位置),详情见图6.3和图6.4。
图6.3 发牌过程1
图6.4 发牌过程2
6.3.3 叫分功能的测试
玩家如果没有主动叫地主的权利时,玩家需根据上家所叫分数禁用掉部分叫分菜单项,客户端会显示各个玩家的叫分信息,详情见图6.5和图6.6。
图6.5 本家开始叫分
图6.6 下家轮换叫分