黑杰克详细注释

21点又名黑杰克(Blackjack),起源于法国,已流传到世界各地,有着悠久的历史。现在在世界各地的赌场中都可以看到二十一点。随着互联网的发展,二十一点开始走向网络时代。该游戏由2到6个人玩,使用除大小王之外的52张牌,游戏者的目标是使手中的牌的点数之和不超过21点且尽量大。
大家手中扑克点数的计算规则是:2至9牌,按其原点数计算;K、Q、J和10牌都算作10点;A 牌(ace)既可算作1点也可算作11点,由玩家自己决定(当玩家停牌时,点数一律视为最大而尽量不爆,如A+9为20,A+4+8为13,A+3+A视为15)。
这里我们假设游戏仅有两名玩家(分别叫庄家和闲家)进行,以下是游戏规则:
1、闲家和庄家都会从一副牌中抽取两张牌。 庄家会翻开一张牌让闲家看到。
2、闲家可以选择“要牌”或“停牌”,以尽可能接近21点。如果闲家选择“要牌”,则他会从牌堆上抽取一张牌。 如果闲家超过21点,则他输了游戏,无论庄家手中的牌是什么。
3、当闲家完成行动后,庄家会翻开他的第二张牌。如果他的牌点数小于17,则必须要牌。如果他的牌点数大于或等于17,则必须停牌。注意:如果闲家爆了,庄家只会展示第二张牌给闲家,而不会按规则要牌或停牌。
4、当庄家完成行动后,闲家的牌与庄家的牌进行比较。如果闲家的牌点数大于庄家但不超过21点,则闲家赢了游戏。同理如果庄家的牌点数大于闲家但不超过21点,则庄家赢了游戏;如果闲家或庄家超过21点,则超过者输了游戏(按规则不会出现双方同时超过21点的情况)。如果闲家和庄家都不超过21点且牌点数相等,则平局。
现请你写一段闲家的程序来和庄家比赛。因为发牌的顺序是随机的,你很难保证每次都获胜。但庄家的策略是固定的,因此我们要求你的算法要尽可能多的获胜。
这个程序与你做过的大部分题目不一样,你需要通过不断地和另外一个程序(叫“交互程序”)进行交互。你的程序是闲家,交互程序是庄家。
程序开始,庄家会先发给你两张牌,每张牌一行,格式为花色加牌面(中间有一个空格),如Spade 4、Heart A、Heart 10等(由于牌面可能是整数也可能是字符,所以建议按字符串读入),后边每次发牌的格式都一样。然后给自己也发两张牌,但目前它只会给你看一张。此时你的程序要根据你的牌和你看到的庄家的牌来决定下一步干什么,即要牌”或“停牌”。如果要牌,则输出Hit(要换行),此时,庄家会再发给你一张牌。此过程会一直持续,直到你停牌,这时你要输出Stand(要换行)。在此过程中,一旦你手上的牌超过21点,你要输出Bust(要换行),即爆了,同时也不能继续要牌了。无论你是主动停牌,还是爆掉21点被动停牌,庄家都是给你展示它的另外一张牌。此时庄家也有两种选择,一是你爆了,它会直接停牌,二是你没爆,按规则,当庄家的牌点数小于17,则要牌。牌点数大于或等于17,则停牌。如果它需要继续要牌,它会先输出Split(有换行符),然后向你展示它刚拿到的牌;此过程会持续到不能要为止。如果停牌,它会输出Stand(有换行符)。
停牌后,你的程序要先输出游戏结果,如果你赢了,则输出Win(要换行),输了则输出Lose(要换行),平局则输出Push(要换行)。然后再在同一行内依次输出你的牌点数和庄家的牌点数(中间用一个空格分隔),程序结束。
下边是一次游戏的过程:
庄家先输

你可能感兴趣的:(c++)