当前位置: 代码迷 >> C语言 >> 扑克牌排序问题
  详细解决方案

扑克牌排序问题

热度:589   发布时间:2008-03-29 22:56:40.0
本来准备发个原创帖的,结果版主不承认我的是原创的,我很伤心,毕竟是1个小时的努力。我觉得没有必要拿别人的东西来说是自己做的,那样有意思吗?
----------------解决方案--------------------------------------------------------
每个牌都有一个用于排序的值,(点数<<8)+(底色<<4) + (花色),所谓的属性优先,实际就是优先级越高的属性,在排序值中位于越高的位上。
然后对这个值进行普通的排序就可以了。用快速排序即可。

比如点数:3 > 4 > 5 > 6 > 7 > 8 > 9 > 10 > J > Q > K > A > 2 > 小王 > 大王

规定一个字符串数组:
char *s[]={"2","A",...,"4","3"};
然后设置点数值=0x0到0xE的某个值,那么花色字符串表示就是s[点数值];
例如点数值是0xA; 底色是0x1, 花色是0x2,点数15个,可以4位为一种属性,这样一个值可以容纳更多的属性。

则用于排序的值就是0x0000 0A12;

[[it] 本帖最后由 hoodlum1980 于 2008-3-30 02:11 编辑 [/it]]
----------------解决方案--------------------------------------------------------
josen0205
^_^谢谢你!太佩服你了!太高深了,我都看不懂呢:-(

1.这个函数int GetCards(struct Card *CArray) 对我来说很难理解。其中
srand((unsigned)time(NULL));
    r = rand();
    m = r%325;
    n = r%324;
看不懂,什么意思呀?

2.还有下面这个也不明白
        memset(tBcolor, 0, sizeof(tBcolor));
        memset(tGrade, 0, sizeof(tGrade));
        memset(tColor, 0, sizeof(tColor));
----------------解决方案--------------------------------------------------------
回复 13# 的帖子
这个函数只是为了生成一个随即的序列,
srand((unsigned)time(NULL)); 产生随机数的种子
rand(); 生成一个随机数
int GetCards(struct Card *CArray)就是相当于洗牌了,但是这里我只洗了一次。我采用报数出列的方式,从m开始1到n报数,每报n的人出列,这样就可以得到一个序列,由于m和n都是随机的所以新的序列也是随机的。其实可以用几次这种方式打乱顺序,也就相当于我们打牌的时候多洗几次牌了。
memset()就是初始化字符串,把字符串的地址空间置空。
----------------解决方案--------------------------------------------------------
  相关解决方案