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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

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

2、计算机作为庄家,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所不具备的额外功能,如洗牌和发牌 GenericPalayer一个抽象玩家,具有庄家和玩家的共同元素PlayerGenericPalayer普通玩家House庄家Game一个游戏4.

3、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-Card中的所有指针删除所有动态创建Card对象int GetTotal()co

4、nst返回这首派总值GenericPalayer类(抽象类)sring m-Name通用玩家的名字vrtual bool IsHitting()const=0指出通用玩家是否想要另一张牌,纯属函数bool IsBusted()const指出通用玩家是否引爆void Bust()const宣布通用玩家引爆Player类()const指出玩家是否想要另一张牌void Win()const宣布玩家获胜void Lose()const宣布玩家失败void Push()const宣布玩家获得平局House类指出玩家是否再拿一张牌Deck类void Populate() 创建一共52张的标准扑克牌void

5、 Shuffle()洗牌void Deal(Hand&Hand)将一张牌发到一手中void AdditionalCards(GenericPalayer&GenericPalayer)只要通用玩家可以并且想要另一张牌,则在给他发一张牌Game类Deck m-Deck一副牌House m-House Playerm-Player普通玩家的集合,Player对象的一个向量void Play()玩一局游戏五详细设计5.1 数据类型定义及伪代码描述 1.首先定义表示扑克牌花色与面值的枚举类型,这样程序可读性更强 2.其次,方法Game()用来运行游戏,下面为用伪代码描述的整个游戏的流程:给庄家和玩家发

6、最初的二张牌隐藏庄家的第一张牌显示庄家和玩家手中的牌依次向玩家发额外的牌显示庄家的第一张牌给庄家发额外的牌if(庄家引爆) 没有引爆的玩家人赢 引爆的玩家平局else for(每个玩家) if(玩家没有引爆且玩家的总分比庄家大) 宣布玩家赢 else if(玩家的总分与庄家相等) 宣布平局 else 宣布玩家赢5.2系统主要子程序详细设计(加注释的源程序)(1) 新建头文件Card.h,为一张单独的扑克牌定义Card类。#ifndef _Card_h_#define _Card_h_#includeusing namespace std;class Cardpublic:enum rankAC

7、E=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;return value;void Card:Flip()m_IsFaceUp=!(m_IsFaceUp);(3) 新建头文件Hand.h,为纸牌的集合定义Hand类。#ifndef _Hand_h_#define _Hand_h

8、_#includevectorclass Handpublic:Hand();virtual Hand();void Add(Card* pCard);void Clear();int GetTotal() const; vectorm_Cards;(4) 新建Cpp文件Hand.cpp,实现Hand类。Hand.hHand:Hand()m_Cards.reserve(7);Hand()Clear();void Hand:Add(Card* pCard)m_Cards.push_back(pCard);Clear()vectorGetValue()=0)return 0;int total=0

9、;const_iterator iter;total+=(*iter)-GetValue();bool containsAce=false;if(*iter)-GetValue()=Card:ACE)containsAce=true;if(containsAce&totalclass GenericPlayer:public Hand public: friend ostream &operator21);void GenericPlayer:Bust()const coutm_Name引爆! n;(7) 新建头文件PlayerHouse.h,从GenericPlayer类派生Player类和

10、House类。#ifndef PlayerHouse_h#define PlayerHouse_hclass Player:public GenericPlayerPlayer(const string&virtual Player();virtual bool IsHitting()const;void Win()const;void Lose()const;void Push()const;class House:House(const string&庄家virtual House();void FlipFirstCard();(8) 新建cpp文件PlayerHouse.cpp,实现Pl

11、ayer类和House类的成员函数。PlayerHouse.hPlayer:GenericPlayer(name)Player()bool Player:IsHitting()constcoutresponse;return(response=y|response=Yvoid Player:Win()const,恭喜你,你赢了!nLose()const,很遗憾,你输了!Push()const,平局,加油!House:House()bool House:return (GetTotal()Flip();else coutDeck:Deck()m_Cards.reserve(52);Populat

12、e();Deck()void Deck:Populate()for(int s=Card:CLUBS;s=Card:SPADES;+s)for(int r=Card:ACE;rKING;+r)Add(new Card(static_cast(r),static_cast(s);Shuffle()random_shuffle(m_Cards.begin(),m_Cards.end();Deal(Hand& aHand)m_Cards.empty()aHand.Add(m_Cards.back();m_Cards.pop_back();Out of cards.Unable to deal.Add

13、itionalCards(GenericPlayer& aGenericPlayer)endl;while(!(aGenericPlayer.IsBusted()&aGenericPlayer.IsHitting()Deal(aGenericPlayer);coutaGenericPlayerif(aGenericPlayer.IsBusted() aGenericPlayer.Bust(); (11) 新建头文件Game.h定义Game类表示21点游戏。#ifndef _Game_h_#define _Game_h_class GameGame(const vectorGame: names

14、)const_iterator pName;for(pName=names.begin();pName!=names.end();+pName)m_Players.push_back(Player(*pName);srand(time(0);m_Deck.Populate();m_Deck.Shuffle();Game() void Game:Play() /将最初的两张牌发给每一个人iterator pPlayer; for(int i=0;i2;+i) for(pPlayer=m_Players.begin();pPlayer!=m_Players.end();+pPlayer) m_De

15、ck.Deal(*pPlayer); m_Deck.Deal(m_House); /隐藏庄家的第一张牌 m_House.FlipFirstCard(); /显示每个人的一张牌 for(pPlayer=m_Players.begin();*pPlayerm_House /向玩家发额外的牌 m_Deck.AdditionalCards(*pPlayer); /显示庄家的第一张牌endlIsBusted() pPlayer-Win(); else /将仍然在玩的各个玩家与庄家做比较IsBusted() if(pPlayer-GetTotal()m_House.GetTotal() pPlayer- else if(pPlayer-GetTotal()Push(); /删除每个人的牌 pPlayer-Clear(); m_House.Clear();(13) 新建cpp文件Main.cpp编写游戏程序的主函数,并实现重载的operator()函数.Game.

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2