21点扑克游戏

来源:互联网 发布:深圳关键词排名软件 编辑:程序博客网 时间:2024/04/27 21:07
#include<iostream>
#include<map>
#include<string>
#include<time.h>


using namespace std;


class Game
{
public:
Game() :nPair(4), nComputer(0), nPeople(0){}
void Start();
private:
void ShowResWin()
{
cout << "系统:" << sComputer << endl;
cout << "玩家:" << sPeople << endl;
cout << "你赢了!" << endl;
}
void ShowResLose()
{
cout << "系统:" << sComputer << endl;
cout << "玩家:" << sPeople << endl;
cout << "你输了!" << endl;
}
bool deal();
void Shuffle();//洗牌
string GetPoker(int * n);//取牌
int  nPair;//扑克副数
int  nRemain;//剩余数量
map<string, int> Poker;//扑克牌
string sComputer, sPeople;
int nComputer, nPeople;//电脑,人的点数;


};
void Game::Shuffle()
{
nRemain = nPair * 52;
char ch1 = '\3';//递增依次为红桃,方片,梅花,黑桃
char ch2 = '2';//2-9计数
string str;
for (int i = 0; i < 4; ++i)
{
str += ch1 + i;
str += 'A';
Poker[str] = nPair;//数量初试化为副数
str.clear();
for (int j = 0; j < 8; ++j)
{
str += ch1 + i;
str += ch2 + j;
Poker[str] = nPair;
str.clear();


}
str += ch1 + i;
str += "10";
Poker[str] = nPair;
str.clear();
str += ch1 + i;
str += 'J';
Poker[str] = nPair;
str.clear();
str += ch1 + i;
str += 'Q';
Poker[str] = nPair;
str.clear();
str += ch1 + i;
str += 'K';
Poker[str] = nPair;
str.clear();
}
}


string Game::GetPoker(int * n)
{
reGetPoker:


int roll_n1 = rand() % 4;//随机获取红桃,黑桃,方片,梅花
int roll_n2 = rand() % 13;//随机大小
char ch1 = '\3' + roll_n1;
char ch2 = '1';
string str;


str += ch1;


switch (roll_n2)
{
case 0: str += 'A'; break;
case 9:str += "10";break;
case 10:str += 'J';   break;
case 11:str += 'Q';break;
case 12:str += 'K';break;
default:
ch2 += roll_n2;
str += ch2;
break;
}
if (0 != Poker[str])
{
--Poker[str];
--nRemain;
if (roll_n2 > 9)
roll_n2 = 9;
*n += roll_n2 + 1;
return str;
}
else
{
if (nRemain < 13)//牌数小于13,重新洗牌
{
Shuffle();
}
goto reGetPoker;
}
}


bool Game::deal()
{
int IsContinue;
string sTmp;


sComputer += GetPoker(&nComputer);
sTmp = sComputer;
sPeople += GetPoker(&nPeople);
sPeople += "   ";
while (nComputer < 17)
{
if (-1 != sComputer.find('A') && nComputer + 9 < 22 && nComputer + 9 > 16)
{
nComputer += 9;
}
else
{
sComputer += "   ";
sComputer += GetPoker(&nComputer);
}


}
sPeople += GetPoker(&nPeople);
cout << "按键1继续要牌,按键2结束要牌,其他按键退出程序:" << endl;
while (true)
{
cout << "系统:" << sTmp << endl;
cout << "玩家:" << sPeople << endl;




cin >> IsContinue;
if (IsContinue == 1)
{
sPeople += "   ";
sPeople += GetPoker(&nPeople);


if (nPeople > 21)
{
ShowResLose();
break;
}
}
else if (IsContinue == 2)
{
if (nPeople > 21)//玩家点数超过21
ShowResLose();
else if (nComputer > 21)//电脑点数超过21
ShowResWin();
else
{
if (-1 != sPeople.find('A'))//如果有A
{
if ((nPeople > nComputer) || (nPeople + 9 > nComputer && nPeople + 9 < 22))
ShowResWin();
else
ShowResLose();
}
else
{
if ((nPeople > nComputer))
ShowResWin();
else
ShowResLose();
}
}


break;
}
else //输入1,2之外的值,结束游戏
return false;
}
sPeople.clear();
sComputer.clear();
nPeople = 0;
nComputer = 0;


return true;
}


void Game::Start()
{
cout << "输入1-8设置扑克数:" << endl;
cin >> nPair;
if (nPair < 1 || nPair > 8)//输入过大或者过小,自动设置为默认值
nPair = 4;
Shuffle();
while (deal())
;
}
int main()
{
srand((unsigned)time(NULL));
Game g1;
g1.Start();






return 0;
}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 熊猫血怀二胎了怎么办 rh阴性血要二胎怎么办 全血粘度都偏高怎么办 血脂高血粘度高怎么办 全血粘度值1偏高怎么办 全血粘度3偏高怎么办 血粘度高的症状怎么办 粉瘤感染化脓了怎么办 乌药剂量用大了怎么办 水卡消磁了怎么办妙招 电卡消磁了怎么办妙招 入园磁卡消磁了怎么办 透析中静脉压高怎么办 腰间盘突出压迫神经腿疼怎么办 肺热引起的发烧怎么办 肺热引起的痘痘怎么办 冰箱压条的霉点怎么办 白色的布鞋变黄怎么办 白鞋橡胶变黄了怎么办 肝功能检查总胆汁酸高怎么办 吃丹参滴丸尿血怎么办 胰酶消化过久怎么办 抗凝血酶活性低怎么办 抗凝血酶3偏低怎么办 抗凝血酶ⅲ低 怎么办 抗凝血酶3抗原高怎么办 孕32周血压高怎么办 智齿血凝块掉了怎么办 入职体检alt偏高怎么办 剖腹产后crp值高怎么办 超敏c反应蛋白偏高怎么办 孕妇c反应蛋白高怎么办 婴儿超敏crp偏高怎么办 小孩c反应蛋白高怎么办 发烧c反应蛋白高怎么办 孕妇快生了贫血怎么办 小孩吃糖牙齿痛怎么办 前门牙掉了一块怎么办 吃冷东西牙疼怎么办 吃甜的立刻牙疼怎么办 吃甜的牙疼怎么办