ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:108.24KB ,
资源ID:9462627      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9462627.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(纸牌游戏21点实验设计报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

纸牌游戏21点实验设计报告.docx

1、纸牌游戏21点实验设计报告湖北第二师范学院面向对象程序设计课程设计报告书 题 目: 纸牌游戏“21点” 院 系: 计算机学院 专 业: 网络工程 姓 名: 李林 学 号: 0850311013 同组人员: 陈易俊 、吴鑫、易龙、张帅 指导老师: 张琪 设计时间: 2011年2月26日2011年3月19日1课程设计目的 在Visual C+6.0或者C+ Builder 6.0环境中编译运行纸牌游戏“21点”,通过编程练习、程序调试、程序纠错等过程训练,真正掌握所学知识、提高编程水平。2问题描述 “21点”是一个古老的扑克牌游戏,游戏规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。

2、扑克牌的分值取它们的面值,A充当1分或者11分(由玩家自己选择一种分值),J.Q和K人头牌都是10分。 庄家对付1到7个玩家。在一局开始时,包括庄家在内的所有参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐蔽的。接下来,只有愿意,各个玩家都有机会依次再拿一张牌。如果某个玩家的总分超过了21(称为“引爆”),那么这个玩家就输了。在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。只要庄家的总分等于或小于16,那么他就必须再拿牌,如果庄家引爆了,那么还没有引爆的所有玩家都将获胜。引爆的玩家打成平局。否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则

3、玩家获胜。如果二者的总分相同,则玩家与庄家打成平局。(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。 (2)序中一共有13张扑克牌可以随机抽取,大于10的点数为10,A根据情况点数不同,当前点数小于11时为11点,大于10时则为1点。(3)要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密。(4)将界面的提示说明全部设计为中文界面,界面的解释详细友好,可以吸引更多的玩家。3需求分析 设计程序的的主要目的是编写程序模拟游戏。游戏为纸牌游戏“21点,”也叫Black Jack即黑杰克,该游戏适用于手机,也是网上比较流行的小游戏

4、之一。游戏以计算机作为庄家,17个人作为普通玩家参与游戏。可用字符代表扑克牌面值(A,2,3,4,5,6,7,8,9,10,J,Q,K)和花色(梅花C,方块D,红心H,黑桃S), 模拟实质扑克进行游戏。方便大众在空闲时一个人就可以达到多人娱乐的效果!四概要设计4.1系统中类类型定义及系统各类类成员功能说明“21点游戏”程序中的类类基类说明Card无一张扑克牌 Hand 无 一手牌,Card对象集合 Deck Hand一副牌它具有Hand所不具备的额外功能,如洗牌和发牌 GenericPalayer Hand一个抽象玩家,具有庄家和玩家的共同元素PlayerGenericPalayer普通玩家H

5、ouseGenericPalayer庄家Game无一个游戏4.2 系统各类间关系Card类成员说明rank m-Rank牌的面值。Rank是13个面值等级的枚举suit m-Suit牌的花色。Suit是4花色的枚举bool m-IsFace标示牌是否正面朝上的状态,正面朝上为true,否则falseint GetVable()返回牌面值所对应的分值Hand类成员说明vectorm-Cards牌面向量,存储指向Card对象指针void Add(Card*pCard)向手中添加一张牌,即将一个指向Card的指针添加到向量m-Cards中void Clear()清除手中所有牌,即 删除向量m-Car

6、d中的所有指针删除所有动态创建Card对象int GetTotal()const返回这首派总值GenericPalayer类(抽象类)成员说明sring m-Name通用玩家的名字vrtual bool IsHitting()const=0指出通用玩家是否想要另一张牌,纯属函数bool IsBusted()const指出通用玩家是否引爆void Bust()const宣布通用玩家引爆Player类成员说明vrtual bool IsHitting()const指出玩家是否想要另一张牌 void Win()const宣布玩家获胜void Lose()const宣布玩家失败void Push()c

7、onst宣布玩家获得平局House类成员说明vrtual bool IsHitting()const指出玩家是否再拿一张牌Deck类成员说明void Populate() 创建一共52张的标准扑克牌void Shuffle()洗牌void Deal(Hand&Hand)将一张牌发到一手中void AdditionalCards(GenericPalayer&GenericPalayer)只要通用玩家可以并且想要另一张牌,则在给他发一张牌Game类成员说明Deck m-Deck一副牌House m-House 庄家vectorm-Player普通玩家的集合,Player对象的一个向量void P

8、lay()玩一局游戏五详细设计5.1 数据类型定义及伪代码描述 1.首先定义表示扑克牌花色与面值的枚举类型,这样程序可读性更强 2.其次,方法Game()用来运行游戏,下面为用伪代码描述的整个游戏的流程:洗牌给庄家和玩家发最初的二张牌隐藏庄家的第一张牌显示庄家和玩家手中的牌依次向玩家发额外的牌显示庄家的第一张牌给庄家发额外的牌if(庄家引爆) 没有引爆的玩家人赢 引爆的玩家平局else for(每个玩家) if(玩家没有引爆且玩家的总分比庄家大) 宣布玩家赢 else if(玩家的总分与庄家相等) 宣布平局 else 宣布玩家赢5.2系统主要子程序详细设计(加注释的源程序)(1) 新建头文件C

9、ard.h,为一张单独的扑克牌定义Card类。#ifndef _Card_h_#define _Card_h_#includeusing namespace std;class Cardpublic:enum rankACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING;enum suitCLUBS,DIAMONDS,HEARTS,SPADES;Card(rank r=ACE,suit s=SPADES,bool ifu=true);/friend ostream& operator10)value=10;retu

10、rn value;void Card:Flip()m_IsFaceUp=!(m_IsFaceUp);(3) 新建头文件Hand.h,为纸牌的集合定义Hand类。#ifndef _Hand_h_#define _Hand_h_#includeCard.h#includeusing namespace std;class Handpublic:Hand();virtual Hand();void Add(Card* pCard);void Clear();int GetTotal() const;public: vectorm_Cards;#endif(4) 新建Cpp文件Hand.cpp,实现H

11、and类。#include Hand.hHand:Hand()m_Cards.reserve(7);Hand:Hand()Clear();void Hand:Add(Card* pCard)m_Cards.push_back(pCard);void Hand:Clear()vector:iterator iter=m_Cards.begin();for(iter=m_Cards.begin();iter!=m_Cards.end();+iter)delete *iter;*iter=0;m_Cards.clear();int Hand:GetTotal() constif(m_Cards.em

12、pty() return 0;if(m_Cards0-GetValue()=0)return 0;int total=0;vector:const_iterator iter;for(iter=m_Cards.begin();iter!=m_Cards.end();+iter)total+=(*iter)-GetValue();bool containsAce=false;for(iter=m_Cards.begin();iter!=m_Cards.end();+iter)if(*iter)-GetValue()=Card:ACE)containsAce=true;if(containsAce

13、&total=11)total+=10;return total;(5) 新建头文件GenericPlayer.h,为通用玩家定义抽象的GenericPlayer类。#ifndef _GenericPlayer_h_#define _GenericPlayer_h_#include Hand.h#includeusing namespace std;class GenericPlayer:public Hand public: friend ostream &operator21);void GenericPlayer:Bust()const coutm_Name引爆! n;(7) 新建头文件

14、PlayerHouse.h,从GenericPlayer类派生Player类和House类。#ifndef PlayerHouse_h#define PlayerHouse_h#includeGenericPlayer.h #includeusing namespace std;class Player:public GenericPlayerpublic:Player(const string& name= );virtual Player();virtual bool IsHitting()const;void Win()const;void Lose()const;void Push()

15、const;class House:public GenericPlayerpublic:House(const string& name=庄家);virtual House();virtual bool IsHitting()const;void FlipFirstCard();#endif(8) 新建cpp文件PlayerHouse.cpp,实现Player类和House类的成员函数。#includePlayerHouse.hPlayer:Player(const string& name):GenericPlayer(name)Player:Player()bool Player:IsH

16、itting()constcoutm_Nameresponse;return(response=y|response=Y);void Player:Win()constcoutm_Name,恭喜你,你赢了!n;void Player:Lose()constcoutm_Name,很遗憾,你输了!n;void Player:Push()constcoutm_Name,平局,加油!n;House:House(const string& name):GenericPlayer(name)House:House()bool House:IsHitting()constreturn (GetTotal()

17、Flip();else cout没有扑克牌翻动!n;(9) 新建头文件Deck.h,从Hand类派生Deck类,表示一副牌。#ifndef Deck_h#define Deck_h#includeHand.h#includeGenericPlayer.h#includeusing namespace std;class Deck:public Handpublic:Deck();virtualDeck();void Populate();void Shuffle();void Deal(Hand& aHand);void AdditionalCards(GenericPlayer& aGene

18、ricPlayer);#endif(10) 新建cpp文件Deck.cpp,实现Deck类的成员函数。#includeDeck.h#includeDeck:Deck()m_Cards.reserve(52);Populate();Deck:Deck()void Deck:Populate()Clear();for(int s=Card:CLUBS;s=Card:SPADES;+s)for(int r=Card:ACE;r=Card:KING;+r)Add(new Card(static_cast(r),static_cast(s);void Deck:Shuffle()random_shuff

19、le(m_Cards.begin(),m_Cards.end();void Deck:Deal(Hand& aHand)if(!m_Cards.empty()aHand.Add(m_Cards.back();m_Cards.pop_back();elsecoutOut of cards.Unable to deal.;void Deck:AdditionalCards(GenericPlayer& aGenericPlayer)coutendl;while(!(aGenericPlayer.IsBusted()&aGenericPlayer.IsHitting()Deal(aGenericPl

20、ayer);coutaGenericPlayerendl;if(aGenericPlayer.IsBusted() aGenericPlayer.Bust(); (11) 新建头文件Game.h定义Game类表示21点游戏。#ifndef _Game_h_#define _Game_h_#includeDeck.h#includePlayerHouse.h#include#include#includeusing namespace std;class Gamepublic:Game(const vector&names);Game();void Play();private: Deck m_

21、Deck;House m_House;vectorm_Players;#endif(12) 新建cpp文件Game.cpp,实现Game类的成员函数。#includeGame.h#include#includeusing namespace std;Game:Game(const vector& names) vector:const_iterator pName;for(pName=names.begin();pName!=names.end();+pName)m_Players.push_back(Player(*pName);srand(time(0);m_Deck.Populate()

22、;m_Deck.Shuffle(); Game:Game() void Game:Play() /将最初的两张牌发给每一个人 vector:iterator pPlayer; for(int i=0;i2;+i) for(pPlayer=m_Players.begin();pPlayer!=m_Players.end();+pPlayer) m_Deck.Deal(*pPlayer); m_Deck.Deal(m_House); /隐藏庄家的第一张牌 m_House.FlipFirstCard(); /显示每个人的一张牌 for(pPlayer=m_Players.begin();pPlaye

23、r!=m_Players.end();+pPlayer) cout*pPlayerendl; coutm_Houseendl; /向玩家发额外的牌 for(pPlayer=m_Players.begin();pPlayer!=m_Players.end();+pPlayer) m_Deck.AdditionalCards(*pPlayer); /显示庄家的第一张牌 m_House.FlipFirstCard(); coutendlIsBusted() pPlayer-Win(); else /将仍然在玩的各个玩家与庄家做比较 for(pPlayer=m_Players.begin();pPla

24、yer!=m_Players.end();+pPlayer) if(!(pPlayer-IsBusted() if(pPlayer-GetTotal()m_House.GetTotal() pPlayer-Win(); else if(pPlayer-GetTotal()Lose(); else pPlayer-Push(); /删除每个人的牌 for(pPlayer=m_Players.begin();pPlayer!=m_Players.end();+pPlayer) pPlayer-Clear(); m_House.Clear(); (13) 新建cpp文件Main.cpp编写游戏程序的主函数,并实现重载的operator()函数.#includeGame.h#include#includeusing namespace std;/函数原型ostream& operator(ostream& os,const Card& aCard);ostream& operator(ostream& os,const GenericPlayer& aGenericPlayer);in

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1