2025年swift版欢乐斗牛

swift版欢乐斗牛欢乐斗牛 参与斗牛的玩家每回合会得到五张扑克牌 每张牌可能是 A 2 3 4 5 6 7 8 9 10 J Q K 中的任意一张 这些牌分别代表一个数 就是其本身 我们规定 A 代表 1 J Q K 和 10 是等价的 玩家拿到五张牌后 可以任意取三张牌 如果三张牌的点数相加为 10 或者 10 的倍数 比如 20 或者 30 即说明该玩家有牛 在有牛的前提下 剩下的两张牌相加 即为玩家的最终点数

大家好,我是讯享网,很高兴认识大家。

欢乐斗牛

参与斗牛的玩家每回合会得到五张扑克牌,每张牌可能是 A、2,3、4、5、6、7、8、9、10 、J、 Q、 K中的任意一张,这些牌分别代表一个数,就是其本身,我们规定A代表1,J、Q、K和10是等价的。玩家拿到五张牌后,可以任意取三张牌,如果三张牌的点数相加为10或者10的倍数(比如20或者30),即说明该玩家有牛。在有牛的前提下,剩下的两张牌相加 即为玩家的最终点数,点数总共有牛1、牛2…牛10这样十种情况,点数越大越好(即牛1最小,牛10最大),两张牌的点数相加若超过10,则只取个位数,比如 3和8, 则该玩家点数为牛1。如果构成10或者10的倍数,即都视为牛10,比如 5和5、10和10、10和J,这三种情况均为牛10。如果类型相同则比较最大的牌的数字,如果数字相同则比较花色依此类推。

计分规则:
1.无牛(无分):5张牌中的任意3张加起来不能成为10的倍数(如5,6,8,10,J)。
2.有牛:5张牌中的任意3张加起来为10的倍数,但另外2张不为10的倍数(如5,6,7,9,J)。
3.牛牛:5张牌中的任意3张加起来为10的倍数,且另外2张也为10的倍数(如5,6,9,10,J)。
4.四花:5张牌中一张为10,另外4张为花(如10,J,J,Q,K)。
5.五花:5张牌全为花(如Q,J,J,Q,K)。
6.五小:5张牌都小于5,并且全部加起来小于等于10。
7.炸弹:5张牌有4张牌一样。

牌型:炸弹> 五小 > 五花 > 四花 > 牛牛 > 有分 > 没分。
花色: 黑桃 > 红桃 > 草花 > 方块。
单张:K > Q > J > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2 > A。


讯享网

同牌型间的比较:
无牛:比单张大小。
有牛:比分数大小,牛九 > 牛八 > 牛七 > 牛六 > 牛五 > 牛四 > 牛三 > 牛二 > 牛一。
牛牛:比单张+花色大小。
四花:比单张+花色大小。
五花:比单张+花色大小。
五小:比点数+单张+花色大小。(有些地区不支持。)
炸弹:大牌吃小牌,K最大,A最小。

牌型翻倍情况:以赢的一方倍数为准。
无分和牛1,牛2,牛3,牛4,牛5,牛6: 1倍。
牛7,牛8,牛9: 2倍。
牛牛: 3倍。
四花: 4倍。
五花: 5倍。
五小: 6倍
炸弹: 6倍
玩法规则:
1.每局确定N个玩家(一共2-6人),其中第一局通过系统随机确定庄家,如果庄家有牛则继续做庄,如果没牛就下庄,轮到下一家。
2.每人初始分为1000分,每局基准分100分。
3.每人随机洗牌并发牌5张。
4.按斗牛规则综合进行对比,并确定哪些是赢家,若玩家没有牛,则显示“无牛”,若玩家有牛,输出一个正整数代表“牛几”。

设计思路:
创建Cards类,Play类,game类,Test主程序类。
其中game类中的Compare(Caed x,Card y)方法用来比较两张牌的大小
运行结果如下:
在这里插入图片描述

