




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖湖北北第第二二师师范范学学院院 面向对象程序设计面向对象程序设计 课程设计报告书课程设计报告书 题题 目 目 纸牌游戏 21 点 院院 系 系 计算机学院 专专 业 业 网络工程 姓姓 名 名 李林 学学 号 号 同组人员 同组人员 陈易俊 吴鑫 易龙 张帅 指导老师 指导老师 张琪 设计时间 设计时间 2011 年 2 月 26 日 2011 年 3 月 19 日 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 2 页 共 26 页 目目 录录 一 课程设计目的 3 二 问题描述 3 三 需求分析 4 四 概要设计 5 4 1 系统中类类型定义及系统各类类成员功能说明 5 4 2 系统各类间关系 6 五 详细设计 7 5 1 数据类型定义及伪代码描述 7 5 2 系统主要子程序详细设计 加注释的源程序 8 六 测试分析 19 七 技术难点及创新 19 八 自己完成模块说明 23 九 源程序清单 23 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 3 页 共 26 页 1 课程设计目的 在 Visual C 6 0 或者 C Builder 6 0 环境中编译运行纸牌游 戏 21 点 通过编程练习 程序调试 程序纠错等过程训练 真正掌握所学知识 提高编程水平 2 问题描述 21 点 是一个古老的扑克牌游戏 游戏规则是 各个参与 者设法使自己的牌达到总分 21 而不超过这个数值 扑克牌的分值取 它们的面值 A 充当 1 分或者 11 分 由玩家自己选择一种分值 J Q 和 K 人头牌都是 10 分 庄家对付 1 到 7 个玩家 在一局开始时 包括庄家在内的所有参与者都有两张牌 玩家可以看到他们的所有 牌以及总分 而庄家有一张牌暂时是隐蔽的 接下来 只有愿意 各个玩家都有机会依次再拿一张牌 如果某个玩家的总分超过了 21 称为 引爆 那么这个玩家就输了 在所有玩家都拿了额外 的牌后 庄家将显示隐藏的牌 只要庄家的总分等于或小于 16 那 么他就必须再拿牌 如果庄家引爆了 那么还没有引爆的所有玩家 都将获胜 引爆的玩家打成平局 否则 将余下的各玩家的总分与 庄家的总分做比较 如果玩家的总分大于庄家的总分 则玩家获胜 如果二者的总分相同 则玩家与庄家打成平局 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 4 页 共 26 页 1 将所有的函数与相应的数据封装到类中 并改写主程序 使程 序简化 2 序中一共有 13 张扑克牌可以随机抽取 大于 10 的点数为 10 A 根据情况点数不同 当前点数小于 11 时为 11 点 大于 10 时 则为 1 点 3 要求庄家永远不会暴庄 即庄家可以查看下一张牌 若大于 21 点 则拒绝 当然 在游戏规则上不能泄露这点秘密 4 将界面的提示说明全部设计为中文界面 界面的解释详细友好 可以吸引更多的玩家 3 需求分析 设计程序的的主要目的是编写程序模拟游戏 游戏为纸牌游戏 21 点 也叫 Black Jack 即黑杰克 该游戏适用于手机 也是网上比较流行的小游戏之一 游戏以计算机作为庄家 1 7 个 人作为普通玩家参与游戏 可用字符代表扑克牌面值 A 2 3 4 5 6 7 8 9 10 J Q K 和花色 梅花 C 方块 D 红 心 H 黑桃 S 模拟实质扑克进行游戏 方便大众在空闲时一个人 就可以达到多人娱乐的效果 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 5 页 共 26 页 四 概要设计 4 1 系统中类类型定义及系统各类类成员功能说明 21 点游戏点游戏 程序中的类程序中的类 类基类说明 Card无一张扑克牌 Hand 无 一手牌 Card 对象集合 Deck Hand 一副牌它具有 Hand 所不具备的额 外功能 如洗牌和发牌 GenericPalayer Hand 一个抽象玩家 具有庄家和玩家的 共同元素 PlayerGenericPalayer普通玩家 HouseGenericPalayer庄家 Game无一个游戏 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 6 页 共 26 页 4 2 系统各类间关系 CardCard 类类 成员成员说明说明 rankrank m Rankm Rank 牌的面值 Rank 是 13 个面值等级的枚举 suitsuit m Suitm Suit 牌的花色 Suit 是 4 花色的枚举 boolbool m IsFacem IsFace 标示牌是否正面朝上的状态 正面朝上为 true 否则 false intint GetVableGetVable 返回牌面值所对应的分值 HandHand 类类 成员成员说明说明 vectorm Cardsvectorm Cards 牌面向量 存储指向 Card 对象指针 voidvoid AddAdd Card pCardCard pCard 向手中添加一张牌 即将一个指向 Card 的指针添加到向量 m Cards 中 voidvoid Clear Clear 清除手中所有牌 即 删除向量 m Card 中的所有指针删除所 有动态创建 Card 对象 intint GetTotal constGetTotal const 返回这首派总值 GenericPalayer 类 抽象类 类 抽象类 成员成员说明说明 sringsring m Namem Name 通用玩家的名字 vrtualvrtual boolbool IsHittingIsHitting const 0 const 0 指出通用玩家是否想要另一张牌 纯属函数 boolbool IsBustedIsBusted constconst 指出通用玩家是否引爆 voidvoid BustBust constconst宣布通用玩家引爆 Player 类类 成员成员说明说明 vrtualvrtual boolbool IsHittingIsHitting const const 指出玩家是否想要另一张牌 voidvoid WinWin constconst宣布玩家获胜 voidvoid LoseLose constconst宣布玩家失败 voidvoid PushPush constconst宣布玩家获得平局 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 7 页 共 26 页 House 类类 成员成员说明说明 vrtualvrtual boolbool IsHittingIsHitting const const 指出玩家是否再拿一张牌 Deck 类类 成员成员说明说明 voidvoid PopulatePopulate 创建一共 52 张的标准扑克牌 voidvoid ShuffleShuffle 洗牌 voidvoid DealDeal Hand class Card public enum rank ACE 1 TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE TEN JACK QUEEN KIN G enum suit CLUBS DIAMONDS HEARTS SPADES Card rank r ACE suit s SPADES bool ifu true friend ostream return value void Card Flip m IsFaceUp m IsFaceUp 3 3 新建头文件新建头文件 Hand hHand h 为纸牌的集合定义 为纸牌的集合定义 HandHand 类 类 ifndef Hand h define Hand h include Card h include using namespace std class Hand 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 10 页 共 26 页 public Hand virtual Hand void Add Card pCard void Clear int GetTotal const public vectorm Cards endif 4 4 新建新建 CppCpp 文件文件 Hand cppHand cpp 实现 实现 HandHand 类 类 include Hand h Hand 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 const if m Cards empty return 0 if m Cards 0 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 return total 5 5 新建头文件新建头文件 GenericPlayer hGenericPlayer h 为通用玩家定义抽象的 为通用玩家定义抽象的 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 11 页 共 26 页 GenericPlayerGenericPlayer 类 类 ifndef GenericPlayer h define GenericPlayer h include Hand h include using namespace std class GenericPlayer public Hand public friend ostream void GenericPlayer Bust const 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 12 页 共 26 页 cout m Name 引爆 n 7 7 新建头文件新建头文件 PlayerHouse hPlayerHouse h 从 从 GenericPlayerGenericPlayer 类派生类派生 PlayerPlayer 类和类和 HouseHouse 类 类 ifndef PlayerHouse h define PlayerHouse h include GenericPlayer h include using namespace std class Player public GenericPlayer public Player const string virtual Player virtual bool IsHitting const void Win const void Lose const void Push const class House public GenericPlayer public House const string virtual House virtual bool IsHitting const void FlipFirstCard endif 8 8 新建新建 cppcpp 文件文件 PlayerHouse cppPlayerHouse cpp 实现 实现 PlayerPlayer 类和类和 HouseHouse 类的成员函数 类的成员函数 include PlayerHouse h Player Player const string return response y response Y 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 13 页 共 26 页 void Player Win const cout m Name 恭喜你 你赢了 n void Player Lose const cout m Name 很遗憾 你输了 n void Player Push const cout m Name 平局 加油 n House House const string else cout 没有扑克牌翻动 n 9 9 新建头文件新建头文件 Deck hDeck h 从 从 HandHand 类派生类派生 DeckDeck 类 表示一副牌 类 表示一副牌 ifndef Deck h define Deck h include Hand h include GenericPlayer h include using namespace std class Deck public Hand public Deck virtual Deck void Populate void Shuffle void Deal Hand void AdditionalCards GenericPlayer endif 1010 新建新建 cppcpp 文件文件 Deck cppDeck cpp 实现 实现 DeckDeck 类的成员函数 类的成员函数 include Deck h include Deck Deck m Cards reserve 52 Populate 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 14 页 共 26 页 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 shuffle m Cards begin m Cards end void Deck Deal Hand m Cards pop back else cout Out of cards Unable to deal void Deck AdditionalCards GenericPlayer while aGenericPlayer IsBusted cout aGenericPlayer endl if aGenericPlayer IsBusted aGenericPlayer Bust 1111 新建头文件新建头文件 Game hGame h 定义定义 GameGame 类表示类表示 2121 点游戏 点游戏 ifndef Game h define Game h include Deck h include PlayerHouse h include include include using namespace std class Game public Game const vector Game void Play private Deck m Deck 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 15 页 共 26 页 House m House vectorm Players endif 1212 新建新建 cppcpp 文件文件 Game cppGame cpp 实现 实现 GameGame 类的成员函数 类的成员函数 include Game h include include using namespace std Game Game const vector for pName names begin pName names end pName m Players push back Player pName srand time 0 m Deck Populate m Deck Shuffle Game Game void Game Play 将最初的两张牌发给每一个人 vector iterator pPlayer for int i 0 i 2 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 pPlayer m Players end pPlayer cout pPlayer endl cout m House endl 向玩家发额外的牌 for pPlayer m Players begin pPlayer m Players end pPlayer m Deck AdditionalCards pPlayer 显示庄家的第一张牌 m House FlipFirstCard cout endl IsBusted pPlayer Win else 将仍然在玩的各个玩家与庄家做比较 for pPlayer m Players begin pPlayer 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 1313 新建新建 cppcpp 文件文件 Main cppMain cpp 编写游戏程序的主函数 并实现编写游戏程序的主函数 并实现 重载的重载的 operator operator 函数 函数 include Game h include include using namespace std 函数原型 ostream ostream int main cout t t 欢迎来到 21 点 游戏 n n int numPlayers 0 while numPlayers7 cout numPlayers vector names 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 17 页 共 26 页 string name for int i 0 i numPlayers i cout No i 1 name names push back name cout 游戏开始 endl 游戏循环 Game aGame names char again y while again n cout again return 0 ostream const string SUITS 草花 方块 红桃 黑桃 if aCard m IsFaceUp os SUITS aCard m Suit RANKS aCard m Rank else os return os ostream vector const iterator pCard if aGenericPlayer m Cards empty for pCard aGenericPlayer m Cards begin pCard aGenericPlayer m Cards end pCard const string RANKS 0 A 2 3 4 5 6 7 8 9 10 J Q K const string SUITS 草花 方块 红桃 黑桃 os m Suit m Rank t if aGenericPlayer GetTotal 0 cout 总分值 aGenericPlayer GetTotal 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 18 页 共 26 页 else os return os 6 测试分析 得出如下测试 分析结果 将程序运行结果进行 贴图贴图 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 19 页 共 26 页 七 技术难点及创新 难点如下 每次运行 21 点 游戏程序时 程序只创建一幅 52 张 的标准扑克牌 如果游戏局数过多使牌数量不足 则出现错误 创新 以下程序引入 随机数种子 通过输入随机数来生成扑克牌 不会导致牌数量不足弥补了上面难点 该程序没有牌的花色之分 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 20 页 共 26 页 比如数字5则包含了红心 梅花 方块 黑桃四种花色 程序运行 结果如下 以下是该程序 以下是该程序 include include using namespace std void main int a i b 0 c 0 boss 0 max num1 num2 d char x unsigned seed 随机数种子 struct player 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 21 页 共 26 页 char name 10 int sum play 7 while 1 cout seed srand seed 产生随机数 cout 多少人参加游戏 7 a num1 a num2 a while num1 cout 输入第 b 1 play b name num1 b for i 0 i a i play i sum 0 cout game start endl boss rand 10 1 cout 庄家目前一张牌的分为 boss endl for i 0 i a i cout play i name play i sum rand 10 1 cout play i sum d rand 10 1 cout d endl play i sum d b 0 while num2 cout play b name x if x y play b sum rand 10 1 cout 三张牌总和为 play b sum 21 cout play b name 引爆 endl 08 级计科 2 面向对象程序设计 课程设计 纸牌游戏 21 点 设计报告 第 22 页 共 26 页 num2 b b 0 max play 0 sum for i 0 imax max play i sum c i boss rand 10 1 cout 庄家总分 boss endl if boss21 cout 庄家引爆 所有未爆玩家获胜 boss cout 玩家 play c name 获胜 endl if max boss cout 庄家获胜 endl if max boss cout 庄家与玩家 play c name 打成平局 endl cout x if x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 营养学基本知识考点解析试题及答案
- 长相选择测试题及答案
- 激光技术在数据处理领域的实际应用试题及答案
- 深化理解2025年税务师考试题型特征试题及答案
- 系统架构设计的实践考题试题及答案
- 计基础知识试题及答案
- 食品科技产业园创新发展规划报告
- 解析光电工程师证书考试内容试题及答案
- 系统规划与管理师笔试复习中的团队合作与经验共享的模式与效能的分析与讨论试题及答案
- 深入解析护理管理的重要性护士资格证考试试题及答案
- 绞车培训考试题及答案
- 2025-2030中国功能近红外光学脑成像系统(fNIRS)行业市场发展趋势与前景展望战略研究报告
- 9.2《项脊轩志》课件统编版高二语文选择性必修下册-1
- 高速公路段工程施工安全专项风险评估报告
- 2025年安阳职业技术学院单招职业适应性测试题库含答案
- GB/T 13511.2-2025配装眼镜第2部分:渐变焦定配眼镜
- 2024-2025学年九年级化学人教版教科书解读
- 第三单元《莫斯科郊外的晚上》课件 七年级音乐下册 花城版
- 奶龙小组汇报模板
- 二零二五年矿泉水品牌战略合作框架协议范本2篇
- 夜间城市背景光污染对生物的影响分析
评论
0/150
提交评论