您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 《C++》21点扑克牌游戏程序
1课程设计报告课程名称C++语言课程设计课题名称21点扑克牌游戏程序专业电气工程及其自动化班级学号姓名指导教师余新宇谌新年郭芳2009年6月19日2湖南工程学院课程设计任务书课程名称C++语言课程设计课题21点扑克牌游戏程序专业班级学生姓名学号指导老师余新宇谌新年郭芳审批任务书下达日期2009年6月15日任务完成日期2009年6月19日3任务书一、设计内容1、问题描述:“21点”扑克牌游戏:编写程序实现游戏,计算机作为庄家,1~4人作为普通玩家参与游戏。各个参与者设法使自己的牌达到总分21而不超过这个数值。扑克牌的分值取它们的面值。A充当1分或11分(由玩家自己选择),其他花牌都是10分。在一局开始时,包括庄家在内的所有参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时隐藏。接下来,只要愿意。各个玩家都有机会依次再拿一张牌。如果某个玩家的总分超过了21(称为“引爆”),则这个玩家就输了。在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。只要庄家的总分等于或小于16分,那么庄家必须再拿牌。如果庄家引爆了,那么还没有引爆的所有玩家都将获胜,引爆的玩家达成平局。否则,将余下的各玩家与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜,如果相同,则玩家与庄家达成平局。2、功能要求:(1)本系统采用一个包含N个结构的数组,每个数据结构应当包括:牌的面值,牌的花色,持牌者以及发牌的顺序。另外还定义了一个结构体用来记录玩家的金钱总额、每局中玩家所押的钱及玩家的战绩。(2)本系统显示这样的菜单:a.多少人加入游戏?b.输入第i位玩家的姓名:c.你带了多少钱?d.你押多少钱?e.你想再要一张牌吗?f.你想再玩一次吗?(3)在游戏过程中,程序会按规则提示菜单项。(4)显示游戏结果。3、算法提示:(1)数据结构:数组,结构体。4(2)数据库结构:下表构成该系统的基本数据库。玩家人数int玩家姓名char牌的面值int牌的花色char玩家的金钱总数int玩家押的金钱数int一盘游戏中玩家赢的次数int一盘游戏中玩家得平局的次数int4、测试数据:(1)玩家数:1~4(2)纸牌数:13*4-2=52(3)每个玩家最多发牌数:215、其他本系统在完成了系统基本功能的实现后,进行了一定的改进:(1)增加了记录并计算玩家总金钱数的功能,游戏开始前玩家要输入所带来的金钱数,而且玩家每局都可以自己输入该局想要押的金额,每局结束后,系统会自动输出各位玩家的余额。(2)为提高游戏的可行性,系统默认游戏开始时庄家(电脑)的金钱总数是各玩家金钱数的平均值。(3)一盘游戏结束,系统会自动显示出该盘游戏中各玩家赢的局数和平局的局数。(4)添加了幽默搞笑的输出语言,提高了游戏的趣味性。(5)修改了输出界面的背景和字体颜色,提高了程序得美观度。5二、设计要求:1,学生选择并完成一个题目。要求每个学生能独立思考认真并按时完成本课程设计所包含的所有内容。2,要求学生必须按照课程设计报告的完整格式说明设计内容,设计任务分析过程和算法,给全部源程序,并做出总结。3.设计报告的完整格式应包括以下部分的内容:课题设计内容与主要功能课题分析:分析课程设计项目的实现方法程序实现步骤程序测试结果与结论程序清单总结与体会三、进度安排6月15日到6月19日时间上午下午1-4节(四小时)5,6,7,8节(四小时)6月15号布置课题,题目讲解上机编程6月16号上机编程6月17号上机编程上机编程附:课程设计报告装订顺序:封面、任务书、目录、正文、附件(A4大小的图纸及程序清单)、评分表。正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题设计内容与主要功能;二、课题分析;分析课程设计项目的实现方法,并写出类声明与核心算法实现代码。三、主要功能的实现步骤;四、程序测试与结论;应包括课程设计程序的屏幕显示,并加以简单的文字说明。五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。6目录1、课题设计内容与主要功能···························(1)2、课题分析·································(1)—(7)(1)项目实现方法··························(1)--(2)(2)类声明······································(3)(3)核心算法代实现代码····················(3)--(7)3、实现步骤··································(7)—(8)4、测试与结论·······························(9)—(11)5、总结····································(11)—(12)6、参考书目········································(12)7、附件····································(13)—(28)7一、课题设计内容与主要功能(1)定义一副扑克牌(不包括两个王),四种花色十三个点数共52张牌,游戏过程中系统自动随机从这52张牌中抽牌发给参与者。(2)将J、Q、K的点数改为10点,A的点数可由系统自动在1和11之间选择最佳的点数。(3)系统提示输入玩家数(1~4)、玩家姓名以及玩家所带的金钱数。(4)系统提示各玩家输入所押的金钱数,新的一局开始时可以重新设定押的金钱数。(5)游戏开始,系统先自动给每位参与者发两张牌,并且隐藏庄家的第一张牌,然后依次询问玩家是否需要继续发牌,玩家输入“Y”,则再发一张牌给该玩家,玩家输入“N”,则跳过该玩家。(6)当所有玩家都不再要牌,输出玩家总分值、胜负情况,并输出各参与者的余额。(7)玩家再押钱,新的一局游戏开始。(8)当有玩家的金钱等于0时,该盘游戏结束,统计各位玩家胜的局数和平局的局数,输出统计结果。提示玩家是否选择重新再来一盘。二、课题分析1、项目实现方法(1)函数调用关系game_of_21_point。头函数实用程序包utility.h头函数定义52张牌的头函数card.h数据初始化函数GameOf21Point()洗牌函数Shuffle()点数计算函数GetTotalScore()状态显示函数ShowStatus()游戏运行函数Game()主函数Main8(2)游戏过程示意图否开始游戏玩家输入押的金钱数,给每位参与者随机发两张牌问玩家是否还要牌否是给该玩家发一张牌判断各参与者点数是否大于21是否显示各参与者状态,统计总点数.输出胜负情况并计算输出金钱余额提问是否再来一盘否是退出游戏是否有玩家金钱为0是显示庄家及玩家状态统计总点数选择1~4位玩家并输入各玩家的姓名及金钱数输出各玩家战绩开始界面92、类声明classGameOf21Point{private://数据成员:Carddeck[52];//一副扑克牌intdealPos;//发牌位置Cardhands[4][21];//hand[0]存储庄家手中的牌,hand[1~4]存储玩家手中的牌intnumOfCard[4];//庄家(numOfCard[0])及玩家(numOfCard[1~4])手中的牌数charname[4][LEN_OF_MAX_NAME];//庄家与玩家姓名intnumOfPlayer;//玩家人数//辅助函数voidShuffle();//洗牌,将扑克牌混在一起以便产生一种随机的排列intGetTotalScore(Cardhand[21],intn);//返回一手扑克牌的总分值voidShowStatus(intnum,boolhideFirstCardAndTotalScore=false);//显示庄家(对应num=0)或玩家(对应num=1~4)的当前状态CardDealOneCard(){returndeck[dealPos++];}//发一张扑克牌public://方法声明GameOf21Point();//无参数的构造函数virtual~GameOf21Point(){}//析构函数,当一盘游戏结束时,清空数据。voidGame();//运行游戏};3、核心算法及实现代码(1)枚举结构体typedefenum{A,2,3,4,5,6,7,8,9,10,J,Q,K十三张牌;}RankType;//扑克牌面值typedefenum{梅花,红桃,黑桃,方块四种花色;}SuitType;//扑克牌花色10(2)数据结构体structCard//扑克牌结构体{前面枚举的十三张牌的面值;前面枚举的四种花色;};structPlayer//玩家金钱和战绩结构体{玩家金钱总数;玩家押的金钱数;玩家赢的局数;玩家打平局的局数;};(3)功能函数模块数据初始化函数GameOf21Point()//初始化扑克牌,各参与者手中的牌数、姓名和金钱等GameOf21Point::GameOf21Point(){当前扑克牌位置在庄家;for(int牌花色=0;牌花色4;牌花色++){for(int牌面值=1;牌面值=13;牌面值++){给curPos位置的牌赋花色;给curPos位置的牌赋面值;牌的位置移到下一个;}}输出提示多少人加入游戏?(1~4):;输入玩家人数;while(玩家人数小于1或者大于4){输出玩家人数不合格人数只能在1~4之间,请重新输入人数:;重新输入玩家人数;}初始化发牌位置,从庄家开始发牌;定义临时变量i;for(i=0;i=玩家人数;i++)初始化参与者手中的扑克牌数为0;让庄家name[0]的输出名为“庄家”;for(i=1;i=玩家人数;i++){提示输入玩家姓名输入第i位玩家的姓名:;输入玩家姓名;11提示输入玩家金钱数你带了多少钱啊?endl;输入玩家金钱数;}定义一个变量z等于0;初始化庄家的金钱为0;for(i=1;i=玩家人数;i++){z的值等于所有玩家的金钱之和;}定义庄家的金钱数为所有玩家金钱的平均值;洗牌函数Shuffle()//洗牌,将扑克牌混在一起以便产生一种随机的排列组合voidGameOf21Point::Shuffle(){设置当前时间为随机数种子for(int牌的位置=51;牌的位置0;牌的位置--)//产生随机的位置为curPos的扑克牌{intpos=Rand::GetRand(牌的位置+1);//生成0~curPos之间的随机数调用swap()函数;//交换deck[pos]与deck[curPos]}}点数计算函数GetTotalScore()intGameOf21Point::GetTotalScore(Cardhand[21],intn)//返回一手扑克牌的总分值{定义临时变量pos;初始化总分值为0;for(pos=0;pos手中的牌数;pos++){如果手中有张A,总分加11;如果手中有牌J或Q或K,总分加10;如果手中的牌是2~10中的,总分加上对应的2~10;}for(pos=0;总分大于21且pos手中的牌数;pos++){如果手中有张A,总分减10;}用return返回总分}状态显示函数ShowStatus()//显示各玩家手中的牌和总分值voidGameOf21Point::ShowStatus(int参与者数,boolhideFirstCardAndTotalScore){如果hideFirstCardAndTotalScore为真,隐藏庄家首张牌,输出“不让你看”代替;否则输出各参与者首张牌;for(inti=1;i第num位玩家手中的牌;i++)12输出各参与者手中其他的牌;如果hideFirstCardAndTotalScore为假;输出各参与者的总分;如果第num位玩家的总分大于21;输出玩家爆了;}游戏运行函数Game()//运行游戏voidGameOf21Poin
本文标题:《C++》21点扑克牌游戏程序
链接地址:https://www.777doc.com/doc-3897091 .html