您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 药学 > 纸牌游戏“21点”实验设计报告
08级计科2《面向对象程序设计》课程设计――《纸牌游戏“21点”》设计报告第1页共22页湖北第二师范学院《面向对象程序设计》课程设计报告书题目:纸牌游戏——“21点”院系:计算机学院专业:网络工程姓名:李林学号:0850311013同组人员:陈易俊、吴鑫、易龙、张帅指导老师:张琪设计时间:2011年2月26日~2011年3月19日目录一.课程设计目的............................................................................3二.问题描述....................................................................................3三.需求分析....................................................................................4四.概要设计......................................................................................54.1系统中类类型定义及系统各类类成员功能说明.....................54.2系统各类间关系...........................................................................608级计科2《面向对象程序设计》课程设计――《纸牌游戏“21点”》设计报告第2页共22页五.详细设计......................................................................................75.1数据类型定义及伪代码描述.......................................................75.2系统主要子程序详细设计(加注释的源程序)........................8六.测试分析..................................................................................19七.技术难点及创新........................................................................19八.自己完成模块说明..................................................................19九.源程序清单..............................................................................2308级计科2《面向对象程序设计》课程设计――《纸牌游戏“21点”》设计报告第3页共22页一.课程设计目的在VisualC++6.0或者C++Builder6.0环境中编译运行纸牌游戏——“21点”,通过编程练习、程序调试、程序纠错等过程训练,真正掌握所学知识、提高编程水平。二.问题描述“21点”是一个古老的扑克牌游戏,游戏规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。扑克牌的分值取它们的面值,A充当1分或者11分(由玩家自己选择一种分值),J.Q和K人头牌都是10分。庄家对付1到7个玩家。在一局开始时,包括庄家在内的所有参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐蔽的。接下来,只有愿意,各个玩家都有机会依次再拿一张牌。如果某个玩家的总分超过了21(称为“引爆”),那么这个玩家就输了。在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。只要庄家的总分等于或小于16,那么他就必须再拿牌,如果庄家引爆了,那么还没有引爆的所有玩家都将获胜。引爆的玩家打成平局。否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。如果二者的总分相同,则玩家与庄家打成平局。(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。(2)序中一共有13张扑克牌可以随机抽取,大于10的点数为10,A根据情况点数不同,当前点数小于11时为11点,大于10时则为1点。08级计科2《面向对象程序设计》课程设计――《纸牌游戏“21点”》设计报告第4页共22页(3)要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密。(4)将界面的提示说明全部设计为中文界面,界面的解释详细友好,可以吸引更多的玩家。三.需求分析设计程序的的主要目的是编写程序模拟游戏。游戏为纸牌游戏——“21点,”也叫BlackJack即黑杰克,该游戏适用于手机,也是网上比较流行的小游戏之一。游戏以计算机作为庄家,1—7个人作为普通玩家参与游戏。可用字符代表扑克牌面值(A,2,3,4,5,6,7,8,9,10,J,Q,K)和花色(梅花C,方块D,红心H,黑桃S),模拟实质扑克进行游戏。方便大众在空闲时一个人就可以达到多人娱乐的效果!四.概要设计4.1系统中类类型定义及系统各类类成员功能说明“21点游戏”程序中的类类基类说明Card无一张扑克牌Hand无一手牌,Card对象集合08级计科2《面向对象程序设计》课程设计――《纸牌游戏“21点”》设计报告第5页共22页DeckHand一副牌它具有Hand所不具备的额外功能,如洗牌和发牌GenericPalayerHand一个抽象玩家,具有庄家和玩家的共同元素PlayerGenericPalayer普通玩家HouseGenericPalayer庄家Game无一个游戏4.2系统各类间关系Card类成员说明rankm-Rank牌的面值。Rank是13个面值等级的枚举suitm-Suit牌的花色。Suit是4花色的枚举boolm-IsFace标示牌是否正面朝上的状态,正面朝上为true,否则falseintGetVable()返回牌面值所对应的分值Hand类成员说明vectorcard*m-Cards牌面向量,存储指向Card对象指针voidAdd(Card*pCard)向手中添加一张牌,即将一个指向Card的指针添加到向量m-Cards中voidClear()清除手中所有牌,即删除向量m-Card中的所有指针删除所有动态创建Card对象intGetTotal()const返回这首派总值GenericPalayer类(抽象类)成员说明sringm-Name通用玩家的名字08级计科2《面向对象程序设计》课程设计――《纸牌游戏“21点”》设计报告第6页共22页vrtualboolIsHitting()const=0指出通用玩家是否想要另一张牌,纯属函数boolIsBusted()const指出通用玩家是否引爆voidBust()const宣布通用玩家引爆Player类成员说明vrtualboolIsHitting()const指出玩家是否想要另一张牌voidWin()const宣布玩家获胜voidLose()const宣布玩家失败voidPush()const宣布玩家获得平局House类成员说明vrtualboolIsHitting()const指出玩家是否再拿一张牌Deck类成员说明voidPopulate()创建一共52张的标准扑克牌voidShuffle()洗牌voidDeal(Hand&Hand)将一张牌发到一手中voidAdditionalCards(GenericPalayer&GenericPalayer)只要通用玩家可以并且想要另一张牌,则在给他发一张牌Game类成员说明Deckm-Deck一副牌Housem-House庄家vectorPlayerm-Player普通玩家的集合,Player对象的一个向量voidPlay()玩一局游戏08级计科2《面向对象程序设计》课程设计――《纸牌游戏“21点”》设计报告第7页共22页五.详细设计5.1数据类型定义及伪代码描述1.首先定义表示扑克牌花色与面值的枚举类型,这样程序可读性更强2.其次,方法Game()用来运行游戏,下面为用伪代码描述的整个游戏的流程:洗牌给庄家和玩家发最初的二张牌隐藏庄家的第一张牌显示庄家和玩家手中的牌依次向玩家发额外的牌显示庄家的第一张牌给庄家发额外的牌if(庄家引爆)没有引爆的玩家人赢引爆的玩家平局elsefor(每个玩家)if(玩家没有引爆且玩家的总分比庄家大)宣布玩家赢elseif(玩家的总分与庄家相等)宣布平局else宣布玩家赢5.2系统主要子程序详细设计(加注释的源程序)(1)新建头文件Card.h,为一张单独的扑克牌定义Card类。08级计科2《面向对象程序设计》课程设计――《纸牌游戏“21点”》设计报告第8页共22页#ifndef_Card_h_#define_Card_h_#includeiostreamusingnamespacestd;classCard{public:enumrank{ACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING};enumsuit{CLUBS,DIAMONDS,HEARTS,SPADES};Card(rankr=ACE,suits=SPADES,boolifu=true);//friendostream&operator(ostream&os,constCard&aCard);intGetValue()const;voidFlip();rankm_Rank;suitm_Suit;boolm_IsFaceUp;};#endif(2)新建头cpp文件Card.cpp,实现Card类。#includeCard.hCard::Card(rankr,suits,boolifu):m_Rank(r),m_Suit(s),m_IsFaceUp(ifu){}intCard::GetValue()const{intvalue=0;if(m_IsFaceUp){value=m_Rank;if(value10)value=10;}returnvalue;}voidCard::Flip(){m_IsFaceUp=!(m_IsFaceUp);}(3)新建头文件Hand.h,为纸牌的集合定义Hand类。#ifndef_Hand_h_#define_Hand_h_#includeCard.h#includevectorusingnamespacestd;classHand{public:Hand();virtual~Hand();voidAdd(Card*pCard);08级计科2《面向对象程序设计》课程设计――《纸牌游戏“21点”》设计报告第9页共22页voidClear();intGetTotal()const;public:vectorCard*m_Cards;};#endif(4)新建Cpp文件Hand.cpp,实现Hand类。#includeHand.hHand::Hand(){m_Cards.reserve(7);}Hand::~Hand(){Clear();}voidHand::Add(Card*pCard){m_Cards.push_back(pCard);}voidHand::Clear(){vectorCard*::iteratoriter=m_Cards.begin();for(iter=m_Cards.begin();iter!=m_Cards.end();++iter){delete*iter;*iter=0;}m_Cards.clear();}intHand::GetTotal()const{if(m_Cards.empty())
本文标题:纸牌游戏“21点”实验设计报告
链接地址:https://www.777doc.com/doc-6349490 .html