求一个24点游戏,C++编写的

如题所述

#include <iostream>
#include <string>
#include <time.h>
using namespace std;
const int Num=1000;
int j=2;
int randNum[Num];
int card[52];
double cardvalue[52];
string cardname[52];
string color[4] ={"红心","黑桃","梅花","方片"};
int Pcard[9];
int Ccard[9];
int Pcardnum=0;
int Ccardnum=0;
double Psum=0;
double Csum=0;
void Card() //对牌初始化
{
for(int i=0;i<13;i++){
card[i]=i+1;
card[i+13]=i+1;
card[i+26]=i+1;
card[i+39]=i+1;
}
for(int i=0;i<52;i++){
if(card[i]<=10)
cardvalue[i]=card[i];
else
cardvalue[i]=0.5;
}
for(int i=0;i<4;i++){
cardname[0+13*i]=color[i]+"A";
cardname[1+13*i]=color[i]+"2";
cardname[2+13*i]=color[i]+"3";
cardname[3+13*i]=color[i]+"4";
cardname[4+13*i]=color[i]+"5";
cardname[5+13*i]=color[i]+"6";
cardname[6+13*i]=color[i]+"7";
cardname[7+13*i]=color[i]+"8";
cardname[8+13*i]=color[i]+"9";
cardname[9+13*i]=color[i]+"10";
cardname[10+13*i]=color[i]+"J";
cardname[11+13*i]=color[i]+"Q";
cardname[12+13*i]=color[i]+"K";
}
srand((int)time(0));
for(int i=0;i<Num;i++)
randNum[i]=rand()%52;
}
string Pshowcard(int * a) //以字符串的形式返回玩家的牌
{
string Presult=" ";
for(int i=0;i<Pcardnum;i++)
Presult += cardname[a[i]];
return Presult;
}
string Cshowcard(int * a) //以字符串的形式返回电脑的牌
{
string Cresult=" ";
for(int i=0;i<Ccardnum;i++)
Cresult += cardname[a[i]];
return Cresult;
}
double Pcardsum(int * a) //返回玩家牌的总点数
{
Psum=0;
for(int i=0;i<Pcardnum;i++)
Psum += cardvalue[a[i]];
return Psum;
}
double Ccardsum(int * a) //返回电脑牌的总点数
{
Csum=0;
for(int i=0;i<Ccardnum;i++)
Csum += cardvalue[a[i]];
return Csum;
}
void Getcard() //洗牌,发牌
{
Pcard[0]=randNum[j++];
Pcard[1]=randNum[j++];
Pcardnum=2;
cout<<"玩家的牌"<<Pshowcard(Pcard)<<endl;
cout<<"玩家点数"<<Pcardsum(Pcard)<<endl;
}
void Pcardask() //玩家要牌与判断输赢
{
Pcard[Pcardnum++]=randNum[j++];
cout<<"玩家的牌"<<Pshowcard(Pcard)<<endl;
cout<<"玩家点数"<<Pcardsum(Pcard)<<endl;
Pcardsum(Pcard);
if(Psum>21){
cout<<"\n\n*****额,杯具了,你失败啦*****"<<endl;
exit(0);
}
}
void Ccardask() //电脑要牌与判断输赢
{
Ccard[0]=randNum[j++];
Ccard[1]=randNum[j++];
Ccardnum=2;
cout<<"电脑的牌"<<Cshowcard(Ccard)<<endl;
cout<<"电脑点数"<<Ccardsum(Ccard)<<endl;
Ccardsum(Ccard);
while(Csum<21 && Csum<=Psum){
Ccard[Ccardnum++]=randNum[j++];
Ccardsum(Ccard);
cout<<"电脑的牌"<<Cshowcard(Ccard)<<endl;
cout<<"电脑点数"<<Ccardsum(Ccard)<<endl;
}
if(Csum==21){
if(Psum==21){
if(Ccardnum<Pcardnum){
cout<<"\n\n*****额,杯具了,你失败啦*****"<<endl;
cout<<"电脑的牌"<<Cshowcard(Ccard)<<endl;
cout<<"电脑点数"<<Ccardsum(Ccard)<<endl;
}
else if(Ccardnum==Pcardnum){
cout<<"\n\n*****不错,平手啦*****"<<endl;
cout<<"玩家的牌"<<Pshowcard(Pcard)<<endl;
cout<<"玩家点数"<<Pcardsum(Pcard)<<endl;
cout<<"电脑的牌"<<Cshowcard(Ccard)<<endl;
cout<<"电脑点数"<<Ccardsum(Ccard)<<endl;
}
else if(Ccardnum>Pcardnum){
cout<<"\n\n*****哇,真厉害,你赢啦*****"<<endl;
cout<<"玩家的牌"<<Pshowcard(Pcard)<<endl;
cout<<"玩家点数"<<Pcardsum(Pcard)<<endl;
cout<<"电脑的牌"<<Cshowcard(Ccard)<<endl;
cout<<"电脑点数"<<Ccardsum(Ccard)<<endl;
}
}
if(Psum<21){
cout<<"\n\n*****额,杯具了,你失败啦*****"<<endl;
cout<<"电脑的牌"<<Cshowcard(Ccard)<<endl;
cout<<"电脑点数"<<Ccardsum(Ccard)<<endl;
cout<<"玩家的牌"<<Pshowcard(Pcard)<<endl;
cout<<"玩家点数"<<Pcardsum(Pcard)<<endl;
}
}
else if(Csum>21){
cout<<"\n\n*****哇,真厉害,你赢啦*****"<<endl;
cout<<"玩家的牌"<<Pshowcard(Pcard)<<endl;
cout<<"玩家点数"<<Pcardsum(Pcard)<<endl;
cout<<"电脑的牌"<<Cshowcard(Ccard)<<endl;
cout<<"电脑点数"<<Ccardsum(Ccard)<<endl;
}
else if(Csum<21 && Csum>Psum){
cout<<"\n\n*****额,杯具了,你失败啦*****"<<endl;
cout<<"电脑的牌"<<Cshowcard(Ccard)<<endl;
cout<<"电脑点数"<<Ccardsum(Ccard)<<endl;
cout<<"玩家的牌"<<Pshowcard(Pcard)<<endl;
cout<<"玩家点数"<<Pcardsum(Pcard)<<endl;
}
}
int main()
{
cout<<"***************21点游戏***************\n\n";
Card();
Getcard();
string ch;
while(1){
cout<<"是否继续要牌(y/n):"<<endl;
cin>>ch;
if(ch=="y")
Pcardask();
else if(ch=="n"){
Ccardask();
break;
}
else
exit(0);
}
return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答

求24点游戏的算法,VC++
do rslt[2]=rand()%size;while(rslt[2]==rslt[0]||rslt[2]==rslt[1]);do rslt[3]=rand()%size;while(rslt[3]==rslt[0]||rslt[3]==rslt[1]||rslt[3]==rslt[2]);} void guess::cutnumguess(int n){ guessnum[0]=n\/1000;guessnum[1]=n\/100-10*guessnum[0];guessnum[...

加减乘除求24点的游戏怎么用C语言编啊?
if((*c=='-'||*c=='+')&&(*(c+1)>='0'&&*(c+1)<='9')) flag++; if((*c>='0'&&*c<='9'||*c=='.')&&(*(c+1)=='*'||*(c+1)=='\/'||*(c+1)=='+'||*(c+1)=='-')) { flag++; break; } if((*c>='0'&&*c<='9'||*c=='.')&&*(c+1...

求算24点的算法实现C++
const int NUMBER_TO_BE_CAL = 24;double number[COUNT_OF_NUMBER];string expression[COUNT_OF_NUMBER];bool Search(int n){ if (n == 1) { if ( fabs(number[0] - NUMBER_TO_BE_CAL) < PRECISION ) { cout << ...

用扑克牌实现24点游戏,c++编写
int i1,i2,i3,i4,v,n1,n2;int num=0;int a,b;double t1,t2,t3,t4,choice[4],s1[4],s2[4][4],s3[2],t;for(;;){ cout<<"### 二十四点 ###\\n友情提示:A=1,J=11,Q=12,K=13\\n";cout<<"请给出你抽到的第一牌:";cin>>choice[0];cout<<"请给出你抽到的第二...

C++中24点算法的实现
include <string> include <cmath> using namespace std;const double PRECISION = 1E-6;const int COUNT_OF_NUMBER = 4;const int NUMBER_TO_BE_CAL = 24;double number[COUNT_OF_NUMBER];string expression[COUNT_OF_NUMBER];bool Search(int n){ if (n ...

24点游戏算法 C\/C++ 求解释,要汉语注释!!!越详细越好!!!
define RESULT 24 define LENGTH 20 double number[COUNT]; \/\/这里一定要用double,看看第一题的答案就知道为什么了 char *expression[COUNT]; \/\/保存表达式 void combine(char *exp, char *exp1, char *exp2, char *op); \/\/连接字符串 int test(int n);void combine(char *exp, cha...

求高手用c++解决二十四点的问题,具体如下
求高手用c++解决二十四点的问题,具体如下 二十四点游戏时间限制:1000ms内存限制:8196KB描述算二十四点是个很好玩的扑克牌游戏,给4张的A-K的扑克牌,分别代表1-13,随意组合这四张牌,只使用"+-*\/"的四则运算,不使用其他运... 二十四点游戏时间限制:1000 ms 内存限制:8196 KB 描述算二十四点是个很好玩的...

c++作业扑克牌24点要求:具体的图形化展示整个游戏。能够随机抽取4张牌...
void process(char c) { \/\/计算两个数的 + - * \/ 运算 int k=0;double a,b;sign.pop();if (num.top(b)==success){ \/\/判断例外 num.pop();if (num.top(a)==success) { num.pop();k=1;} } if (k) { switch (c) { case '+': num.push(a+b); break;case '-': ...

c++ 算24点 求助
我编写了一个和你思路一样的程序,也许可以对你有帮助。不过测试后,我发现其实这个思路有一个非常大的问题,它无法计算(3*4)+(3*4)=24 -_- or 240\/(9+2\/2)这样的困难的24点问题,还望你仔细思考一下,换换思路。include<iostream> using namespace std;int main(){ int i1,i2,i3,...

c++ 24点
;都是int型相除,所以极有可能会出现结果为0的状况。然后你再第二个for循环里面,sum_x[3]=sum[0][l] \/ sum[1][k]; 一旦第一个for里面有结果为0,你这里就变成除以0,然后就崩溃了。你试试把所有的数组都改成float或者double类型。然后判断值是否为24点时,用实数的方式来判断。

相似回答