對洗髮撲克牌程序的個人理解

對洗髮撲克牌程序的個人理解
洗撲克牌的過程就想當於對52張牌進行重新排序,然後把牌放在一邊,等待着發牌。
在主程序裏我們先定義一副牌,牌有四種花色,每種花色有13張。
<span style="font-size:18px;">int main()
{
	const char *suit[4]={"紅桃","黑桃","草花","方片"};
	const char *face[13]={"Ace","Deuce","三","四","五","六","七","八","九","十","Jack","Queen","King"};
	int pai[4][13]={0};
	srand(time(NULL));
	xipai(pai);
	fapai(pai,suit,face);
	
}</span>

在程序裏我們可以考慮用4*13的2維數組pai[4][13]來存這52張牌。每一行代表一個花色的13張牌。然後把第一張牌隨機的放入一個位置,再把第二張牌隨機的放入一個位置,最後52張牌都放入了這個2維數組裏了。這與實際的洗牌過程是反着的,實際中我們洗牌相當於把紅桃3放在最上面,黑桃2放在紅桃三下面等等,最後把最後一張牌放在最下面。而在程序裏,我們相當於牌的位置固定了,即這個二維數組(它表示,第一行爲紅桃1~13,第二行爲黑桃1~13,第三行爲草花1~13,第四行爲方片1~13),我們是在數組裏存下牌放的順序,假設pai[0][0]=32,即表示紅桃1前面有31張牌,發牌的時候紅桃1是發出的第32張牌。
如何把放牌的順序存入數組裏呢,我們要利用隨機數來實現。把2維數組初始化爲0。首先隨機的產生一對數組的行ROW1和列COL1,然後把1存入pai[ROW1][COL1],再隨機的產生一對行ROW2和列COL2,如果pai[ROW2][COL2]與上面的位置不衝突,即pai[ROW2][COL2]=0,就把2存入pai[ROW2][COL2];如此循環下去,直到把52存入最後一個數組元素。
<span style="font-size:18px;">void xipai(int fangpai[][13])
{
	int row;
	int column;
	
	for (int card=1;card<=52;card++)
	{
		do {
			row=rand()%4;
		 	column=rand()%13;
		}while(fangpai[row][column]!=0);
	
		fangpai[row][column]=card;
	}
}</span>
發牌的時候,我們發的第一張牌爲pai[ ROW_x][COL_x ]=1的牌,行號ROW_x代表花色,列號CLO_x代表牌面爲1~13中的哪一個。用如下的循環的實現發牌,
<span style="font-size:18px;">void fapai(const int fangpai[][13],const char *fsuit[4],const char *fface[13])
{
	for (int card=1;card<=52;card++)
	{
		for (int row=0;row<=3;row++)
		{
			for (int column=0;column<=12;column++)
			{
				if(fangpai[row][column]==card)
				{
					printf("%s %s %c",fsuit[row],fface[column],card%2==0 ? '\n': '\t');
				}
			}
		}
	}
}
</span>

整個程序爲:
</pre><span style="font-size:18px;"></span><pre name="code" class="cpp"><span style="font-size:18px;">#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void xipai(int fangpai[][13])
{
	int row;
	int column;
	
	for (int card=1;card<=52;card++)
	{
		do {
			row=rand()%4;
		 	column=rand()%13;
		}while(fangpai[row][column]!=0);
	
		fangpai[row][column]=card;
	}
}


void fapai(const int fangpai[][13],const char *fsuit[4],const char *fface[13])
{
	for (int card=1;card<=52;card++)
	{
		for (int row=0;row<=3;row++)
		{
			for (int column=0;column<=12;column++)
			{
				if(fangpai[row][column]==card)
				{
					printf("%s %s %c",fsuit[row],fface[column],card%2==0 ? '\n': '\t');
				}
			}
		}
	}
}


int main()
{
	const char *suit[4]={"紅桃","黑桃","草花","方片"};
	const char *face[13]={"Ace","Deuce","三","四","五","六","七","八","九","十","Jack","Queen","King"};
	int pai[4][13]={0};
	srand(time(NULL));
	xipai(pai);
	fapai(pai,suit,face);	
}</span>
運行如下:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章