您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 程序设计-21点扑克牌游戏
-1-课程设计课程名称:程序设计课题名称:21点扑克牌游戏班级:计算机学院12-2BJ班完成人:曹开明(14122403434)指导教师:李宛珊湖南理工学院计算机学院2013年12月19日-2-一、设计目的《面向对象程序设计课程设计》是计算机科学与技术专业和软件工程专业集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。其目的在于加深对面向对象程序设计中基础理论和基本知识的理解,培养学生的实践能力,促进理论与实践的结合。通过课程设计,让学生能够熟练运用C++进行面向对象编程,建立对象模型,降低软件的复杂性,改善软件的重用性和维护性,提高软件的生产效率,全面掌握面向对象编程技术。二、系统的功能分析必须包括:系统的功能需求,可以画出功能模块图程序的N-S流程图如下图所示:三、系统的程序设计与实现显示游戏规个则初始化随机种子显示游戏规则While(chchoice)Y\yn\N判断chchoiceDo.....while你的选择是明智的-3-系统的运行环境:VisualC++6.0(完整绿色版)开发环境:C++系统的详细设计:类classCCard该程序只需要一个CCard类,其中有如下步骤:ClassCCardPrivate:IntmPip[5];(一共有5张牌)IntmNumber;(牌的张数)IntmDollar;(一共有多少钱)IntmGamble;(赌注)IntmWin;(赢得局数)IntmLose;(输的局数)IntmDraw;(平的局数)Public:CCard();(构造函数初始化)VoidFistplayTwo();(第一次出两张牌)IntGetNumber();(返回牌的数目)IntGetPip();(显示牌的总点数)VoidDisplayPip();(一次显示牌的点数)VoidDisplayPip(int);(除第一张牌,一次显示牌的点数)VoidTurnplay();(出第一张牌)VoidWin();(赢了多少钱)VoidLose();(输了)VoidDraw();(平了)IntSetGamble(int);(设置赌注)IntGetMoney();(返回钱数)VoidDisplayInfo();(打印必要信息)IntGetCurrentCard();(返回当前牌)-4-四、系统的运行结果与分析主要是开始运行的界面:当赌注下多了:-5-玩完游戏:附录:系统的源程序#includecstdlib#includeiostream#includectimeusingnamespacestd;classCCard{private:intnaPip[5];intnNumber;intnDollar;intnGamble;intnWin;intnLose;intnDraw;public:CCard();-6-voidFirstPlayTwo();intGetNumber();intGetPip();voidDisplayPip();voidDisplayPip(int);voidTurnPlay();voidWin();voidLose();voidDraw();intSetGamble(int);intGetMoney();voidDisplayInfo();intGetCurrentCard();};CCard::CCard(){nNumber=0;nDollar=100;for(inti=0;i5;i++)naPip[i]=0;nGamble=0;nWin=nLose=nDraw=0;}intCCard::GetMoney(void){returnnDollar;}voidCCard::DisplayInfo(){cout您一共玩了nWin+nLose+nDraw局,赢了nWin局,输了nLose局,平局nDraw次。\n;cout你的赌本共计有$nDollar。\n;-7-}intCCard::SetGamble(intgamble){if(nDollar-gamble0)return-1;if(gamble0){if(nDollar-200)return-1;nGamble=20;}elsenGamble=gamble;nDollar-=nGamble;return0;}voidCCard::FirstPlayTwo(){naPip[0]=rand()%13+1;naPip[1]=rand()%13+1;nNumber=2;}intCCard::GetCurrentCard(){returnnaPip[nNumber-1];}intCCard::GetNumber(){returnnNumber;}intCCard::GetPip(){intnPip=0;for(inti=0;inNumber;i++){if(naPip[i]=10)nPip+=10;-8-elsenPip+=naPip[i];}returnnPip;}voidCCard::DisplayPip(){for(inti=0;inNumber;i++)coutnaPip[i]'\t';coutendl;}voidCCard::TurnPlay(){nNumber++;naPip[nNumber-1]=rand()%13+1;}voidCCard::Win(){cout赢家牌面:;DisplayPip();cout牌面点数:GetPip()endl;nDollar=nDollar+2*nGamble;nWin++;cout赌本:$nDollar赢了nWin次输了nLose次平局nDraw次endl;coutendlendl;}voidCCard::Lose(){nLose++;cout输家牌面:;DisplayPip();-9-if(GetPip()21)cout暴了!\n;elsecout牌面点数:GetPip()endl;cout赌本:$nDollar赢了nWin次输了nLose次平局nDraw次endl;coutendlendl;}voidCCard::Draw(){nDraw++;nDollar+=nGamble;cout平局牌面:;DisplayPip();if(GetPip()21)cout暴了!\n;elsecout牌面点数:GetPip()endl;cout赌本:$nDollar赢了nWin次输了nLose次平局nDraw次endl;coutendlendl;}voidCCard::DisplayPip(intn){cout[*]'\t';for(inti=1;inNumber;i++)coutnaPip[i]'\t';coutendl;}voidDisplayRule(void){cout\t欢迎进入曹开明的21点游戏世界!\n\n;-10-cout\t游戏规则:\n;cout\t1.玩家最多可以要5张牌;\n;cout\t2.如果牌点的总数超过21点则暴点,自动判输;\n;cout\t3.赢家可得双倍赌注;\n;cout\t4.计算机方在牌点大于等于16时不再要牌。\n\n;cout祝您好运!\n;coutendlendl;}voidJudge(CCard&cpu,CCard&player){coutendl;if((cpu.GetPip()21&&player.GetPip()21)||cpu.GetPip()==player.GetPip()){cout\n\n平局!\n;cout计算机数据:\t;cpu.DisplayPip();cout牌面点数:cpu.GetPip()endl;cout\n您的数据:\t;player.Draw();coutendl;}elseif((cpu.GetPip()21)||(player.GetPip()cpu.GetPip()&&player.GetPip()=21)){cout\n\n恭喜您,您赢了!\n;cout计算机数据:\t;cpu.DisplayPip();cout牌面点数:cpu.GetPip()endl;cout\n您的数据:\t;player.Win();coutendl;}else-11-{cout\n\n很遗憾,您输了!\n;cout计算机数据:\t;cpu.DisplayPip();cout牌面点数:cpu.GetPip()endl;cout\n您的数据:\t;player.Lose();coutendl;}}voidPlayTurn(CCard&cpu,CCard&player){charchChoice;intblCpu=1,blPlayer=1;cpu.FirstPlayTwo();player.FirstPlayTwo();do{cout您的牌点为:\t;player.DisplayPip();cout计算机的牌点为:\t;cpu.DisplayPip(1);cout您的牌面点数是:player.GetPip()endl;if(blPlayer){cout\n\n您是否继续要牌(Y/N)?;cinchChoice;if((chChoice=='Y'||chChoice=='y')){if(player.GetNumber()5){player.TurnPlay();cout您要的这张牌是:player.GetCurrentCard()endl;if(player.GetPip()21)blPlayer=0;-12-}else{cout对不起,您已经要了5张牌,不能再要牌了!;blPlayer=0;}}}if((chChoice=='N'||chChoice=='n'))blPlayer=0;if(cpu.GetPip()16&&cpu.GetNumber()5){cpu.TurnPlay();cout计算机要牌,牌点是:cpu.GetCurrentCard()endl;}elseblCpu=0;if(blCpu&&player.GetNumber()5&&player.GetPip()21)blPlayer=1;}while(blCpu||blPlayer);Judge(cpu,player);return;}intmain(void){srand((unsigned)time(NULL));CCardcpu,player;intblLogic;intnMoney;DisplayRule();charchChoice;-13-cout是否现在开始游戏(Y/N)?\n;cinchChoice;while(chChoice=='Y'||chChoice=='y'){do{cout您现在有赌本:$player.GetMoney();cout\n请下注(赌注不能超过赌本):;cinnMoney;blLogic=player.SetGamble(nMoney);if(blLogic)cout您的赌本不够,请重新下注!\n;}while(blLogic);PlayTurn(cpu,player);cout是否继续21点游戏(Y/N)?\n;cinchChoice;}player.DisplayInfo();cout欢迎再次使用本程序!\n\n\n;return0;}-14-自评意见做这个课程设计不但让我在C++编程方面的能力有很大的提高,更让我明白了做
本文标题:程序设计-21点扑克牌游戏
链接地址:https://www.777doc.com/doc-5691528 .html