Swift 炸金花遊戲

2021-08-25 11:10:57 字數 3599 閱讀 5710

1 豹子》同花順》同花》順子》對子》單張

2 處於一級別的兩手牌比較最大的一張牌的大小

3 若兩手牌為同一級別且最大的一張牌一樣,則比較剩下的牌

4.3張牌都相等後再從最大的牌比花色,但此機率實在太小,省略

設計思路:

建立以下類:

cards類:描述單張牌;

play類:描述玩家;

game類:控制遊戲流程

playerwin類:靜態贏家類,存放最後贏家的相關資訊,用於輸出

computerd類:靜態工具類,有各種需要用到的計算對比方法

daxiaotype:列舉型別,設定玩家手上的6種牌型,分別對應豹子》同花順》同花》順子》對子》單張

每個方法 和屬性都有詳細注釋

*/ import foundation

//類:撲克牌

class card

func tostring() ->string}

//類:玩家

class player

}//類:贏家,採用靜態屬性,直接賦值

class playerwin

//玩家手牌的型別

//豹子 6>同花順5 >同花4 >順子3 >對子2 >單張1

enum daxiaotype:int

//計算類,全部用靜態方法

class computerd}}

//此時陣列已轉換成編號,按從小到大的順序排序

tmpnumber = tmpnumber.sorted() //預設從小到大排序

var x:[int]=

return x

}/**

比較2個數的大小,當第乙個大時,返回0;當第2個大時,返回1;當相等時,返回-1

*/static func max_xy(x:int,y:int)->int

if xint

if numbers[1]==numbers[2]

if numbers[0]==numbers[2]

return 0

}/**

對比2個數字的大小,先比較第一張,相等再第二張,相等再第3張

返回0代表第乙個玩家贏。返回1代表第二個玩家贏

*/static func max_cards(cards1:[card],cards2:[card])->int

if card1_numbers[0]card2_numbers[1]

if card1_numbers[1]card2_numbers[2]

if card1_numbers[2]string

if cardtype==daxiaotype.type_tonghuashun.rawvalue

if cardtype==daxiaotype.type_shunzhi.rawvalue

if cardtype==daxiaotype.type_tonghua.rawvalue

if cardtype==daxiaotype.type_duizhi.rawvalue

if cardtype==daxiaotype.type_danzhang.rawvalue

return "err"

}/**

輸出陣列完整內容

*/static func printarray(array:array)

var tmpcardnumber:[string]= //臨時陣列,用來對比手牌數字的大小

//將三張手牌的大小傳到臨時陣列裡面

for i in 0..<3

//對子

if cards[0].number==cards[1].number || cards[1].number==cards[2].number || cards[0].number==cards[2].number

//判斷同花順

//同花

if cards[0].color==cards[1].color && cards[1].color==cards[2].color

else //花色相同但不是順子

return type

} //順子 : 花色不同但是順子

if cards[0].color != cards[1].color || cards[1].color != cards[2].color

} //預設是單張

return type

}/**判斷手牌是不是順子

*/static func isshunzhi(cardnumbers:[string])->bool

}}

//此時陣列已轉換成編號,按從小到大的順序排序

var sortnumber = tmpnumber.sorted()

print("牌面大小在陣列中的編號是:\(sortnumber[0])..\(sortnumber[1])..\(sortnumber[2])")

//是不是連續?

if sortnumber[0]+1 == sortnumber[1] && sortnumber[1]+1 == sortnumber[2]

return false

}/**

當2個玩家手牌的型別一樣時,比較2張牌的大小 ,返回0代表第乙個贏,返回1代表第二個贏

*/static func comparison(cards1:[card],cards2:[card]) ->int //比較最後一張牌的大小

else

}//當為同花順或者順子時,比較第一張的大小就ok

if playerwin.cardwintype==5 || playerwin.cardwintype==3

//當為對子時,比較對子那一張即可

if playerwin.cardwintype==2

//當是同花或者單張時,要先比較第一張,相等再第二張,相等再第3張。如果都相等棟比較第一張花色。。。到第3張花色

if playerwin.cardwintype==4 || playerwin.cardwintype==1

return winid

}//遊戲主類

class game

//建立撲克牌

func createcards()

}print("撲克牌建立ok...")

print("撲克牌為:")

computerd.printarray(array: cardlist)

}//洗牌

func changecards()

}print("洗牌完成。。。。")

computerd.printarray(array: cardlist)

}//發牌,每人n張,炸金花為3張

func sendcars(numbercard:int)

if card1_type//扎金花要發3張牌

let number = 3

//主程式開始

var game=game();

game.creatplayer()

game.createcards()

game.changecards()

game.sendcars(numbercard: number)

game.gameko()

過年回家炸金花

過年的時候和親戚朋友們一起炸金花,小贏了一把,仔細想想,我覺得炸金花的目的有三 1.娛樂,增進彼此間的感情 2.練 賭博 的氣概 3.建模 第一條很容易理解,而第二條,我是這樣理解的 人的一生會面臨種種抉擇,有時候沒能完全了解整個情況,可能只會根據目前的情況去推測事情的趨勢,勝負不明朗。這時候需要有...

XDU 1044 炸金花 (模擬)

時間限制 1 sec 記憶體限制 128 mb 提交 狀態 討論版 炸金花是乙個風靡全球的撲克遊戲,不少人因為這個遊戲發了家,而更多的人則輸得傾家蕩產。為了幫助賭徒們戒掉它,現在決定派你去寫乙個程式,幫助賭徒們更好的認識這個遊戲。炸金花在這裡被簡化成這樣乙個情況 每乙個人都會得到隨機派發的三張牌 每...

php 炸金花牌型 和 比牌 規則

引數 poker 是乙個陣列 size 1 13 表示 size arr a 二 三 四 五 六 七 八 九 十 j q k tag 1 4 表示 tag arr 黑桃 紅桃 梅花 方片 例子 豹子a poker size 1,tag 1,name 黑桃a size 1,tag 2,name 紅桃a...