随机事件学习笔记

来源:互联网 发布:蓝色妖姬 js特效 编辑:程序博客网 时间:2024/05/17 22:20

在生活中,相信大家都有过玩牌的经历,在如今游戏和网络风靡的年代,各种单机、网游牌深受大家喜爱,为此我也研究下这个方面,现在我就针对其中的一个洗牌发牌环节作出模拟。

实现原理:撇开大小王不要,剩下52张牌,用1~52,代表52张牌,例如,第一张牌为1,一次类推,用一个4行13列的数组Card随机存储这52个数(使用rand()函数产生行和列),然后再此行和列构成的Card数组单员,依次存入1~52,(用for循环是实现))完成洗牌过程,由于是随机寻找行列,可能找到的行列单元中存有数字,则再次寻找。发牌时,如果我们用花色数组,和牌面值数组包装Card的行列下标,然后将之输出,即可得到需要的花色和牌面。大家可以再下面的代码中细细体会,如有错误,望不吝赐教!

贴出代码:

#include <stdio.h>#include <stdlib.h>#include <time.h>void shuffle(int Card[4][13]);void deal(int Card[4][13],char*wFace[13],char*wSuit[4]);void main(){int Card[4][13]={0};char*wSuit[4]={"\x3","\x4","\x5","\x6"};char*wFace[13]={"one","two","three","four","five","six","seven","eight","nine","ten","jack","quene","king"};srand(time(NULL));    shuffle(Card);deal(Card,wFace,wSuit);}void shuffle(int Card[4][13]){int card,row,column;for(card=1;card<=52;card++){row=rand()%4;column=rand()%13;while(Card[row][column]!=0)//如寻找到的数组单元不为0,则进行再次寻找{row=rand()%4;column=rand()%13;}Card[row][column]=card;}}void deal(int Card[4][13],char*wFace[13],char*wSuit[4]){int card,row,column;char c;for(card=1;card<=52;card++)for(row=0;row<4;row++)for(column=0;column<13;column++){if(Card[row][column]==card){if(card%3==0){c='\n';}else{c='\t';}printf("%5s %-8s%c",wSuit[row],wFace[column],c);}}}

原创粉丝点击