1、 -一个 21 点的扑克牌游戏 一一、课程名称课程名称: : 扑克牌 二二、班级和姓名班级和姓名: : 某某 三三、课程设计要求课程设计要求 (1) 所有的函数与相应的数据封装到类中,改写主程序使其更加完善。 (2) 程序中一共有 13 张扑克牌可以随机抽取, 大于 10 的点数全部为半点。 (3) 庄家永远不会暴庄,庄家可以查看下一张牌,若大于 21 点, 则拒 绝。 (4) 高级玩家可以查看下一张牌,按 H 键,然后按要求输入密码,密码正 确可以看牌,并决定是否要牌。 (5) 每次要牌后可以设定赔率, 如果开始是下的 10 元钱的注, 如果牌 好,你可以要求再下注,当然不能超过你所有的总钱
2、数。 (6) 将界面提示说明改成中文界面,界面的解释详细友好,可以吸引更多 玩家 四四、功能说明功能说明: : 本程序首先编写了一个类,将程序中定义的函数和数据封装到类中。这样不仅满 足了设计要求也使整个程序的结构更加一目了然。然后对 10 以上的牌重新附值 为 0.5 以符合题目要求。接下来设计了防止庄家暴庄的函数,超级玩家看牌的函 数,计算累计总赌注的函数。使程序真正完善起来。数据和函数是用类封装在一 起的, 五、采用的主要数据结构类型 (1)本程序进行了类的封装,编写了一个类来封装所有相关函数和变量,把 源程序封装在类中,然后对 main 主函数进行改写,结构清晰,条理有序,使得 修改十
3、分便捷,一目了然。 题目要求把抽到的大于 10 点的牌的点数设为半点。按照要求将随机取下一张牌 的成员函数, 判断牌的点数是否大于 10 的 if语句中大于 10 的牌重新赋值为 0.5。 例:if(playercard110) playercard1=0.5; (2) 题目要求庄家永远不会暴庄,庄家取下一张之前先判定取牌后的总点数是否 会大于 21 点,大于的话就拒绝去下一张,小于时就继续取牌,在函数中首先随机 产生下一张牌,接着用条件语句判定原有点数与新牌点数之和是否大于 21 点,然 后决定是否取牌。 例:if(cpum1; /输入密码 if(s1=m1) /判断密码是否相符 couta
4、ns; if(ans=y)|(ans=Y) /判断玩家是否还要下注 coutbett; money=money-bett; /计算总资本 源程序: #include #include #include #include #include #include class Playing_Card /扑克牌类,表示一张扑克牌的面值、花色和与之相联系的操作 private: int m_Value; /扑克的实际面值,用整型值表示,从1开始,113 char m_Face3; /扑克的数字大小,用字符串的形式表示,为A,2,3,10,J,Q,K char m_Suit ; /扑克的花色(黑、红、梅、方
5、) public: Playing_Card(); /构造函数,初始化扑克对象,实际上是将对象清零 void showcard(); /显示扑克牌对象的面值,花色 void Card_Make(int); /为一张扑克牌对象赋予特定的面值和花色 friend class PerDeck; /定义类PerDeck为类Playing_Card的友元类 ; class Deck /一副扑克(54张)类 private: Playing_Card m_cardarray54; /一副扑克由54张扑克牌构成 int m_lastdelt; /标记这副扑克牌删除的张数 public: Deck(); /构
6、造函数,初始化一副扑克牌对象,实际上是将其内的54 张扑克牌清零 void MakeDeck() ; /生成一副扑克,即对其内的54张扑克赋予正确的面值及花 色 void ShowDeck(); /依次逐张显示这副牌 void DeckShuff(int); /洗牌,其参数是洗牌的次数 void Remove_Card(); /将删除的那张扑克牌的内容清零,使这张牌在屏幕上显示 不出来 friend class PerDeck; /定义类PerDeck为类Deck的友元类 ; class PerDeck Playing_Card m_Card20; /最多有20张牌 int nNum; /实际张数 public: PerDeck() void MakeperDeck(De