题目来源仍然是小学期,就当娱乐
贴代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//函数声明
void sortCards(int *, int);
void showCards(int *, int);
void changeCard(int);
int getOneCard();
int Cards[55] = { 0 };//用于记录每张牌是否被用过( 丢弃cards[0]
int main() //rand()%m+1,产生0- m-1的随机数
{
int i, iCount = 0;
int Player_A[18] = { NULL };
int Player_B[18] = { NULL };
int Player_C[18] = { NULL };
int Ground[4] = { NULL };//Abandon all [0]
for (i = 1; i <= 3; i++)//获取底牌
{
Ground[i] = getOneCard();
}
sortCards(Ground, 4);//按牌大小排序
for (i = 1; i <= 17; i++)//为三个玩家分别发牌
{
Player_A[i] = getOneCard();
Player_B[i] = getOneCard();
Player_C[i] = getOneCard();
}
puts("Player's Cards");
sortCards(Player_A, 18);
sortCards(Player_B, 18);
sortCards(Player_C, 18);
puts("Player_A:");//打印A的牌
showCards(Player_A, 17);
puts("\n\nPlayer_B:");//打印B的牌
showCards(Player_B, 17);
puts("\n\nPlayer_C:");//打印C的牌
showCards(Player_C, 17);
puts("\n\nCards on the Ground:");
showCards(Ground, 3);//打印底牌
puts("");
system("pause");
return 0;
}
int getOneCard()//通过随机数取得一张没用过的牌
{
int iRandNum;
srand(time(0));//取时间随机数
iRandNum = rand() % 54 + 1;
while (Cards[iRandNum] == 1)//被用过的牌会重新取随机数
{
iRandNum = rand() % 54 + 1;
}
Cards[iRandNum] = 1;
return iRandNum;
}
void showCards(int *Player, int Count)//打印玩家的牌
{
int i;
for (i = 1; i <= Count; i++)
{
if (Player[i] == 53)
{
printf(" 小王", Player[i]);
}
else if (Player[i] == 54)
{
printf(" 大王", Player[i]);
}
else if (Player[i] % 4 == 0)
{
printf(" 黑");
changeCard(Player[i]);
}
else if ((Player[i] + 1) % 4 == 0)
{
printf(" 方");
changeCard(Player[i]);
}
else if (Player[i] % 2 == 0)
{
printf(" 红");
changeCard(Player[i]);
}
else
{
printf(" 梅");
changeCard(Player[i]);
}
}
}
void changeCard(int Card)//将数字和纸牌进行对换
{
Card /= 4.001;
switch (Card)
{
case 0:printf("3 "); break;
case 1:printf("4 "); break;
case 2:printf("5 "); break;
case 3:printf("6 "); break;
case 4:printf("7 "); break;
case 5:printf("8 "); break;
case 6:printf("9 "); break;;
case 7:printf("10 "); break;
case 8:printf("J"); break;
case 9:printf("Q"); break;
case 10:printf("K"); break;
case 11:printf("A"); break;
case 12:printf("2"); break;
}
}
void sortCards(int *Nums, int Length)//排序手中的牌
{
int i, j, iTemp;
for (i = 1; i <= Length - 1; i++)
{
for (j = 1; j <= Length - 2; j++)
{
if (Nums[j]>Nums[j + 1])
{
iTemp = Nums[j];
Nums[j] = Nums[j + 1];
Nums[j + 1] = iTemp;
}
}
}
}
程序有错麻烦告诉我^_^