您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 药学 > C语言21点纸牌游戏系统详细设计
系统详细设计1.程序流程图:2.功能测试:2.1游戏主界面主函数流程图主函数流程开始键盘输入赌注产生随机数开始游戏键盘输入选择输入H可作弊看牌输出结果统计输赢平选择是否继续游戏循环结束图2.1进入游戏后的游戏说明及规则2.2开始游戏图2.2选择下注数目,然后随机发牌,只能见庄家一张牌,可以选择查看庄家隐藏的牌,此为游戏高级模式,开启后可选择想要的牌2.3作弊模式图2.3输入H后可开启作弊模式能看到接下来发的牌的点数2.4作弊模式下赢得游戏图2.4在作弊模式下取胜,可以接着要牌,但玩家的牌最多不能超过5张,取胜后会统计结果,询问是否继续游戏2.5非作弊模式图2.5此情况为非作弊模式,不能见庄家的牌,只能知道结果,输掉游戏后统计结果,询问是否继续2.6退出游戏图2.6此为退出游戏,输入后自动关闭窗口3.源程序:#includetime.h#includestdio.h#includeconio.h#includestdlib.hvoidWait_f(int);voidPause_f();/*暂停,按任意键继续*/intRandom_f(long,long);/*返回两个参数之间的随机数*/voidReplay_f(char*);/*询问是否重开一局*/voidHit_f(int*);/*发一张牌*/voidDeal_f(int*,int*,int*,int*);/*双方各发两张牌*/voidBet_f(int*,int*);/*接受下注的数目*/voidPrint_f(int,int,int,int);/*打印结果*/voidRules_f();/*显示游戏规则*/voidResults_f(int,int,int,int*,int*,int*,int*);/*统计结果(输赢平)*/voidHit_f2(int*npTotal,inta);intnnn;intmain(){intnPlayer=0,nCpu=0,nWin=0,nLose=0,nDraw=0,nPlayerTurns=0,nCpuTurns=0,nMoney=0,nBet;/*nPlayer--玩家手中全部牌的点数和,nPlayerTurns--玩家手中牌的数量*/charchAnswer;charmmm;inta;system(cls);/*执行系统命令清屏*/Rules_f();printf(确认是否开始游戏:);scanf(%c,&chAnswer);if((chAnswer=='y')||(chAnswer=='Y')){nMoney=100;printf(\t\t\t);Pause_f();}else{return(0);}do{system(cls);if(nMoney0){printf(您没钱了!\n);return(0);}Bet_f(&nBet,&nMoney);/*接受下注的数目*/Deal_f(&nPlayer,&nCpu,&nPlayerTurns,&nCpuTurns);/*双方各发两张牌*/printf(想看庄家牌吗?);scanf(%c,&mmm);if((mmm=='y')||(mmm=='Y')){printf(%d\n,nnn);printf(您想要哪一张牌?);scanf(%d,&a);}system(cls);do{printf(想要继续要牌吗?(H开启作弊模式)\n);/*询问玩家是否接着要牌*/scanf(%c,&chAnswer);if((chAnswer=='h')||(chAnswer=='H')){nPlayerTurns++;/*计算总牌数*/if(nPlayerTurns5)/*看是否允许再要牌*/{printf(您的牌不能超过5张!\n);}}if((nPlayerTurns6)&&(chAnswer=='h')){printf(\n);if((mmm=='y')||(mmm=='Y'))Hit_f2(&nPlayer,a);elseHit_f(&nPlayer);/*为玩家发一张牌*/}}while((chAnswer=='h')||(chAnswer=='H'));for(;(nCpu16)&&(nCpuTurns6);nCpuTurns++)/*计算机要牌的条件*/{printf(\n);printf(向庄家发一张牌:\n);Hit_f(&nCpu);/*为计算机发一张牌*/}printf(\n\n);printf(庄家为:%d点\n,nCpu);/*显示总点数*/printf(您为:%d点\n,nPlayer);printf(\n);Results_f(nPlayer,nCpu,nBet,&nMoney,&nDraw,&nWin,&nLose);/*计算最后的结果(统计输赢平的局数)*/Replay_f(&chAnswer);/*询问是否重开一局*/}while((chAnswer=='y')||(chAnswer=='Y'));Print_f(nWin,nLose,nDraw,nMoney);/*打印最后结果*/printf(\n);printf(\t\t\t\t);return(0);}voidRules_f()/*这个函数显示游戏规则*/{printf(欢迎来到21点纸牌游戏\n);printf(这里有一些简单的规则:\n);printf(1:你的几张牌中只能有一个最大的牌。\n);printf(2:如果你破产将输掉游戏。\n);printf(3:如果你赢得游戏将获得你下注两倍的钱。\n);printf(4:庄家点数等于或大于16时游戏停止。\n);printf(5:您将获得100元初始基金!\n);printf(提示:游戏中“是”输入“y”,“否”输入“n”。\n);printf(PS:请按Enter键继续游戏!\n);getchar();}voidBet_f(int*npBet,int*npMoney)/*该函数接受玩家下注,并计算赌资的总数*/{system(cls);printf(您有:%d元\n,*npMoney);printf(您将下注多少钱:);scanf(%d,npBet);if(*npBet0){*npBet=*npBet*(-1);}*npMoney=*npMoney-*npBet;}voidDeal_f(int*npPlayer,int*npCpu,int*npPlayeReturns,int*npCpuReturns)/*该函数是给计算机与玩家各发两张牌*/{intnPlayerCard1,nPlayerCard2,nCpuCard1,nCpuCard2;*npPlayeReturns=2;*npCpuReturns=2;nPlayerCard1=Random_f(13,1);printf(\nDEALINGHAND\n);getchar();Pause_f();nPlayerCard2=Random_f(13,1);Pause_f();nCpuCard1=Random_f(13,1);Pause_f();nCpuCard2=Random_f(13,1);if(nPlayerCard1=10){nPlayerCard1=10;}if(nPlayerCard2=10){nPlayerCard2=10;}if(nCpuCard1=10){nCpuCard1=10;}if(nCpuCard2=10){nCpuCard2=10;}*npPlayer=nPlayerCard1+nPlayerCard2;*npCpu=nCpuCard1+nCpuCard2;printf(您的总点数是:%d\n,*npPlayer);printf([%d],nPlayerCard1);printf([%d],nPlayerCard2);printf(\n);printf(庄家有一张牌为:%d,nCpuCard1);printf(\n);printf([*][%d]\n,nCpuCard1);nnn=nCpuCard2;}voidHit_f(int*npTotal)/*发一张牌,返回点数之和*/{intnCard;nCard=Random_f(13,1);if(nCard=10){nCard=10;}*npTotal=*npTotal+nCard;printf(点数是::%d点\n,nCard);printf(总点数是:%d点\n,*npTotal);}voidResults_f(intnPlayer,intnCpu,intnBet,int*npMoney,int*npDraw,int*npWin,int*npLose)/*统计结果(输赢平及输赢平的局数)*/{if(nCpu==nPlayer){printf(庄家赢!\n);++*npDraw;}if(nPlayer21){printf(您爆点了!\n);++*npLose;}else{if(nCpunPlayer){printf(恭喜您赢了!);*npMoney=*npMoney+(nBet*2);++*npWin;}}if(nCpu21){printf(庄家爆点!\n);if(nPlayer=21){printf(恭喜您赢了!\n);++*npWin;*npMoney=*npMoney+(nBet*2);}}else{if(nCpunPlayer){printf(您输了!\n);++*npLose;}}}voidReplay_f(char*chpAns)/*询问是否重开一局*/{printf(想要再玩一次吗?\n);scanf(%c,chpAns);}voidPrint_f(intnWins,intnLose,intnDraw,intnMoney){printf(赢得:%d局\n,nWins);printf(输掉:%d局\n,nLose);printf(平局:%d局\n,nDraw);printf(剩余资金:%d元\n,nMoney);}voidWait_f(intnMilli){intnStart1,nStart2;for(nStart1=0;nStart1nMilli*100;nStart1++)for(nStart2=0;nStart2nMilli*100;nStart2++){;}}voidPause_f(){printf(按任意键继续:);getchar();}intRandom_f(longlBigNumber,longlSmallNumber)/*选择两个参数之间的随机数*/{intnRan;srand((unsigned)time(NULL));nRan=rand()%(lBigNumber-(lSmallNumber-1))+lSmallNumber;return(nRan);}voidHit_f2(int*npTotal,inta)/*发一张牌,返回点数之和*/{intnCard;nCard=a;if(nCard=10){nCard=10;}*npTotal=*npTotal+nCard;printf(这张牌是:%d点\n,nCard);printf(一共是:%d点\n,*npTotal);}
本文标题:C语言21点纸牌游戏系统详细设计
链接地址:https://www.777doc.com/doc-6972076 .html