该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
2.4 打牌阶段
这是整个程序中最复杂、最重要的一个阶段,涉及到牌型判定、大小比较、胜负判定和出牌策略等众多环节。
2.4.1 牌型判定
我编写这个函数的思路是:按牌的张数(即strlen(r))枚举,若张数为1,必为单张;若张数为2,可能是对子、王炸或者不合法牌型。以此类推到20张。代码的前面一部分如下:
int judge(string r,string t) //判断r是什么牌型,返回到t,返回牌型大小
{
string s;
int lv;
uplist(r,s);
switch(strlen(s))
{
case 1:add(t,"1");return level(s[0]);
case 2:
if (s[0]==s[1]) {add(t,"2");return level(s[0]);}
if ((s[0]=='D' && s[1]=='X')||(s[0]=='X' && s[1]=='D')) {add(t,"DX");return 16;}
break;
case 3:
if (s[0]==s[1] && s[1]==s[2]) {add(t,"3");return level(s[0]);}
break;
……
}
string是自定义类型,即typedef char string[256];
add()是自定义函数,add(t,s)即t=s,add(t,s1,s2)即t=s1+s2;
level()是自定义函数,返回牌的符号c代表的点数大小,即
c '3' '4' '5' ... '9' '0' 'J' 'Q' 'K' 'A' '2' 'X' 'D'
level(c) 3 4 5 ... 9 10 11 12 13 14 15 16 17