随机事件学习笔记

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

实现原理:撇开大小王不要,剩下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);
			}
		}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值