swift 扑克_扑克牌partner
1. 基本的扑克牌数据结构
swift
// 枚举定义花色和点数
enum Suit: String, CaseIterable {
case spades = "♠️
case hearts = "♥️
case diamonds = "♦️
case clubs = "♣️
enum Rank: String, CaseIterable {
case two = "2", three = "3", four = "4", five = "5
case six = "6", seven = "7", eight = "8", nine = "9
case ten = "10", jack = "J", queen = "Q", king = "K", ace = "A
// 扑克牌结构体
struct Card: Hashable {
let suit: Suit
let rank: Rank
var description: String {
return "\\(rank.rawValue)\\(suit.rawValue)
2. 玩家和合作伙伴系统
swift
class Player {
let id: String
var name: String
var hand: [Card] = []
init(id: String, name: String) {
self.id = id
self.name = name
func receiveCard(_ card: Card) {
hand.append(card)
// 合作伙伴关系
struct Partnership {
let player1: Player
let player2: Player
var teamScore: Int = 0
init(player1: Player, player2: Player) {
self.player1 = player1
self.player2 = player2
func contains(player: Player) -> Bool {
return player.id == player1.id || player.id == player2.id
mutating func addToScore(points: Int) {
teamScore += points
3. 完整的扑克牌游戏管理器
swift
class PokerGameManager {
private var deck: [Card] = []
private var players: [Player] = []
private var partnerships: [Partnership] = []
// 初始化一副牌
private func initializeDeck {
deck.removeAll
for suit in Suit.allCases {
for rank in Rank.allCases {
deck.append(Card(suit: suit, rank: rank))
// 洗牌
func shuffleDeck {
deck.shuffle
// 添加玩家并建立合作伙伴关系
func addPlayersAndPartners(players: [(String, String)]) {
guard players.count >= 2 else { return }
// 创建玩家
self.players = players.map { Player(id: $0.0, name: $0.1) }
// 建立合作伙伴关系(两人一组)
partnerships.removeAll
for i in stride(from: 0, to: players.count, by: 2) {
if i + 1
let partnership = Partnership(
悟空德州邀请码player1: self.players[i],
player2: self.players[i + 1]
partnerships.append(partnership)
// 发牌
func dealCards(cardsPerPlayer: Int = 13) {
initializeDeck
shuffleDeck
// 清空所有玩家的手牌
players.forEach { $0.hand.removeAll }
// 发牌
for i in 0..
if i
let playerIndex = i % players.count
players[playerIndex].receiveCard(deck[i])
// 根据玩家查找其合作伙伴
func findPartner(for player: Player) -> Player? {
guard let partnership = partnerships.first(where: { $0.contains(player: player) }) else {
return nil
if partnership.player1.id == player.id {
return partnership.player2
} else {
return partnership.player1
// 获取玩家的团队
func getPartnership(for player: Player) -> Partnership? {
return partnerships.first { $0.contains(player: player) }
// 显示游戏状态
func displayGameStatus {
print("=== 当前游戏状态 ===")
for (index, partnership) in partnerships.enumerated {
print("团队 \\(index + 1):")
print(" \\(partnership.player1.name) 的手牌: \\(partnership.player1.hand.map { $0.description })")
print(" \\(partnership.player2.name) 的手牌: \\(partnership.player2.hand.map { $0.description })")
print(" 团队得分: \\(partnership.teamScore)")
4. 使用示例
swift
// 创建游戏实例
let gameManager = PokerGameManager
// 添加玩家和建立合作伙伴关系
gameManager.addPlayersAndPartners(players: [
("p1", "Alice"),
("p2", "Bob"),
("p3", "Charlie"),
("p4", "Diana")
])
// 发牌并开始游戏
gameManager.dealCards
// 显示游戏状态
gameManager.displayGameStatus
// 查找合作伙伴
if let alice = gameManager.players.first(where: { $0.name == "Alice" }) {
if let partner = gameManager.findPartner(for: alice) {
print("\\(alice.name) 的合作伙伴是: \\(partner.name)")
5. 扩展功能
swift
extension PokerGameManager {
// 分析手牌强度
func analyzeHandStrength(for player: Player) -> [String: Any] {
let hand = player.hand
// 按花色分组
let suitsGroup = Dictionary(grouping: hand) { $0.suit }
// 统计同花色的牌数
let suitCounts = suitsGroup.mapValues { $0.count }
// 检查是否有对子、三条等
let ranksGroup = Dictionary(grouping: hand) { $0.rank }
let pairs = ranksGroup.filter { $0.value.count == 2 }.count
let threeOfAKind = ranksGroup.filter { $0.value.count == 3 }.count
return [
player": player.name,
handSize": hand.count,
suitsDistribution": suitCounts,
pairs": pairs,
threeOfAKind": threeOfAKind,
strongestSuit": suit": suitCounts.max(by: { $0.value
这个实现提供了:
您可以根据具体的扑克游戏规则(如桥牌、升级等)进一步扩展这个基础框架。