-
- Swift—-炸金花游戏
要求
- 创建一副扑克牌,包括2-10,J,Q,K,A,黑桃,红桃,梅花,方片,不包括大小王。
- 创建两名玩家
- 洗牌10次打乱顺序。
- 发牌,从第一张开始,按照一人3张
- 按规则比较大小。
每人3张手牌的大小比较规则:
- Swift—-炸金花游戏
- 1 豹子>同花顺>同花>顺子>对子>单张
- 2 处于一级别的两手牌比较最大的一张牌的大小
- 3 若两手牌为同一级别且最大的一张牌一样,则比较剩下的牌
4.3张牌都相等后再从最大的牌比花色,但此机率实在太小,省略
设计思路:
创建以下类:
Cards类:描述单张牌;
Play类:描述玩家;
Game类:控制游戏流程
PlayerWin类:静态赢家类,存放最后赢家的相关信息,用于输出
Computerd类:静态工具类,有各种需要用到的计算对比方法
daXiaoType:枚举类型,设定玩家手上的6种牌型,分别对应豹子>同花顺>同花>顺子>对子>单张
每个方法 和属性都有详细注释- */
import Foundation
//类:扑克牌
class Card{
var color:String //花色
var number:String //数字
init(color:String,number:String) {
self.color=color
self.number=number
}
func toString() ->String{
return "\(color)\(number)"
}
}
//类:玩家
class Player{
var id:Int //玩家ID
var name :String
var playerCardList:[Card]=[] //玩家手上的牌,0-2号为1号玩家的,3-5号原来2号玩家人
init(id:Int,name:String) {
self.id=id
self.name=name
}
}
//类:赢家,采用静态属性,直接赋值
class PlayerWin{
static var playerWinId:Int=0 //赢家在数组中的编号
static var cardWinType:Int=1 //赢家手牌的类型
}
//玩家手牌的类型
//豹子 6>同花顺5 >同花4 >顺子3 >对子2 >单张1
enum daXiaoType:Int{
case type_Baozhi=6
case type_TongHuaShun=5
case type_TongHua=4
case type_shunzhi=3
case type_DuiZhi=2
case type_DanZhang=1
}
//计算类,全部用静态方法
class Computerd{
/**
将牌面中的数字部份转换为编号数组(并将数组按从大到小排序),用于比较大小
*/
static func numberSort(cards:[Card]) -> [Int] {
var tmpNumber:[Int]=[] //临时数组,用来存放转换为数字后的3张手牌编号
//将手牌大小的数组转换成数字编号,用于确认是否顺子-》因为大小中含有JQKA,不能直接通过字符串转换成数字,需借用数组编号
//一共3张牌,3次循环
for i in 0..<3 {
for j in 0..<13{ //J是扑克牌数字 的编号
if cards[i].number==Game.number[j]{
tmpNumber.append(j)
// print("牌面是&#