回复 12楼 cacker
我也说说我的看法:
对于初始化游戏,就是洗牌,我想的方案是:首先给54张牌用随机函数打乱顺序,第一个人就是那第1,4,7...49z张牌;第2个人拿2,5,8,...,50张牌;第3个人拿3,6,...,51张牌(或者3个人分别拿1~17,18~34,35~51张);剩下的三张是地主的。在使用随机函数时,随机种子一定每次要改变,比如说我们在玩这一局的过程中时,就确定下一次用于洗牌的53个随机种子。
对于排序,不知道就按照从大到小的顺序进行排序。
我觉得对于数据的储存用链表也不错,好像要求用先有的知识来实现的话,那用数组好了。
int PlayerNowCard[3][16]。当然3是分别表示3个玩家了,那个16是一共有16种牌(不要分花色,3~10,J,Q,K,A,2,w(小王),W,其中小标为0时表示当前玩家手中还剩的牌的数目)中每种牌的数目。如玩家1手中有3张k,那么有 PlayerNowCard[0][k对应的编号] 应该等于 3。
对于出牌时的检查和比较大小 ,类似于上面的。由于一次最多可以出12种牌,因此我觉得只要定义一个2维数(刚出完的牌和将要出的牌)组就好了。只有后面的人的牌比刚出完的牌大(要同一类型,炸弹除外),才可以出牌。这个数组可以是这样 int ThrowCard[2][13],其中第2维下表为0的表示这次要出牌的种数,其他合上面那个数组功能有点差别 。如有一个人出的牌是 三个5 三个6 带一对3 一张10,则有ThrowCard[0][0]=4,ThrowCard[0][1]=3(牌为3) *32 + 1(5的张数),ThrowCard[0][2]=5(牌为5) *32 + 3(5的张数),ThrowCard[0][3]=6(牌为6) *32 + 3(5的张数),ThrowCard[0][4]=10(牌为10) *32 + 1(10的张数)。这样的话,在比较牌的大小可能要简单些。