标题:扑克牌排序问题
只看楼主
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
得分:0 
本来准备发个原创帖的,结果版主不承认我的是原创的,我很伤心,毕竟是1个小时的努力。我觉得没有必要拿别人的东西来说是自己做的,那样有意思吗?

只有想不到,没有做不到
2008-03-29 22:56
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
得分:0 
每个牌都有一个用于排序的值,(点数<<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]]
2008-03-30 01:11
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
得分:0 
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));
2008-03-30 15:32
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
得分:0 
回复 13# 的帖子
这个函数只是为了生成一个随即的序列,
srand((unsigned)time(NULL)); 产生随机数的种子
rand(); 生成一个随机数
int GetCards(struct Card *CArray)就是相当于洗牌了,但是这里我只洗了一次。我采用报数出列的方式,从m开始1到n报数,每报n的人出列,这样就可以得到一个序列,由于m和n都是随机的所以新的序列也是随机的。其实可以用几次这种方式打乱顺序,也就相当于我们打牌的时候多洗几次牌了。
memset()就是初始化字符串,把字符串的地址空间置空。

只有想不到,没有做不到
2008-03-30 16:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-206012-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.618964 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved