Как присвоить значения изображениям колоды карт, а затем сравнить их в Swift - PullRequest
0 голосов
/ 23 января 2020

Как я могу присвоить значения колоде карт? Как A - высокий, а 2 - низкий с изображениями с именами от c -2 до c -53?

Пока это мой код, поэтому мне нужно присвоить значения числам, а также цветам укажите c карточные изображения (4 цвета), а затем сравните их с правильным или ложным утверждением.

Например, 2 - самое низкое, A - самое высокое, A и 2 означают выбор 7 означает, что разыграть одну и ту же колоду, и если выпала та же карта, она сбрасывается.

    let shuffled = (2...53).shuffled()

    let leftNumber = shuffled[0]

    let rightNumber = shuffled[1]

    let player1Deck = shuffled[2]

    let player2Deck = shuffled[3]

    leftPile.image = UIImage(named: "c\(leftNumber)")
    rightPile.image = UIImage(named: "c\(rightNumber)")
    player1Cards.image = UIImage(named: "c\(player1Deck)")
    player2Cards.image = UIImage(named: "c\(player2Deck)"

}

1 Ответ

0 голосов
/ 23 января 2020

Ваш вопрос довольно широкий, но я бы посоветовал вам начать с создания соответствующих структур данных, представляющих колоду карт. Что-то вроде:

struct Deck {
    enum Suite: String {
        case clubs = "Clubs"
        case diamonds = "Diamonds"
        case hearts = "Hearts"
        case spades = "Spades"

    }

    struct Rank {
        let name: String
        let faceValue: Int
        let rankValue: Int
    }

    private var allSuites:[Suite] = [.clubs,.diamonds,.hearts,.spades]
    private var allRanks = [Rank(name: "Ace", faceValue: 1,rankValue:13), Rank(name: "Two", faceValue: 2,rankValue: 1),Rank(name: "Three", faceValue: 3,rankValue: 2),Rank(name: "Four", faceValue: 4,rankValue:3 ),Rank(name: "Five", faceValue: 5,rankValue: 4),Rank(name: "Six", faceValue: 6,rankValue: 5),Rank(name: "Seven", faceValue: 7,rankValue: 6),Rank(name: "Eight", faceValue: 8,rankValue: 7),Rank(name: "Nine", faceValue: 9,rankValue: 8),Rank(name: "Ten", faceValue: 10,rankValue: 9),Rank(name: "Jack", faceValue: 10,rankValue: 10),Rank(name: "Queen", faceValue: 10,rankValue: 11),Rank(name: "King", faceValue: 10,rankValue: 12) ]

    private let cards: [Card]
    private var availableCards: [Card]
    init() {
        var cards = [Card]()
        for suite in allSuites {
            for rank in allRanks {
                cards.append(Card(suite: suite, rank: rank))
            }
        }
        self.cards = cards
        self.availableCards = cards
    }

    mutating public func shuffle() {
        self.availableCards = self.cards.shuffled()
    }

    mutating public func drawCard() -> Card? {
        if let card = self.availableCards.first {
            self.availableCards.removeFirst()
            return card
        } else {
            return nil
        }
    }

    var top: Card? {
        get {
            return availableCards.first
        }
    }

    var remaining: Int {
        get {
            return availableCards.count
        }
    }
}

struct Card: Comparable, CustomDebugStringConvertible {
    let suite: Deck.Suite
    let rank: Deck.Rank

    var image: UIImage {
        get {
            let imageName = "\(rank.name)\(suite.rawValue)"
            return UIImage(named: imageName) ?? UIImage()
        }
    }

    static func == (lhs: Card, rhs: Card) -> Bool {
        return lhs.rank.faceValue == rhs.rank.faceValue && lhs.suite == rhs.suite
    }

    static func < (lhs: Card, rhs: Card) -> Bool {
        return lhs.rank.rankValue < rhs.rank.rankValue
    }

    var debugDescription: String {
        return "\(self.rank.name) of \(self.suite.rawValue)"
    }
}

Тогда вы можете использовать его следующим образом:

var deck = Deck()
print(deck.top ?? "Empty")
deck.shuffle()
print(deck.top ?? "Empty")
while let card = deck.drawCard() {
    print(card)
}
deck.shuffle()
if let first = deck.drawCard(), second = deck.drawCard() {
    if first > second {
        print("\(first) is higher than \(second)")
    } else if first < second {
        print("\(first) is lower than \(second)")
    } else {
        print("\(first) is the same value as \(second)")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...