实例介绍
“21” 点纸牌游戏
(1)基本要求
1.21点游戏是一个古老的扑克游戏,游戏的规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。扑克牌的分值取它们的面值,A充当1或者11分,J, Q和K人头牌都是10分。
2.庄家VS1~7个玩家。在开局时,包括庄家在内的所有参与者都有两张牌。玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐藏的。接下来,只要愿意,各个玩家都有机会依次再拿-张牌。如果是玩家的总分超过了21(称为引爆),那么这个玩家就输了。在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。只要庄家的总分等于或小于16,那么他就必
须再拿牌。如果庄家引爆了,那么还没有引爆的所有玩家都将获胜,引爆的玩家打成平局。否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。如果二者的总分相同,则玩家与庄家打成平局。
(2)设计内容
依照规则设计单人游戏程序,其余玩家与庄家均有电脑操作。玩家使用自动决策系统。
(3)设计思路
1.使用枚举定义52张扑克牌,有“红桃、黑桃、方块、梅花”四种花色,每种花色有“ACE、TWO~TEN、QUEEN、KING”十三张牌,牌点计算时,ACE在总分高于21时记1,低于21时记11。J、Q、K均记10点
2.定义1~7人参加游戏并输入每位玩家的姓名
3.洗牌,给参与者发牌并显示牌的花色及点数,隐藏庄家的一张牌
4.显示玩家状态
5.判断各玩家点数,询问玩家是否继续要牌,玩家仅控制玩家1,剩余玩家为自动决策系统出牌
自动决策系统设计基于玩家的出牌期望与爆牌几率,参考下表:
通过一组if语句与rand()函数进行设计概率。实现除玩家外的电脑自动出牌的决策系统。
6.所有玩家与庄家要牌结束,统计分数,输出胜负结果
7.询问是否开始新一局游戏
8.游戏类声明与函数声明如下:
class Game_class //声明21点游戏类
{
private:
Card deck[52];//一副扑克牌
int dealPos;//发牌位置
Card hands[8][21];//hand[0]存庄家牌,hand[1-7]存玩家牌
int numOfCard[8];//庄家及玩家的牌数
char name[8][NAME_LENGTH];//庄家及玩家姓名
int numOfPlayer;
void shuffle();//洗牌
int GetTotalScore(Card hand[21], int n);//返回一手牌的总分值
void ShowStatus(int num, bool hideFirstCardAndTotalScore = false);//显示庄家(num=0)或玩家(num>0)的当前状态
Card DealOneCard()
{
return deck[dealPos ];//发一张扑克牌
}
public:
//方法声明
Game_class();//无参构造函数
virtual ~Game_class() {};
void Game();
char Auto_Decision(int i);//电脑玩家自动决策函数
(4)流程图
(5)程序开发效果演示
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论