import Foundation //为了预留大小王的要求,故设计成枚举类型 /// 返回花色,//黑桃,红桃,梅花,方块:4种,另大小王还有2种,分别计为:大,小 // 数字 从大到小 /// /// - DaWang: <#DaWang description#> /// - XiaoWang: <#XiaoWang description#> /// - HeiTao: <#HeiTao description#> /// - HongTao: <#HongTao description#> /// - MeiHua: <#MeiHua description#> /// - FangKuai: <#FangKuai description#> enum CardColor :Int{ case DaWang=6 case XiaoWang=5 case HeiTao = 4 case HongTao = 3 case MeiHua = 2 case FangKuai = 1 case error = -1 /// 返回花色的数字大小 /// /// - Returns: <#return value description#> func getInt() -> Int { return self.rawValue } ///返回花色 /// /// - Returns: <#return value description#> func toSting() -> String { switch self { case .DaWang: return "大" //大王 case .XiaoWang: return "小" //小王 case .HeiTao: return "黑桃" case .HongTao: return "红桃" case .MeiHua: return "梅花" case .FangKuai: return "方块" default: return "默认" } } } /// 定义扑克牌数字的大小 /// /// - Wang: <#Wang description#> /// - K: <#K description#> /// - Q: <#Q description#> /// - J: <#J description#> /// - X_10: <#X_10 description#> /// - X_9: <#X_9 description#> /// - X_8: <#X_8 description#> /// - X_7: <#X_7 description#> /// - X_6: <#X_6 description#> /// - X_5: <#X_5 description#> /// - X_4: <#X_4 description#> /// - X_3: <#X_3 description#> /// - X_2: <#X_2 description#> /// - A: <#A description#> enum CardNumber :Int{ case Wang = 14 case K=13 case Q=12 case J=11 case X_10 = 10 case X_9=9 case X_8=8 case X_7=7 case X_6 = 6 case X_5 = 5 case X_4 = 4 case X_3 = 3 case X_2 = 2 case A = 1 case error = -1 /// 返回牌面对应的数字,用于比较大小 /// /// - Returns: <#return value description#> func getNumber() -> Int { return self.rawValue } func toString() -> String{ switch self { case .Wang: return "王" case .K: return "K" case .Q: return "Q" case .J: return "J" case .X_10: return String(10) case .X_9: return String(9) case .X_8: return String(8) case .X_7: return String(7) case .X_6: return String(6) case .X_5: return String(5) case .X_4: return String(4) case .X_3: return String(3) case .X_2: return String(2) case .A: return "A" default: return "默认" } } /// 返回牌面大小,用于计算几张牌的和 /// /// - Returns: <#return value description#> func getDaXiao() -> Int { switch self { case .Wang: return 10 case .K: return 10 case .Q: return 10 case .J: return 10 case .X_10: return 10 case .X_9: return 9 case .X_8: return 8 case .X_7: return 7 case .X_6: return 6 case .X_5: return 5 case .X_4: return 4 case .X_3: return 3 case .X_2: return 2 case .A: return 1 default: return 0 } } } /// 扑克牌类 class Card{ private var color :CardColor private var number:CardNumber //A,2,3,4,5,6,7,8,9,10,J,Q,K ,王,如果是大小王,和花色组合起来就是大王,小王 init(color:CardColor,number:CardNumber) { self.color=color self.number=number } ///返回牌的花色+大小 func toString() -> String{ return "\(color.toSting())\(number.toString())" } ///返回某张牌的数字大小 func getNumber() ->Int{ return self.number.rawValue } /// 返回牌面大小值,用于计算几张牌之和 /// /// - Returns: <#return value description#> func getDaXiao() -> Int{ return self.number.getDaXiao() } /// 返回某张牌的花色对应的数字大小 /// /// - Retu

讯享网
小讯
上一篇 2025-04-10 08:44
下一篇 2025-02-13 11:45

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/60307.html