急求C++编程高手解决问题,谢谢

我现在想设计一个21点纸牌游戏,大致内容如下,希望能有好心人帮忙解答,分不多,我全部送上了~~谢谢了“21点”是一个古老的扑克牌游戏,游戏规则是:各个参与者设法使自己的牌... 我现在想设计一个21点纸牌游戏,大致内容如下,希望能有好心人帮忙解答,分不多,我全部送上了~~谢谢了

“21点”是一个古老的扑克牌游戏,游戏规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值.扑克牌的分值取他们的面值.A充当1分或者11分(由玩家自己选择一种分值),J、Q和K人头牌都是10分。
庄家对付1~7个玩家,在一局开始时,包括庄家在内的所有参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐藏的。接下来,只要愿意,各个玩家都有机会依次再拿一张牌。如果某个玩家的总分超过了21(称为“引爆”,)那么这个玩家就输了。在所有玩家都拿了额外的牌后,庄家就显示隐藏的牌。只要庄家的总分等于或小于16,那么他就必须再拿牌。如果庄家引爆了,那么还没有引爆的所有玩家就将获胜,引爆的玩家成为平局。否则,将余下的各玩家的总分与庄家的总分比较,如果玩家的总分大于庄家的总分,则玩家货胜。如果二者的总分相同,则玩家与庄家打成平局。
1.2 课程设计的要求
编写程序实现游戏,计算机作为庄家,1~7个人作为普通玩家参与游戏,游戏程序运行输出如下所示。
多少人参加游戏?(1~7):2
输入第一位玩家的姓名:张三
输入第二位玩家的姓名:李四
游戏开始
庄家:<隐藏>梅花7
张三:红桃7方块J总分值 17
李四: 红桃J红桃3总分值 13
张三,你想再要一张牌吗(y,n)?n
李四,你想再要一张牌吗(y,n)?y
李四: 红桃J红桃3梅花10 总分值 23
李四引爆!
庄家:方块10 梅花7总分值 17
张三,唉,你打平局!
李四,对不起,你输了!
你想再玩一次吗 (y,n)?

拜托高手们按照以上要求设计程序,(别画蛇添足,也别偷工减料哦~)乱设计的我不会给分,也别耽误你我的时间了吧~ 顺便说下,此程序要支持牌的花色,可能确实有点麻烦,但还是先谢谢了!!!!!

回答得好我再追加20分,谢谢了!朋友们
朋友,感谢你的解答,不过你能补上类么?作业要求要用到C++最大的特色-类 来解答,我不太懂,不过没怎么看到CLASS总不太踏实啊,呵呵,能改改么?谢谢了,改好了就把分给你了,感谢你的帮助!
展开
 我来答
xrayron
推荐于2016-09-13 · TA获得超过1052个赞
知道大有可为答主
回答量:781
采纳率:0%
帮助的人:937万
展开全部
可以了

#pragma warning(disable:4786)
#include <iostream>
#include <string>
#include <ctime>
#include <vector>
using namespace std;

#define Random4 (rand() % 4)
#define RandomN (rand() % 13)

const string varity[4] = {"黑桃", "红桃", "草花", "方块"};
const string Num[13] = {"A", "2", "3", "4", "5", "6", "7", "8", "9",
"10", "J", "Q", "K"};

class Games
{
private:
int Players;
vector<string> Poke;
vector<vector<int> > each_num;
int *Sum;
string *Name;
int i;

public:
Games()
{
srand((unsigned)time(NULL));
cout << "多少人参加游戏?(1~7):";
cin >> Players;
Poke.resize(Players+1);
Sum = new int[Players+1];
Name = new string[Players+1];
Name[0] = "庄家";
for(i = 0; i <= Players; i++)
{
Sum[i] = 0;
}
for(i = 1; i <= Players; i++)
{
cout << "输入第" << i <<"位玩家的姓名: ";
cin >> Name[i];
}
}

~Games()
{
delete []Sum;
delete []Name;
}

void InitFirst()
{
int fir, sec;
vector<int> row_num;
for(i = 0; i <= Players; i++)
{
row_num.erase(row_num.begin(), row_num.end());
fir = RandomN+1;
sec = RandomN+1;
row_num.push_back(fir);
row_num.push_back(sec);
each_num.push_back(row_num);
string Col = varity[Random4];
Poke[i].append(Col);
cout << Name[i] << ": ";
i == 0 ? (cout << "<隐藏>") : (cout << Col << Num[fir-1]);
Poke[i].append(Num[fir-1]);
Col = varity[Random4];
Poke[i].append(Col);
Poke[i].append(Num[sec-1]);
cout << "," << Col << Num[sec-1];
if(fir > 10 || sec > 10)
{
if(fir > 10)
fir = 10;
else
sec = 10;
}
Sum[i] += fir+sec;
if(i != 0)
cout << " 总分值: " << Sum[i];
cout << endl;
}

}

void AddPoint()
{
for(i = 1; i <= Players; i++)
{
char sel;
cin.sync();
cin.clear();
while(1)
{
for(vector<int>::iterator it = each_num[i].begin(); it != each_num[i].end(); it++)
{
if(*it == 1)
{
cout << Name[i] << ",你牌中的A是否要作为11(y,n)?";
cin >> sel;
if(sel == 'y' || sel == 'Y')
{
Sum[i] += 10;
cout << Name[i] << ": " << Poke[i] << "总分值: " << Sum[i] << endl;
}
}
}
cout << Name[i] << ",你想再要一张牌吗(y,n)?";
cin >> sel;
if(sel == 'n' || sel == 'N')
break;
else
{
int add = RandomN+1;
string Col = varity[Random4];
Poke[i].append(Col);
Poke[i].append(Num[add-1]);
if(add > 10)
add = 10;
each_num[i].push_back(add);
Sum[i] += add;
}
cout << Name[i] << ": " << Poke[i] << "总分值: " << Sum[i] << endl;
if(Sum[i] > 21)
{
cout << Name[i] << "引爆!" << endl;
break;
}
}
}
}

void Resault()
{
for(vector<int>::iterator it = each_num[0].begin(); it != each_num[0].end(); it++)
{
if(*it == 1)
{
if(Sum[0]+10 < 21)
{
Sum[0] += 10;
}
}
}

while(Sum[0] <= 16)
{
int add = RandomN+1;
string Col = varity[Random4];
Poke[0].append(Col);
Poke[0].append(Num[add-1]);
if(add > 10)
add = 10;
Sum[0] += add;
}
cout << Name[0] << ": " << Poke[0] << "总分值: " << Sum[0] << endl;
if(Sum[0] > 21)
{
cout << "庄家引爆!" << endl;
for(i = 1; i <= Players; i++)
{
if(Sum[i] > 21)
cout << Name[i] << ": 唉,你打平局!" << endl;
else
cout << Name[i] << ": 你赢了!" << endl;
}
}
else
{
for(i = 1; i <= Players; i++)
{
if(Sum[i] > 21 || Sum[i] < Sum[0])
cout << Name[i] << ": 对不起,你输了!" << endl;
else if(Sum[i] > Sum[0])
cout << Name[i] << ": 你赢了!" << endl;
else
cout << Name[i] << ": 唉,你打平局!" << endl;
}
}
}
};

int main()
{
Games one;
one.InitFirst();
one.AddPoint();
one.Resault();
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式