1.程序说明
本程序完成两个功能:洗牌与对抗。两个功能分别对应两种要求。
2 。程序设计要求
(1)增加大小王
(2)将完成的牌平均分成4组,并完成将花色相同的牌按大小排列起来;根据牌点的大小排列起来。
(3)4组牌可以依次删除指定的牌,如红桃5,黑桃A等,并将余牌显示,即模仿4个人依次出牌。
(4)将双方出的牌扩大为两张,若出现一组对子,则对子牌点大于任何单牌,若双方均为对子,则比较牌点之和。
(5)在一开始设置总赌资,根据输赢及下注的多少统计赌资,同时统计输赢的结果。
(6)出牌时,先显示自己的牌点,然后根据自己的牌来确定是否加注,即拿到好牌时,可再继续加注。
(7)设计程序,使高级玩家可以利用输入一键(如H键),然后输入密码来看自己的下一张牌,如不好,则可以再要,知道满意为止。
(8)可以按任意键(如C)来查看计算机的牌,然后决定自己的赌注。
#include
#include
#include
#include
using namespace std;
void ProgramInit(); //显示本程序信息
void DeckMakeDriver(); //完成洗牌和删除牌的功能
int GetRandInt(int min,int max); //获得随机数
void PlayCard();
class CCard //扑克牌类
{
private:
char szFace[3]; //扑克牌的数字大小
char chSuit; //扑克牌的花色(黑,红,梅,方)
int nNumber; //**返回牌面的大小(本成员数据函数用于对抗游戏)
public:
CCard();
void ShowCard();
void CardMake(int);
int GetCardNum();
};
CCard::CCard() //构造函数
{
int i;
for(i=1;i<3;) //初始化扑克牌的牌的大小(为空)
{
szFace[i]=' ';
i++;
}
chSuit=' '; //初始化牌面花色
}
int CCard::GetCardNum(){return nNumber;}//**返回牌面的大小(本成员函数用于对抗游戏)
void CCard::ShowCard()//显示牌面
{
cout<}
void CCard::CardMake(int num)
{
int i=0;
char j;
int face_num=num%13; //每种花色13张牌
nNumber=face_num;
switch(face_num)
{
case 0: strcpy(szFace,"A");break; //当牌面为非数字情况时
case 9: strcpy(szFace,"10");break;
case 10: strcpy(szFace,"J");break;
case 11: strcpy(szFace,"Q");break;
case 12: strcpy(szFace,"K");break;
default://牌面为数字时
j=char(face_num +49);
if(i<3)
{
szFace[i]=' '; i++;
szFace[i]=j; i++;
szFace[i]=NULL;
break;
}
}
if(num<=12)chSuit=6;
if(num>12&&num<=25)chSuit=3;
if(num>25&&num<=38)chSuit=5;
if(num>38&&num<=51)chSuit=4;
}
class CDeck //1副扑克牌(52张)
{
protected:
CCard CardArray[52]; //52个扑克牌对象
int nLastDelt;//最后
public:
CDeck(){} //构造函数
void MakeDeck(); //生成1副扑克牌
void DealOne(); //删除1张牌
void ShowDeck(); //显示这1副牌
void DeckShuff(int); //洗牌
};
void CDeck::MakeDeck() //产生1副牌(52)张
{
nLastDelt=51;
while(nLastDelt>-1)
{
CardArray[nLastDelt].CardMake(nLastDelt);//调用CCard类成员函数
nLastDelt--;
}
}
void CDeck::ShowDeck() //显示牌面
{
int nIndex=nLastDelt+1;
int newline=0;
cout< while(nIndex<=51)
{
if(newline%13==0)cout< CardArray[nIndex].ShowCard(); //显示牌面
newline++;
nIndex++;
}
}
void CDeck::DeckShuff(int times) //洗牌次数
{
int split; //spilt是分开成两部分的位置,如上部分,下部分
cout<<"\n\t\t洗牌后......\n";
for(int i=0;i<=times;i++) //每次循环洗1次牌
{
split=GetRandInt(20,35);
CDeck topdeck; //将分开的牌组成两副牌
CDeck bottomdeck;
int bottomdeckindex=1;
int topdeckindex=1;
for(int j=0;j<=split-1;j++) //第1副牌赋值
{
topdeck.CardArray[topdeckindex]=this->CardArray[j];
topdeckindex++;
}
for(int k=(split);k<52;k++) //第2副牌赋值
{
bottomdeck.CardArray[bottomdeckindex]=this->CardArray[k];
bottomdeckindex++;
}
int deckoutindex=0;
int numcardstomovetop;
int numcardstomovebottom;
bottomdeckindex=52-split;
topdeckindex=split;
while(deckoutindex<=51)
{
numcardstomovetop=GetRandInt(2,7); //从上部分抽取的张数是2~7之间的随机数
numcardstomovebottom=GetRandInt(2,7);
for(j=0;j<=numcardstomovebottom;j++)
{
if(bottomdeckindex>0)
{//将下部分的牌还原
this->CardArray[deckoutindex]=bottomdeck.CardArray[bottomdeckindex];
deckoutindex++;
bottomdeckindex--;
}
for(int l=0;l<=numcardstomovetop;l++)
{
if((topdeckindex>0)&
--------------------next---------------------
阅读(1860) | 评论(0) | 转发(0) |