永发信息网

用c语言实现一个电脑坐庄,你当玩家的21点游戏这是一个C语言程序,跪求C语言大神解答!!!

答案:2  悬赏:0  手机版
解决时间 2021-02-02 00:27
用c语言实现一个电脑坐庄,你当玩家的21点游戏这是一个C语言程序,跪求C语言大神解答!!!
最佳答案
#include
#include
#include
#define NULL 0
int compare(char sum1,char sum2)
{
if(sum1>=sum2)
return 1;
else
return 0;

}
int breakal(int sum)
{
if(sum>21)
return 0;
else
return 1;
}
char change(int card)
{
char ch,n,m,x;
switch(card)
{
case 1: ch='A';
break;
case 10:
{
n=1+int(rand()/(RAND_MAX+1.0));
if(n==1)
ch='K';
else
{
m=1+int(rand()/(RAND_MAX+1.0));
if(m==1)
ch='Q';
else
{
x=1+int(rand()/(RAND_MAX+1.0));
if(x==1)
ch='J';
}
}
break;
}
} //以上switch语句用于将数字转换成字符
return ch;
}
void game()
{
int i,k,n;
char host_ch,player_ch,host_card[15],player_card[15];
int host_sum=0,player_sum=0;
srand(time(NULL));
for(i=0;i<2;i++)
{
int (10.0*rand()/(RAND_MAX+1.0));
player_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0));
player_ch=change(player_card[i]);
if(player_card[i]>1 && player_card[i]<10) //输出玩家抽到的牌的点数
printf("您抽到的第%d张牌是%d\n",i+1,player_card[i]);
else if(player_card[i]==10)
printf("您要到的第%d张牌是%c\n",i+1,player_ch);
else
printf("您要到的第%d张牌是A\n",i+1);
if(player_ch=='A') //询问判断玩家的A的点值为1或11
{
printf(" 您有一张A,您想要A作1还是11?\n");
printf(" 1. 1\n" );
printf(" 2. 11\n");
if(scanf("%d",&n) && n==1)
player_card[i]=1;
else
player_card[i]=11;
}

host_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0));
host_ch=change(host_card[i]);
if(host_ch=='A') //电脑自动判断庄家的A的点值为1或11
{
k=1+int(rand()/(RAND_MAX+1.0));
if(k==1)
host_card[i]=11;
else
host_card[i]=1;
}

player_sum+=player_card[i]; //分别对庄家和玩家的点数求和
host_sum+=host_card[i];
}
printf("您现在的总面值为%d\n",player_sum);//输出玩家的总面值
for(i=2;i<5;i++)
{
if(host_sum<18 && host_sum>0)//电脑自动判断庄家是否要牌
{
host_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0));
host_ch=change(host_card[i]);
if(host_ch=='A') //电脑自动判断庄家的A的点值为1或11
{
k=1+int(rand()/(RAND_MAX+1.0));
if(k==1)
host_card[i]=11;
else
host_card[i]=1;
}
host_sum+=host_card[i];
}
printf("您还要继续要牌吗?\n");
printf(" 1.要\n");
printf(" 2.不要\n");
scanf("%d",&k);
if(k==1)
{
{
player_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0));
player_ch=change(player_card[i]);
if(player_ch=='A') //询问判断玩家的A的点值为1或11
{
printf("您有一张A,您想要A作1还是11?\n");
printf(" 1. 1\n" );
printf(" 2. 11\n");
if(scanf("%d",&n) && n==1)
player_card[i]=1;
else
player_card[i]=11;
printf("您要到的第%d张牌是A\n",i+1);
}
else
printf("您要到的第%d张牌是%d\n",i+1,player_card[i]);
player_sum+=player_card[i];
if(i==4)
printf("您手中已有5张牌,一决胜负的时刻到啦!\n");
if(breakal(host_sum)==0)
{
if(breakal(player_sum)==0)
{
printf("庄家爆牌了,您也爆牌了!庄家的牌面值是%d,您的牌面值是%d\n",host_sum,player_sum);
printf("\nYou lose..\n");
break;
}
}
else
if(breakal(player_sum)==0)
{
printf("您爆牌了!您的牌面值是%d\n \nYou lose..\n",player_sum);
break;
}
}
if(breakal(host_sum)==0)
{
printf("庄家爆牌了!庄家的牌面值是%d\n",host_sum);
printf("\nCongratulations! YOu win!\n");
break;
}
}
else
{
printf("庄家的牌面值是%d,您的牌面值是%d\n",host_sum,player_sum);
if(compare(host_sum,player_sum)==1)
printf("\nYou lose..\n");
else
printf("\nCongratulations! You win!\n");
break;
}

}
}
int main()
{
kaishi:
int n;
printf(" 欢迎进入21点游戏!\n");
printf(" ************************************\n");
printf(" 1.开始游戏\n");
printf(" 2.退出游戏\n");
printf(" ************************************\n");
if(scanf("%d",&n)&&n==1)
game();
else if(n==2)
{
printf(" ******************************\n");
printf(" 游戏结束!祝您愉快!\n");
printf("\n\n");
printf(" 再见!\n");
printf(" ******************************\n");
return 0;
}
goto kaishi;
}
全部回答
日落
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
等因奉此的意思是什么啊?知道的请说下!
你好.那个电脑能开机,不能看见屏幕但是用灯
卫辉市华夏旅行社
东北大豆为什么市场打不开,和美国大豆差距到
鼻中隔的意思是什么啊?知道的请说下!
尔马林液和西施兰夏露哪个好啊
楚王安排酒席招待晏子,改成双重否定句
如果我所乘坐的车严重超载了,我怎么举报他?
国产的电影 唇唇欲动是蕾丝电影么
最好看的iphone是哪一款?
南京药材批发市场有收购野生水蛭吗
奥司利他 减肥药
梦见凤凰在天上飞后来落在别人房顶上,怎么解
宝宝有血管瘤做手术费用大概多少
女性正常卵细胞中的染色体组成可表示为CA. 22
推荐资讯
美的C21-RK2106加热慢
女生发表说说亮剑深蓝,构筑海上长城是什么意
在盘锦学开车现在是多少钱啊,哪家驾校在兴隆
东方沸点教育(渭南富平县)地址在什么地方,我
大连轻工业学院附近哪个店烫发比较好
屏幕滚动条总是自动往上
Celia(西莉亚) 和 Claire(克莱尔) 那个英
增益速递(建设路与338省道交叉口西北100米增
舞词弄札的意思是什么啊?知道的请说下!
大连绿岛海岸渔家地址在哪,我要去那里办事
速尔快递海洲分公司(海洲分公司)地址好找么,
不自信有什么害处?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?