宝典c程序课程设计报告_21点游戏[1].doc
《宝典c程序课程设计报告_21点游戏[1].doc》由会员分享,可在线阅读,更多相关《宝典c程序课程设计报告_21点游戏[1].doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、随机数,枚举类型?C+面向对象程序设计课程设计报告设计题目: 21点游戏 学生学号: 学生姓名: 专业班级: 学生成绩: 指导教师: 医药信息工程学院图像处理与多媒体教研室2011-一、 设计任务分析1、21点游戏介绍21点游戏是一个古老的扑克游戏,游戏的规则是:各个 参与者设法使自己的牌达到总分21而不超过这个数值。扑克牌的分值取它们的面值,A充当1或者11分,J,Q和K人头牌都是10分。庄家VS17个玩家。在开局时,包括庄家在内的所有参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐藏的。接下来,只要愿意,各个玩家都有机会依次再拿一张牌。如果是玩家的总分超过了21(
2、称为引爆),那么这个玩家就输了。在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。只要庄家的总分等于或小于16,那么他就必须再拿牌。如果庄家引爆了,那么还没有引爆的所有玩家都将获胜,引爆的玩家打成平局。否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。如果二者的总分相同,则玩家与庄家打成平局中。2、实现以下功能: 1) 洗牌; 2) 发牌; 3) 隐藏或显示牌; 4) 计算总分; 5) 判断胜负。 二、 21点游戏流程给庄家发最初的三张牌隐藏庄家的第一张牌和总分向玩家发额外的牌并显示牌和总分显示庄家的牌玩家输给玩家发最初的三张牌并显示牌和总分玩家需要额外的牌
3、?庄家的总分庄家?洗牌NYYNYYNN玩家引爆?玩家输YN平局玩家赢三、 主要数据结构扑克版结构体:typedef enum/扑克牌面值:ACE(A),TWO(2)TEN(10),JACK(J),QUEEN(Q),KING(K)ACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KINGRankType;typedef enum/扑克牌花色:CLUBS(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑桃)CLUBS,DIAMONDS,HEARTS,SPADESSuitType;struct Card
4、/扑克牌结构体RankType rank;/扑克牌面值SuitType suit;/扑克牌花色;四、 21点游戏类设计GameOf21Point类属性成员变量名数据类型意 义DeckCard一副扑克牌dealPoseint发牌位置Namechar玩家改姓名方法成员函数名属 性函数功能Shuffle()private洗牌GetTotalScore()private返回总分值ShowStatus()private显示当前状态DealOneCard()private发牌Game()public运行游戏五、 源代码#ifndef _CARD_H_#define _CARD_H_#include/#in
5、cludeusing namespace std;typedef enum/扑克牌面值:ACE(A),TWO(2)TEN(10),JACK(J),QUEEN(Q),KING(K)ACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KINGRankType;typedef enum/扑克牌花色:CLUBS(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑桃)CLUBS,DIAMONDS,HEARTS,SPADESSuitType;struct Card/扑克牌结构体RankType rank;/扑克牌
6、面值SuitType suit;/扑克牌花色;ostream &operator(ostream &outStream,const Card &card)/操作结果:重载运算符/输出花色if(card.suit=CLUBS) outStream梅花;/CLUBS表示梅花else if(card.suit=DIAMONDS) outStream方块;/DIAMONDS表示方块else if(card.suit=HEARTS) outStream 红桃;/HEARTS表示红桃else if(card.suit=SPADES) outStream黑桃;/SPADES表示黑桃/输出面值if (card
7、.rank=ACE) outStreamA;/ACE表示Aelse if(card.rank=JACK) outStreamJ;/JACK表示Jelse if(card.rank=QUEEN) outStreamQ;/JACK表示Qelse if(card.rank=KING) outStreamK;/JACK表示Kelse cout(int)card.rank;return outStream;#endif#ifndef _GAME_OF_21_POINT_H_#define _GAME_OF_21_POINT_H_#includecard.h/扑克牌#include#define LEN_
8、OF_MAX_NAME 21/最大姓名长度using namespace std;/21点游戏类GameOf21Point声明class GameOf21Pointprivate:Card deck52;/一副扑克牌int dealPos;/发牌位置Card hands821;/hand0保存庄家的牌,hand17保存各玩家的牌int numOfCard8;/庄家(numOfCard0)及玩家numOfCard17的牌数char name8LEN_OF_MAX_NAME;/庄家及玩家姓名int numOfPlayer;void Shuffle();/洗牌int GetTotalScore(Ca
9、rd hand21,int n);/返回一手牌的总分值void ShowStatus(int num,bool hideFirstCardAndTotalScore=false);/显示庄家(对应num=0)或玩家(对应num0)的当前状态Card DealOneCard()return deckdealPos+; /发一张扑克牌public:/方法声明GameOf21Point();/无参构造函数virtual GameOf21Point();void Game();/初始化扑克牌,发牌位置,庄家与各玩家手中的扑克牌数GameOf21Point:GameOf21Point()int curP
10、os=0;/当前扑克牌位置for(int suitPos=0;suitPos4;suitPos+)/花色for(int rankPos=1;rankPos=13;rankPos+)/面值deckcurPos.suit=(SuitType)suitPos;/花色deckcurPos.rank=(RankType)rankPos;/面值curPos+;coutnumOfPlayer;while (numOfPlayer7) /限制人数在17之间coutnumOfPlayer;dealPos=0;/发牌位置int i=0;/临时变量/庄家numOfCard0及玩家numOfCard17手中的扑克牌张
11、数for(i=0;i=numOfPlayer;i+) numOfCardi=0;strcpy(name0,庄家);/玩家姓名for(i=1;i=numOfPlayer;i+)cout输入第inamei;cout游戏开始0;curPos-)int pos=rand()%(curPos+1);/产生0curPos之间的随机数Card temp;/定义一个临时变量用于交换牌temp=deckpos;deckpos=deckcurPos;deckcurPos=temp;int GameOf21Point:GetTotalScore(Card hand21,int n)int pos;int total
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 宝典 程序 课程设计 报告 _21 游戏
限制150内