发牌原程序见我的空间(http://hi.baidu.com/crazycola/blog/item/52402bd4b3f68705a08bb746.html),可选是否包含大小王,可选发牌列数。
以下为改过的版本,不包含大小王(即总数52张),只能发4堆。
另外附加了用户菜单,原程序中不含菜单部分。
代码如下:
---------------------------------------
#include
#include
#include
int menu()
{
int choice;
printf("1 发牌/0 退出:");
scanf("%d",&choice);
return choice;
}
void main( void )
{
int i1, j, total;
int *iArr;
int tag = 0;
char* pok_C[] = { "黑桃", "红桃", "梅花", "方块" };
char* pok_N[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
if(!menu()) exit(0);
total = 52;
srand( (unsigned)time( NULL ) );
iArr = (int*)malloc(total*sizeof(int));
for( i1=0; i1
iArr[i1]=rand()%total;
if( i1==0 ) continue;
do {
tag = 0;
for( j=0; j
{
iArr[i1]=rand()%total;
tag = 1;
}
} while( tag==1 );
}
for( i1=0; i1
printf("%s%s\t",pok_C[iArr[i1]%4],pok_N[iArr[i1]%13]);
if(i1%4==3) printf("\n");
}
free(iArr);
}
#include
#include
#include
using namespace std;
void DealCards();
int main()
{
// step 1: input state.
printf("please input 1 for deal cards, 0---exit.");
int i = 0;
scanf("%i", &i);
printf("\n");
if (i == 0)
{
return 0;
}
else
{
// step 2: deal cards
DealCards();
}
return 0;
}
void DealCards()
{
// step 1: initial cards
char p[52][5];
vector
int i, j;
for (i = 1; i <= 13; i++)
{
for (j = 0; j < 4; j++)
{
switch (j)
{
case 0:
sprintf(p[j * 13 + i - 1], "%s_%2i", "P", i);
break;
case 1:
sprintf(p[j * 13 + i - 1], "%s_%2i", "H", i);
break;
case 2:
sprintf(p[j * 13 + i - 1], "%s_%2i", "C", i);
break;
case 3:
sprintf(p[j * 13 + i - 1], "%s_%2i", "D", i);
break;
default:
break;
}
}
}
// step 2: generate random number
for (i = 0; i < 52; i++)
{
vip.push_back(i);
}
random_shuffle(vip.begin(), vip.end());
// step 3: output cards
for (i = 1; i <= 13; i++)
{
for (j = 0; j < 4; j++)
{
printf(p[vip[j * 13 + i - 1]]);
printf(" ");
}
printf("\n");
}
}