纸牌游戏中的发牌如何实现???

nels1028 2001-04-05 04:40:00
纸牌游戏中的发牌如何实现???
最好写全代码谢谢。
...全文
147 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
icecloud 2001-04-09
  • 打赏
  • 举报
回复
/* 作者:冰云 */

#include <iostream.h>
#include "random.h"

class CardDeck
{
private:
int cards[52], i;
int currentCard;

public:
CardDeck(void);

void Shuffle(void);

int GetCard(void);


void PrintCard(int c);

// test
void Print(int c)
{
cout << cards[c] << "\t" ;
}

};

CardDeck::CardDeck(void)
{
int i;
for (i=0;i<52;i++)
cards[i] = i;
currentCard = 0;
}

int CardDeck::GetCard()
{
currentCard=currentCard+1;
return cards[currentCard-1];
}

void CardDeck::PrintCard (int c)
{
// bug: cannot output the value 10

char face, fsort;

if ((c+1)%13==1) face='A';
else if ((c+1)%13==11) face='J';
else if ((c+1)%13==12) face='Q';
else if ((c+1)%13==0) face='K';
else face=char((c+1)%13+48);

if (c>=0&&c<=12)
fsort = char(5) ;
else if (c>12&&c<=25)
fsort = char(4);
else if (c>25&&c<=38)
fsort = char(3);
else
fsort = char(6);

if (face!=58)
cout << fsort << ":" << face << "\t" ;
else cout << fsort << ":" << "10" << "\t" ;
}


void CardDeck::Shuffle()
{
static RandomNumber rnd;
int i, temp, x;
for (i=0;i<52;i++)
{
x = rnd.Random(51);
temp = cards[i];
cards[i] = cards[x];
cards[x] = temp;
}
currentCard = 0;
}

void DealHand(CardDeck& d, int n)
{
int i, j, temp;
int icard[52];

for (i=0;i<n;i++)
{
icard[i] = d.GetCard();
}

for (i=0;i<n-1;i++)
{
for (j=i+1;j<n;j++)
{
if (icard[i]>icard[j])
{
temp = icard[i];
icard[i] = icard[j];
icard[j] = temp;
}

}
}

for (i=0;i<n;i++)
{
d.PrintCard(icard[i]);
}

}

void main()
{
int i;
CardDeck card;
card.Shuffle();
// for (i=0;i<52;i++) card.Print(i);
cout << "Please input the number of cards you want to get:" ;
cin >> i ;

cout << "You've got the cards:" << endl;
DealHand(card, i);
cout << endl;
}

icecloud 2001-04-09
  • 打赏
  • 举报
回复
/*以下是random.h*/
#include <time.h>

const unsigned long maxshort = 65536L;
const unsigned long multiplier = 1194211693L;
const unsigned long adder = 12345L;

class RandomNumber
{
private:
unsigned long randSeed;

public:
RandomNumber(unsigned long s = 0);
unsigned short Random(unsigned long n);
double fRandom(void);
};

RandomNumber::RandomNumber(unsigned long s)
{
if (s==0)
randSeed = time(0);
else
randSeed = s;
}

unsigned short RandomNumber::Random(unsigned long n)
{
randSeed = multiplier * randSeed + adder;
return (unsigned short)((randSeed >> 16) % n);
}

double RandomNumber::fRandom(void)
{
return Random(maxshort)/double(maxshort);
}
icecloud 2001-04-08
  • 打赏
  • 举报
回复
要用到random函数。
c++的代码你要不要?
(我们的作业)
nels1028 2001-04-08
  • 打赏
  • 举报
回复
OK 谢谢

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