📄 扑克牌游戏.cpp
字号:
m_cardarray[index].showcard(); // 输出每一张牌
newline++; // 行数加一
index++;
}
}
void Deck::SendDeck1() // 把牌分发给四个玩家(删牌后的)
{
Playing_Card wan[3][13]; //定义一个二维数组表示四个玩家
int p,t;
int w1=0,w2=0,w3=0,w4=0;
cout<<"玩家1的牌:"<<endl;
for(p=0,t=0;t<52;p++,t+=4) // 为各玩家发牌并输出
{
wan[0][p]=m_cardarray[t]; //玩家1的牌
wan[0][p].showcard(); //输出玩家1的牌
w1+=m_cardarray[t].getvalue();
}
cout<<endl;
cout<<"玩家2的牌:"<<endl;
for(p=0,t=1;t<52;p++,t+=4)
{
wan[0][p]=m_cardarray[t]; //玩家2的牌
wan[0][p].showcard(); //输出玩家2的牌
w2+=m_cardarray[t].getvalue();
}
cout<<endl;
cout<<"玩家3的牌:"<<endl;
for(p=0,t=2;t<52;p++,t+=4)
{
wan[0][p]=m_cardarray[t]; //玩家3的牌
wan[0][p].showcard(); //输出玩家3的牌
w3+=m_cardarray[t].getvalue();
}
cout<<endl;
cout<<"玩家4的牌:"<<endl;
for(p=0,t=3;t<52;p++,t+=4)
{
wan[0][p]=m_cardarray[t]; //玩家4的牌
wan[0][p].showcard(); //输出玩家4的牌
w4+=m_cardarray[t].getvalue();
}
char r;
cout<<endl<<"要输出各玩家的总点数吗?要按Y不要按N。";
cin>>r;
r=toupper(r);
if(r=='Y') //输出四个玩家的总点数
{
cout<<"玩家1的总点数:"<<w1<<endl;
cout<<"玩家2的总点数:"<<w2<<endl;
cout<<"玩家3的总点数:"<<w3<<endl;
cout<<"玩家4的总点数:"<<w4<<endl;
}
else cout<<endl;
}
void Deck::SendDeck2() // 把牌分发给四个玩家(不删牌的)
{
Playing_Card wan[3][13]; //定义一个二维数组表示四个玩家
int p,t;
int w1=0,w2=0,w3=0,w4=0;
cout<<"玩家1的牌:"<<endl;
for(p=0,t=0;t<54;p++,t+=4) // 为各玩家发牌并输出
{
wan[0][p]=m_cardarray[t]; //玩家1的牌
wan[0][p].showcard(); //输出玩家1的牌
w1+=m_cardarray[t].getvalue();
}
cout<<endl;
cout<<"玩家2的牌:"<<endl;
for(p=0,t=1;t<54;p++,t+=4)
{
wan[0][p]=m_cardarray[t]; //玩家2的牌
wan[0][p].showcard(); //输出玩家2的牌
w2+=m_cardarray[t].getvalue();
}
cout<<endl;
cout<<"玩家3的牌:"<<endl;
for(p=0,t=2;t<54;p++,t+=4)
{
wan[0][p]=m_cardarray[t]; //玩家3的牌
wan[0][p].showcard(); //输出玩家3的牌
w3+=m_cardarray[t].getvalue();
}
cout<<endl;
cout<<"玩家4的牌:"<<endl;
for(p=0,t=3;t<54;p++,t+=4)
{
wan[0][p]=m_cardarray[t]; //玩家4的牌
wan[0][p].showcard(); //输出玩家4的牌
w4+=m_cardarray[t].getvalue();
}
char r;
cout<<endl<<"要输出各玩家的总点数吗?要按Y不要按N。";
cin>>r;
r=toupper(r);
if(r=='Y') //输出四个玩家的点数
{
cout<<"玩家1的总点数:"<<w1<<endl;
cout<<"玩家2的总点数:"<<w2<<endl;
cout<<"玩家3的总点数:"<<w3<<endl;
cout<<"玩家4的总点数:"<<w4<<endl;
}
else cout<<endl;
}
int getRandInt(int min, int max) //随机抽取一个整数并返回这个数
{
int numToReturn;
numToReturn = rand();
numToReturn = numToReturn % (max - min + 1) + min;
return numToReturn;
}
void Deck::DeckShuff( int times) //洗牌,times为洗牌次数
{
int x, split; //split是分开成两部分的位置,如上部分、下部分
Center_Text(" 洗牌"); //输出洗牌
cout << endl;
for(x=0;x<=times;x++) // 重复洗牌
{
split = getRandInt(20,35); // 取20-50间的随机数
Deck topdeck; // 建两副新的牌
Deck bottomdeck;
int i;
int bottomdeckindex = 1;
int topdeckindex = 1;
for(i=0;i<=split - 1;) // 把牌移到上部
{
topdeck.m_cardarray[topdeckindex] = this->m_cardarray[i];
topdeckindex++;
i++;
}
for(i=(split);i< 54;) // 把剩余的牌移到下部分
{
bottomdeck.m_cardarray[bottomdeckindex] = this->m_cardarray[i];
bottomdeckindex++;
i++;
}
int deckoutindex = 0; // 置指针为空
int numcardstomovetop;
int numcardstomovebottom;
int j;
int h = 0;
bottomdeckindex = 54 - split; // 指针指向最底部的牌
topdeckindex =split; // 指针指向最上部的牌
while(deckoutindex <= 53)
{
numcardstomovetop = getRandInt(2,7); // 从上部分抽取的张数,是2-7之间的随机数
numcardstomovebottom = getRandInt(2,7); // 从下部分抽取的张数,是2-7之间的随机数
for(j=0;j <=numcardstomovebottom;j++) // 从下部分移到新的牌
{
if(bottomdeckindex > 0) // 确定牌有效
{
this->m_cardarray[deckoutindex] = bottomdeck.m_cardarray[bottomdeckindex];
deckoutindex++;
bottomdeckindex--;
}
for(h=0;h<=numcardstomovetop;h++) // 从上部分移到新的牌
{
if((topdeckindex > 0) && (deckoutindex <=54)) // 确定牌有效以及位置
{
this->m_cardarray[deckoutindex]=topdeck.m_cardarray[topdeckindex];
deckoutindex++;
topdeckindex--;
}
}
}
}
}
this->m_lastdelt = -1; // 返回一副洗好的扑克牌
}
void prog_close() //停止程序,显示信息
{
cout << endl << endl;
cout << " 按回车结束。" << endl; // 输出提醒信息
cout << endl << endl;
Get_Key(); // 输入字符并取字符
cin.get();
}
void Deck::Remove_Card() // 任意删去一张牌
{
int m;
m=getRandInt(0,53); //取随机数(从0到53)
while(m<53){
m_cardarray[m]=m_cardarray[m+1]; //删去一张牌后重新附值
m++;
}
}
void Deck::showremainingDeck() // 显示删去一张牌后剩下的牌
{
int index = m_lastdelt + 1;
int newline = 0;
Center_Text("牌从头到尾排列"); // 输出信息
cout << endl;
while(index<53)
{
if(newline % 11 == 0) cout << endl; // 每11张牌后换行
m_cardarray[index].showcard(); // 显示每张牌
newline++;
index++;
}
}
void Deck::showleftdeck() //删去已发的牌后并显示剩下的牌
{
int index = m_lastdelt+1;
int newline = 0;
Center_Text("扑克牌从头到尾排列"); // 输出提醒信息
cout << endl;
while(index<=53)
{
if(newline % 11 == 0) cout << endl; // 每11张牌后换行
m_cardarray[index].showcard(); // 显示剩下的牌
newline++;
index++;
}
}
void Deck::Deal_One() //发一张牌
{
if(m_lastdelt != 53)
{
m_lastdelt++;
cout.width(5); //输出空格
switch(m_lastdelt%4){
case 0: cout <<" 发牌 玩家1的牌:";break;
case 1: cout <<" 发牌 玩家2的牌:";break;
case 2: cout <<" 发牌 玩家3的牌:";break;
case 3: cout <<" 发牌 玩家4的牌:";break;
default:break;
};
m_cardarray[m_lastdelt].showcard(); //显示这张牌
}
else
{
cout << "出错!"; //输出错误信息
prog_close(); //终止程序
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -