ΠΠ²Π°Ρ ΡΠ»Π°Π½Π°ΠΊ ΠΎΠΏΠΈΡΡΡΠ΅ ΠΏΡΠΎΡΠ΅Ρ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ° ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π΅ ΠΈΠ³ΡΠ΅ Π·Π° ΠΎΠ±ΡΠΊΡ ΠΏΠ°ΠΌΡΠ΅ΡΠ° ΠΊΠΎΡΠ° ΠΌΠΈ ΡΠ΅ Π·Π°ΠΈΡΡΠ° ΡΠ²ΠΈΡΠ°. ΠΡΠΈΠΌ ΡΡΠΎ ΡΠ΅ Π΄ΠΎΠ±Π°Ρ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±ΠΈ, Π½Π°ΡΡΠΈΡΠ΅ΡΠ΅ Π½Π΅ΡΡΠΎ Π²ΠΈΡΠ΅ ΠΎ Π‘Π²ΠΈΡΡ ΠΊΠ»Π°ΡΠ°ΠΌΠ° ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΠΌΠ° Π΄ΠΎΠΊ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΡΠΎΠ»Π°Π·ΠΈΠ»ΠΈ. ΠΠ»ΠΈ ΠΏΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΠΏΠΎΡΠ½Π΅ΠΌΠΎ, Ρ
Π°ΡΠ΄Π΅ Π΄Π° ΡΠ°Π·ΡΠΌΠ΅ΠΌΠΎ ΡΠ°ΠΌΡ ΠΈΠ³ΡΡ.
ΠΠΎΠ΄ΡΠ΅ΡΠ°ΠΌΠΎ: Π·Π° ΡΠ²Π΅ ΡΠΈΡΠ°ΠΎΡΠ΅ βΠ₯Π°Π±ΡΠ°β β ΠΏΠΎΠΏΡΡΡ ΠΎΠ΄ 10 ΡΡΠ±Π°ΡΠ° ΠΏΡΠΈ ΡΠΏΠΈΡΡ Π½Π° Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠΈ ΠΊΡΡΡ Π‘ΠΊΠΈΠ»Π»Π±ΠΎΠΊ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΏΡΠΎΠΌΠΎΡΠΈΠ²Π½ΠΈ ΠΊΠΎΠ΄ βΠ₯Π°Π±Ρβ.
Π‘ΠΊΠΈΠ»Π»Π±ΠΎΠΊ ΠΏΡΠ΅ΠΏΠΎΡΡΡΡΡΠ΅: ΠΠ±ΡΠ°Π·ΠΎΠ²Π½ΠΈ ΠΎΠ½Π»Π°ΡΠ½ ΠΊΡΡΡ
βΠΡΠΎΡΠ΅ΡΠΈΡΠ° ΠΠ°Π²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρβ .
ΠΠ°ΠΊΠΎ ΠΈΠ³ΡΠ°ΡΠΈ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡΠΊΡ ΠΊΠ°ΡΡΠΈΡΡ
ΠΠ³ΡΠ° ΠΏΠΎΡΠΈΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡΠΎΠΌ ΡΠ΅ΡΠ° ΠΊΠ°ΡΠ°ΡΠ°. ΠΠ΅ΠΆΠ΅ Π»ΠΈΡΠ΅ΠΌ Π½Π°Π΄ΠΎΠ»Π΅ (ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ, ΡΠ»ΠΈΠΊΠ° Π½Π°Π΄ΠΎΠ»Π΅). ΠΠ°Π΄Π° ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π½Π° Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΡ, ΡΠ»ΠΈΠΊΠ° ΡΠ΅ ΠΎΡΠ²Π°ΡΠ° Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ.
ΠΠ°Π΄Π°ΡΠ°ΠΊ ΠΈΠ³ΡΠ°ΡΠ° ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ½Π°ΡΠ΅ ΡΠ²Π΅ ΠΊΠ°ΡΡΠ΅ ΡΠ° ΠΈΡΡΠΈΠΌ ΡΠ»ΠΈΠΊΠ°ΠΌΠ°. ΠΠΊΠΎ Π½Π°ΠΊΠΎΠ½ ΠΎΡΠ²Π°ΡΠ°ΡΠ° ΠΏΡΠ²Π΅ ΠΊΠ°ΡΡΠΈΡΠ΅ ΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ Π΄ΡΡΠ³Ρ ΠΈ ΡΠ»ΠΈΠΊΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ»ΠΎΠΏΠ΅, ΠΎΠ±Π΅ ΠΊΠ°ΡΡΠΈΡΠ΅ ΠΎΡΡΠ°ΡΡ ΠΎΡΠ²ΠΎΡΠ΅Π½Π΅. ΠΠΊΠΎ ΡΠ΅ Π½Π΅ ΠΏΠΎΠΊΠ»Π°ΠΏΠ°ΡΡ, ΠΊΠ°ΡΡΠ΅ ΡΠ΅ ΠΏΠΎΠ½ΠΎΠ²ΠΎ Π·Π°ΡΠ²Π°ΡΠ°ΡΡ. Π¦ΠΈΡ ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ²Π΅ ΠΎΡΠ²ΠΎΡΠΈ.
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΡΠ΅ΠΊΡΠ°
ΠΠ° Π±ΠΈΡΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ ΠΎΠ²Π΅ ΠΈΠ³ΡΠ΅, ΠΏΠΎΡΡΠ΅Π±Π½Π΅ ΡΡ Π²Π°ΠΌ ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅:
- ΠΠ΅Π΄Π°Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ: ΠΠ°ΠΌΠ΅Π¦ΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ.ΡΠ²ΠΈΡΡ.
- ΠΠ΅Π΄Π°Π½ ΠΏΠΎΠ³Π»Π΅Π΄: Π¦Π°ΡΠ΄Π¦Π΅Π»Π».ΡΠ²ΠΈΡΡ.
- ΠΠ²Π° ΠΌΠΎΠ΄Π΅Π»Π°: ΠΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅.ΡΠ²ΠΈΡΡ ΠΈ Π¦Π°ΡΠ΄.ΡΠ²ΠΈΡΡ.
- ΠΠ°ΠΈΠ½.ΡΡΠΎΡΠΈΠ±ΠΎΠ°ΡΠ΄ ΠΊΠ°ΠΊΠΎ Π±ΠΈ ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠ°Π»ΠΎ Π΄Π° ΡΠ΅ ΡΠ΅ΠΎ ΡΠΊΡΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π΄ΠΎΡΡΡΠΏΠ°Π½.
ΠΠΎΡΠΈΡΠ΅ΠΌΠΎ ΡΠ° Π½Π°ΡΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΠΈΠ³ΡΠ΅, ΠΊΠ°ΡΡΠ°ΠΌΠ°.
Π¦Π°ΡΠ΄.ΡΠ²ΠΈΡΡ
ΠΠΎΠ΄Π΅Π» ΠΊΠ°ΡΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠΌΠ°ΡΠΈ ΡΡΠΈ ΡΠ²ΠΎΡΡΡΠ²Π°: ΠΈΠ΄ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ ΡΠ²Π°ΠΊΠ΅ ΠΎΠ΄ ΡΠΈΡ , ΠΏΡΠΈΠΊΠ°Π·Π°Π½Ρ Π»ΠΎΠ³ΠΈΡΠΊΡ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Ρ ΠΊΠΎΡΠ° ΠΎΠ΄ΡΠ΅ΡΡΡΠ΅ ΡΡΠ°ΡΡΡ ΠΊΠ°ΡΡΠΈΡΠ΅ (ΡΠΊΡΠΈΠ²Π΅Π½Π° ΠΈΠ»ΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½Π°) ΠΈ Π£Π Π Π·Π° ΡΠ»ΠΈΠΊΠ΅ Π½Π° ΠΊΠ°ΡΡΠΈΡΠ°ΠΌΠ°.
class Card {
var id: String
var shown: Bool = false
var artworkURL: UIImage!
}
Π’Π°ΠΊΠΎΡΠ΅ ΡΠ΅ Π²Π°ΠΌ ΡΡΠ΅Π±Π°ΡΠΈ ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° ΡΠ° ΠΌΠ°ΠΏΠ°ΠΌΠ°:
ΠΠ΅ΡΠΎΠ΄Π° Π·Π° ΠΏΡΠΈΠΊΠ°Π·ΠΈΠ²Π°ΡΠ΅ ΡΠ»ΠΈΠΊΠ΅ Π½Π° ΠΊΠ°ΡΡΠΈΡΠΈ. ΠΠ²Π΄Π΅ ΡΠΌΠΎ ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π»ΠΈ ΡΠ²Π° ΡΠ²ΠΎΡΡΡΠ²Π° Π½Π° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Π°. ΠΠ° ΠΈΠ΄, Π³Π΅Π½Π΅ΡΠΈΡΠ΅ΠΌΠΎ Π½Π°ΡΡΠΌΠΈΡΠ½ΠΈ ΠΠ ΠΏΠΎΠ·ΠΈΠ²Π°ΡΠ΅ΠΌ ΠΠ‘Π£Π£ΠΠ‘().ΡΡΠΈΠ΄Π‘ΡΡΠΈΠ½Π³.
init(image: UIImage) {
self.id = NSUUID().uuidString
self.shown = false
self.artworkURL = image
}
ΠΠ΅ΡΠΎΠ΄ Π·Π° ΠΏΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π»ΠΈΡΠ½ΠΈΡ ΠΊΠ°ΡΠ°ΡΠ°.
func equals(_ card: Card) -> Bool {
return (card.id == id)
}
ΠΠ΅ΡΠΎΠ΄ Π·Π° ΠΏΡΠ°Π²ΡΠ΅ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ΅ ΡΠ²Π°ΠΊΠ΅ ΠΊΠ°ΡΡΠΈΡΠ΅ β Π΄Π° Π±ΠΈ ΡΠ΅ Π΄ΠΎΠ±ΠΈΠΎ Π²Π΅ΡΠΈ Π±ΡΠΎΡ ΠΈΡΡΠΎΠ²Π΅ΡΠ½ΠΈΡ . ΠΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ Π²ΡΠ°ΡΠΈΡΠΈ ΠΊΠ°ΡΡΠΈΡΡ ΡΠ° ΡΠ»ΠΈΡΠ½ΠΈΠΌ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΠΌΠ°.
func copy() -> Card {
return Card(card: self)
}
init(card: Card) {
self.id = card.id
self.shown = card.shown
self.artworkURL = card.artworkURL
}
Π ΡΠΎΡ ΡΠ΅Π΄Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π°Π½ Π·Π° ΠΌΠ΅ΡΠ°ΡΠ΅ ΠΊΠ°ΡΠ°ΡΠ° Π½Π° ΠΏΠΎΡΠ΅ΡΠΊΡ. ΠΠ°ΠΏΡΠ°Π²ΠΈΡΠ΅ΠΌΠΎ Π³Π° ΠΏΡΠΎΡΠΈΡΠ΅ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΠ΅ ΠΡΡΠ°ΠΈ.
extension Array {
mutating func shuffle() {
for _ in 0...self.count {
sort { (_,_) in arc4random() < arc4random() }
}
}
}
Π Π΅Π²ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΠ΄Π° Π·Π° ΠΌΠΎΠ΄Π΅Π» ΠΊΠ°ΡΡΠΈΡΠ΅ ΡΠ° ΡΠ²ΠΈΠΌ ΡΠ²ΠΎΡΡΡΠ²ΠΈΠΌΠ° ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠ°.
class Card {
var id: String
var shown: Bool = false
var artworkURL: UIImage!
static var allCards = [Card]()
init(card: Card) {
self.id = card.id
self.shown = card.shown
self.artworkURL = card.artworkURL
}
init(image: UIImage) {
self.id = NSUUID().uuidString
self.shown = false
self.artworkURL = image
}
func equals(_ card: Card) -> Bool {
return (card.id == id)
}
func copy() -> Card {
return Card(card: self)
}
}
extension Array {
mutating func shuffle() {
for _ in 0...self.count {
sort { (_,_) in arc4random() < arc4random() }
}
}
}
Π₯Π°ΡΠ΄Π΅.
ΠΡΡΠ³ΠΈ ΠΌΠΎΠ΄Π΅Π» ΡΠ΅ ΠΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅, ΠΎΠ²Π΄Π΅ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΠΌΠΎ ΠΌΡΠ΅ΠΆΡ 4*4. ΠΠΎΠ΄Π΅Π» ΡΠ΅ ΠΈΠΌΠ°ΡΠΈ ΡΠ²ΠΎΡΡΡΠ²Π° ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ ΠΊΠ°ΡΡΠΈΡΠ΅ (Π½ΠΈΠ· ΠΊΠ°ΡΠ°ΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΈ), Π½ΠΈΠ· ΡΠ°ΡΠ΄ΡΠ‘Ρ ΠΎΠ²Π½ ΡΠ° Π²Π΅Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈΠΌ ΠΊΠ°ΡΡΠΈΡΠ°ΠΌΠ° ΠΈ Π»ΠΎΠ³ΠΈΡΠΊΠ° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π° ΠΈΡΠΠ»Π°ΠΈΠΈΠ½Π³ Π·Π° ΠΏΡΠ°ΡΠ΅ΡΠ΅ ΡΡΠ°ΡΡΡΠ° ΠΈΠ³ΡΠ΅.
class MemoryGame {
var cards:[Card] = [Card]()
var cardsShown:[Card] = [Card]()
var isPlaying: Bool = false
}
Π’Π°ΠΊΠΎΡΠ΅ ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° ΡΠ°Π·Π²ΠΈΡΠ΅ΠΌΠΎ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° ΡΠ° ΠΌΡΠ΅ΠΆΠΎΠΌ.
ΠΠ΅ΡΠΎΠ΄Π° ΠΊΠΎΡΠ° ΠΌΠ΅ΡΠ° ΠΊΠ°ΡΡΠ΅ Ρ ΠΌΡΠ΅ΠΆΠΈ.
func shuffleCards(cards:[Card]) -> [Card] {
var randomCards = cards
randomCards.shuffle()
return randomCards
}
ΠΠ΅ΡΠΎΠ΄Π° Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½ΠΎΠ²Π΅ ΠΈΠ³ΡΠ΅. ΠΠ²Π΄Π΅ ΠΏΠΎΠ·ΠΈΠ²Π°ΠΌΠΎ ΠΏΡΠ²ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π° ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ ΠΏΠΎΡΠ΅ΡΠ½ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ ΠΈ ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·ΡΡΠ΅ΠΌΠΎ ΠΈΡΠΠ»Π°ΠΈΠΈΠ½Π³ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Ρ Π½Π° ΡΡΡΠ΅.
func newGame(cardsArray:[Card]) -> [Card] {
cards = shuffleCards(cards: cardsArray)
isPlaying = true
return cards
}
ΠΠΊΠΎ ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ ΠΈΠ³ΡΡ, Π·Π°ΡΠΈΠΌ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΠΌΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Ρ ΠΈΡΠΠ»Π°ΠΈΠΈΠ½Π³ Π½Π° ΡΠ°Π»ΡΠ΅ ΠΈ ΡΠΊΠ»Π°ΡΠ°ΠΌΠΎ ΠΏΠΎΡΠ΅ΡΠ½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ ΠΊΠ°ΡΡΠΈΡΠ°.
func restartGame() {
isPlaying = false
cards.removeAll()
cardsShown.removeAll()
}
ΠΠ΅ΡΠΎΠ΄Π° Π·Π° Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ ΠΊΠ»ΠΈΠΊΠ½ΡΡΠΈΡ ΠΊΠ°ΡΡΠΈΡΠ°. ΠΠΈΡΠ΅ ΠΎ ΡΠ΅ΠΌΡ ΠΊΠ°ΡΠ½ΠΈΡΠ΅.
func cardAtIndex(_ index: Int) -> Card? {
if cards.count > index {
return cards[index]
} else {
return nil
}
}
ΠΠ΅ΡΠΎΠ΄Π° ΠΊΠΎΡΠ° Π²ΡΠ°ΡΠ° ΠΏΠΎΠ·ΠΈΡΠΈΡΡ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Π΅ ΠΊΠ°ΡΡΠΈΡΠ΅.
func indexForCard(_ card: Card) -> Int? {
for index in 0...cards.count-1 {
if card === cards[index] {
return index
}
}
return nil
}
ΠΡΠΎΠ²Π΅ΡΠ° ΡΡΠ°Π³Π»Π°ΡΠ΅Π½ΠΎΡΡΠΈ ΠΈΠ·Π°Π±ΡΠ°Π½Π΅ ΠΊΠ°ΡΡΠΈΡΠ΅ ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄ΠΎΠΌ.
func unmatchedCardShown() -> Bool {
return cardsShown.count % 2 != 0
}
ΠΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ Ρ Π½ΠΈΠ·Ρ **ΡΠ°ΡΠ΄ΡΠ‘Ρ ΠΎΠ²Π½** ΠΈ Π²ΡΠ°ΡΠ° ΠΊΠ°ΡΡΠΈΡΡ ΠΊΠΎΡΠ° ΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΡΠ΄Π°ΡΠ°.
func didSelectCard(_ card: Card?) {
guard let card = card else { return }
if unmatchedCardShown() {
let unmatched = unmatchedCard()!
if card.equals(unmatched) {
cardsShown.append(card)
} else {
let secondCard = cardsShown.removeLast()
}
} else {
cardsShown.append(card)
}
if cardsShown.count == cards.count {
endGame()
}
}
ΠΠ°ΠΈΠ½.ΡΡΠΎΡΠΈΠ±ΠΎΠ°ΡΠ΄ ΠΈ ΠΠ°ΠΌΠ΅Π¦ΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ.ΡΠ²ΠΈΡΡ
ΠΠ°ΠΈΠ½.ΡΡΠΎΡΠΈΠ±ΠΎΠ°ΡΠ΄ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΡΠΏΡΠΈΠ»ΠΈΠΊΠ΅ ΠΎΠ²Π°ΠΊΠΎ:
Π£ ΠΏΠΎΡΠ΅ΡΠΊΡ, ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΠ΄Π΅ΡΠΈΡΠ΅ Π½ΠΎΠ²Ρ ΠΈΠ³ΡΡ ΠΊΠ°ΠΎ Π²ΠΈΠ΅Π²ΠΠΈΠ΄ΠΠΎΠ°Π΄ Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΡ, ΡΠΊΡΡΡΡΡΡΡΠΈ ΡΠ»ΠΈΠΊΠ΅ Π·Π° ΠΌΡΠ΅ΠΆΡ. Π£ ΠΈΠ³ΡΠΈ, ΡΠ²Π΅ ΠΎΠ²ΠΎ ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½ΠΎ 4*4 ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½ΠΠΈΠ΅Π². ΠΠΊΠΎ ΡΠΎΡ Π½ΠΈΡΡΠ΅ ΡΠΏΠΎΠ·Π½Π°ΡΠΈ ΡΠ° ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½ΠΠΈΠ΅Π²-ΠΎΠΌ, Π΅Π²ΠΎ Π³Π°
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ΠΌΠΎ ΠΠ°ΠΌΠ΅Π¦ΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΊΠ°ΠΎ ΡΠΎΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠ°ΠΌΠ΅Π¦ΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΡΠ΅ ΠΈΠΌΠ°ΡΠΈ ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½ΠΠΈΠ΅Π² ΠΊΠΎΡΠΈ ΡΠ΅ΠΌΠΎ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠΈ ΠΊΠ°ΠΎ ΠΠΠΡΡΠ»Π΅Ρ. ΠΡΡΠ³Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ° ΡΠ΅ Π½Π° Π΄ΡΠ³ΠΌΠ΅ ΠΠΠΡΡΠΈΠΎΠ½ ΠΎΠ½Π‘ΡΠ°ΡΡΠΠ°ΠΌΠ΅(), ΠΎΠ²ΠΎ ΡΠ΅ Π£ΠΠΡΡΡΠΎΠ½, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π³Π° Π²ΠΈΠ΄Π΅ΡΠΈ Ρ ΡΡΠΎΡΠΈΠ±ΠΎΡΠ΄Ρ ΠΏΠΎΠ΄ Π½Π°Π·ΠΈΠ²ΠΎΠΌ ΠΠΠΠ.
ΠΠ°Π»ΠΎ ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ°:
- ΠΡΠ²ΠΎ, ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·ΡΡΠ΅ΠΌΠΎ Π΄Π²Π° Π³Π»Π°Π²Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° - ΠΌΡΠ΅ΠΆΡ: ΠΈΠ³ΡΠ° = ΠΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅() ΠΈ ΡΠΊΡΠΏ ΠΊΠ°ΡΡΠΈΡΠ°: ΠΊΠ°ΡΡΠΈΡΠ΅ = [ΠΠ°ΡΡΠΈΡΠ°]().
- ΠΠΎΡΠ΅ΡΠ½Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΠΌΠΎ ΠΊΠ°ΠΎ Π²ΠΈΠ΅Π²ΠΠΈΠ΄ΠΠΎΠ°Π΄, ΠΎΠ²ΠΎ ΡΠ΅ ΠΏΡΠ²ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΠΎΠ·ΠΈΠ²Π° Π΄ΠΎΠΊ ΠΈΠ³ΡΠ° ΡΠ°Π΄ΠΈ.
- ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½ΠΠΈΠ΅Π² ΡΠ΅ ΠΏΠΎΠ΄Π΅ΡΠ΅Π½ Π½Π° ΡΠΊΡΠΈΠ²Π΅Π½ ΡΠ΅Ρ ΡΡ ΡΠ²Π΅ ΠΊΠ°ΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠ²Π΅Π½Π΅ Π΄ΠΎΠΊ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ Π½Π΅ ΠΏΡΠΈΡΠΈΡΠ½Π΅ ΠΠΠΠ.
- Π§ΠΈΠΌ ΠΏΡΠΈΡΠΈΡΠ½Π΅ΠΌΠΎ ΠΠΠΠ, ΠΏΠΎΡΠΈΡΠ΅ ΠΎΠ½Π‘ΡΠ°ΡΡΠΠ°ΠΌΠ΅ ΠΠΠΡΡΠΈΠΎΠ½ ΠΎΠ΄Π΅ΡΠ°ΠΊ, Π° ΡΠ²ΠΎΡΡΡΠ²ΠΎ ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½ΠΠΈΠ΅Π² ΠΈΡΠ₯ΠΈΠ΄Π΄Π΅Π½ ΠΏΠΎΡΡΠ°Π²ΡΠ°ΠΌΠΎ Π½Π° ΡΠ°Π»ΡΠ΅ ΡΠ°ΠΊΠΎ Π΄Π° ΠΊΠ°ΡΡΠΈΡΠ΅ ΠΌΠΎΠ³Ρ Π΄Π° ΠΏΠΎΡΡΠ°Π½Ρ Π²ΠΈΠ΄ΡΠΈΠ²Π΅.
- Π‘Π²Π°ΠΊΠΈ ΠΏΡΡ ΠΊΠ°Π΄Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ ΠΈΠ·Π°Π±Π΅ΡΠ΅ ΠΊΠ°ΡΡΠΈΡΡ, ΠΏΠΎΠ·ΠΈΠ²Π° ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΈΠ΄Π‘Π΅Π»Π΅ΡΡΠΡΠ΅ΠΌΠΡ. Π£ ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΊΠΎΡΡ Π·ΠΎΠ²Π΅ΠΌΠΎ Π΄ΠΈΠ΄Π‘Π΅Π»Π΅ΡΡΠ¦Π°ΡΠ΄ Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΠΌΠΎ Π³Π»Π°Π²Π½Ρ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ³ΡΠ΅.
ΠΠ²ΠΎ ΠΊΠΎΠ½Π°ΡΠ½Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΠΠ°ΠΌΠ΅Π¦ΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ-Π°:
class GameController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
let game = MemoryGame()
var cards = [Card]()
override func viewDidLoad() {
super.viewDidLoad()
game.delegate = self
collectionView.dataSource = self
collectionView.delegate = self
collectionView.isHidden = true
APIClient.shared.getCardImages { (cardsArray, error) in
if let _ = error {
// show alert
}
self.cards = cardsArray!
self.setupNewGame()
}
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if game.isPlaying {
resetGame()
}
}
func setupNewGame() {
cards = game.newGame(cardsArray: self.cards)
collectionView.reloadData()
}
func resetGame() {
game.restartGame()
setupNewGame()
}
@IBAction func onStartGame(_ sender: Any) {
collectionView.isHidden = false
}
}
// MARK: - CollectionView Delegate Methods
extension GameController: UICollectionViewDelegate, UICollectionViewDataSource {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return cards.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CardCell", for: indexPath) as! CardCell
cell.showCard(false, animted: false)
guard let card = game.cardAtIndex(indexPath.item) else { return cell }
cell.card = card
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as! CardCell
if cell.shown { return }
game.didSelectCard(cell.card)
collectionView.deselectItem(at: indexPath, animated:true)
}
}
Π₯Π°ΡΠ΄Π΅ ΡΠ°Π΄Π° Π΄Π° ΠΏΡΠΈΡΠ°ΠΌΠΎ ΠΌΠ°Π»ΠΎ ΠΎ Π²Π°ΠΆΠ½ΠΈΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΠΌΠ°.
ΠΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ
Π Π°Π΄ ΡΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΠΌΠ° ΡΠ΅ ΡΡΠΆ Π‘Π²ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ°. ΠΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ ΠΏΡΡΠΆΠ°ΡΡ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΠΊΠ»Π°ΡΡ, ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ»ΠΈ Π½Π°Π±ΡΠ°ΡΠ°ΡΠ΅. ΠΠ²Π°Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Π°ΡΠ½ΠΈ ΠΈ ΠΏΡΠΎΡΠΈΡΠΈΠ²ΠΈ ΠΊΠΎΠ΄. Π£ ΡΡΠ²Π°ΡΠΈ, ΠΎΠ²ΠΎ ΡΠ΅ ΠΎΠ±ΡΠ°Π·Π°Ρ ΠΊΠΎΡΠΈ Π²Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΡΡΠ΅ΠΌΠΎ Π·Π° ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½ΠΠΈΠ΅Π² Ρ ΠΠ°ΠΌΠ΅Π¦ΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ-Ρ. Π₯Π°ΡΠ΄Π΅ ΡΠ°Π΄Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ ΡΠΎΠΏΡΡΠ²Π΅Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠ° ΡΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΠΈ ΠΎΠ²Π°ΠΊΠΎ:
protocol MemoryGameProtocol {
//protocol definition goes here
}
ΠΠ½Π°ΠΌΠΎ Π΄Π° Π½Π°ΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ΅ΠΌΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ ΡΠΏΡΡΡΡΠ²Π° Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΠΊΠ»Π°ΡΠ΅, ΠΏΠ° Ρ Π°ΡΠ΄Π΅ Π΄Π° ΡΠ°Π·ΠΌΠΈΡΠ»ΠΈΠΌΠΎ ΡΡΠ° Π±ΠΈ ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° Π±ΡΠ΄Ρ. Π£ΠΊΡΠΏΠ½ΠΎ Π²Π°ΠΌ ΡΡΠ΅Π±Π° ΡΠ΅ΡΠΈΡΠΈ.
- ΠΠΎΡΠ΅ΡΠ°ΠΊ ΠΈΠ³ΡΠ΅: ΠΌΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅ΠΠΈΠ΄Π‘ΡΠ°ΡΡ.
- ΠΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ ΠΊΠ°ΡΡΠΈΡΡ Π»ΠΈΡΠ΅ΠΌ Π½Π°Π΄ΠΎΠ»Π΅: ΠΌΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅Π‘Ρ ΠΎΠ²Π¦Π°ΡΠ΄Ρ.
- ΠΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ ΠΊΠ°ΡΡΠΈΡΡ Π»ΠΈΡΠ΅ΠΌ Π½Π°Π΄ΠΎΠ»Π΅: ΠΌΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅Π₯ΠΈΠ΄Π΅Π¦Π°ΡΠ΄Ρ.
- ΠΡΠ°Ρ ΠΈΠ³ΡΠ΅: ΠΌΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅ΠΠΈΠ΄ΠΠ½Π΄.
Π‘Π²Π΅ ΡΠ΅ΡΠΈΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠΈ Π·Π° Π³Π»Π°Π²Π½Ρ ΠΊΠ»Π°ΡΡ, Π° ΡΠΎ ΡΠ΅ ΠΠ°ΠΌΠ΅Π¦ΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ.
ΠΌΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅ΠΠΈΠ΄Π‘ΡΠ°ΡΡ
ΠΠ°Π΄Π° ΡΠ΅ ΠΎΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΊΡΠ΅Π½Π΅, ΠΈΠ³ΡΠ° ΡΡΠ΅Π±Π° Π΄Π° ΠΏΠΎΡΠ½Π΅ (ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ ΠΏΡΠΈΡΠΈΡΠ½Π΅ ΠΠΠΠ). ΠΠ²Π΄Π΅ ΡΠ΅ΠΌΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΡΡΠΈΡΠ°ΡΠΈ ΡΠ°Π΄ΡΠΆΠ°Ρ ΠΏΠΎΠ·ΠΈΠ²Π°ΡΠ΅ΠΌ ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½ΠΠΈΠ΅Π².ΡΠ΅Π»ΠΎΠ°Π΄ΠΠ°ΡΠ°(), ΠΊΠΎΡΠΈ ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ°ΡΠΈ ΠΊΠ°ΡΡΠ΅.
func memoryGameDidStart(_ game: MemoryGame) {
collectionView.reloadData()
}
ΠΌΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅Π‘Ρ ΠΎΠ²Π¦Π°ΡΠ΄Ρ
ΠΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ·ΠΈΠ²Π°ΠΌΠΎ ΠΈΠ· ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡΠ΅Π‘ΠΠΠΈΠ΅Π²Π‘Π΅Π»Π΅ΡΡΠΡΠ΅ΠΌΠΡ. ΠΡΠ²ΠΎ ΠΏΡΠΈΠΊΠ°Π·ΡΡΠ΅ ΠΈΠ·Π°Π±ΡΠ°Π½Ρ ΠΊΠ°ΡΡΠΈΡΡ. ΠΠ°ΡΠΈΠΌ ΠΏΡΠΎΠ²Π΅ΡΠ°Π²Π° Π΄Π° Π»ΠΈ ΠΏΠΎΡΡΠΎΡΠΈ Π½Π΅ΡΠΏΠ°ΡΠ΅Π½Π° ΠΊΠ°ΡΡΠΈΡΠ° Ρ Π½ΠΈΠ·Ρ ΡΠ°ΡΠ΄ΡΠ‘Ρ ΠΎΠ²Π½ (Π°ΠΊΠΎ ΡΠ΅ Π±ΡΠΎΡ ΡΠ°ΡΠ΄ΡΠ‘Ρ ΠΎΠ²Π½ Π½Π΅ΠΏΠ°ΡΠ°Π½). ΠΠΊΠΎ ΠΏΠΎΡΡΠΎΡΠΈ, ΠΈΠ·Π°Π±ΡΠ°Π½Π° ΠΊΠ°ΡΡΠΈΡΠ° ΡΠ΅ ΠΏΠΎΡΠ΅Π΄ΠΈ ΡΠ° ΡΠΎΠΌ. ΠΠΊΠΎ ΡΡ ΡΠ»ΠΈΠΊΠ΅ ΠΈΡΡΠ΅, ΠΎΠ±Π΅ ΠΊΠ°ΡΡΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΠ΄Π°ΡΡ Π½Π° ΠΊΠ°ΡΡΠΈΡΠ΅ ΠΏΡΠΈΠΊΠ°Π·Π°Π½Π΅ ΠΈ ΠΎΡΡΠ°ΡΡ ΠΎΠΊΡΠ΅Π½ΡΡΠ΅ Π½Π°Π³ΠΎΡΠ΅. ΠΠΊΠΎ ΡΠ΅ Π΄ΡΡΠ³Π°ΡΠΈΡΠ΅, ΠΊΠ°ΡΡΠΈΡΠ° ΠΎΡΡΠ°Π²ΡΠ° ΠΏΡΠΈΠΊΠ°Π·Π°Π½Π΅ ΠΊΠ°ΡΡΠΈΡΠ΅ ΠΈ ΠΎΠ±Π΅ ΡΡ ΠΎΠΊΡΠ΅Π½ΡΡΠ΅ Π»ΠΈΡΠ΅ΠΌ Π½Π°Π΄ΠΎΠ»Π΅.
ΠΌΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅Π₯ΠΈΠ΄Π΅Π¦Π°ΡΠ΄Ρ
ΠΠΊΠΎ ΡΠ΅ ΠΊΠ°ΡΡΠΈΡΠ΅ Π½Π΅ ΠΏΠΎΠΊΠ»Π°ΠΏΠ°ΡΡ, ΠΏΠΎΠ·ΠΈΠ²Π° ΡΠ΅ ΠΎΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΈ ΡΠ»ΠΈΠΊΠ΅ ΠΊΠ°ΡΡΠΈΡΠ° ΡΡ ΡΠΊΡΠΈΠ²Π΅Π½Π΅.
ΠΏΡΠΈΠΊΠ°Π·Π°Π½ΠΎ = Π½Π΅ΡΠ°ΡΠ½ΠΎ.
ΠΌΠ΅ΠΌΠΎΡΠΈΠΠ°ΠΌΠ΅ΠΠΈΠ΄ΠΠ½Π΄
ΠΠ°Π΄Π° ΡΠ΅ ΠΏΠΎΠ·ΠΎΠ²Π΅ ΠΎΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄, ΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π° ΡΡ ΡΠ²Π΅ ΠΊΠ°ΡΡΠ΅ Π²Π΅Ρ ΠΎΡΠΊΡΠΈΠ²Π΅Π½Π΅ ΠΈ Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π·Π΅ Π½Π° Π»ΠΈΡΡΠΈ ΡΠ°ΡΠ΄ΡΠ‘Ρ ΠΎΠ²Π½: ΡΠ°ΡΠ΄ΡΠ‘Ρ ΠΎΠ²Π½.ΡΠΎΡΠ½Ρ = ΡΠ°ΡΠ΄Ρ.ΡΠΎΡΠ½Ρ, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΈΠ³ΡΠ° Π·Π°Π²ΡΡΠ΅Π½Π°. ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ ΠΏΠΎΡΠ΅Π±Π½ΠΎ ΠΏΠΎΠ·ΠΈΠ²Π° Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠΌΠΎ ΠΏΠΎΠ·Π²Π°Π»ΠΈ Π΅Π½Π΄ΠΠ°ΠΌΠ΅() Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ ΠΈΡΠΠ»Π°ΠΈΠΈΠ½Π³ Π²Π°Ρ Π½Π° ΡΠ°Π»ΡΠ΅, Π½Π°ΠΊΠΎΠ½ ΡΠ΅Π³Π° ΡΠ΅ ΠΏΡΠΈΠΊΠ°Π·ΡΡΠ΅ ΠΏΠΎΡΡΠΊΠ° ΠΎ Π·Π°Π²ΡΡΠ΅ΡΠΊΡ ΠΈΠ³ΡΠ΅. Π’Π°ΠΊΠΎΡΠ΅ Π°Π»Π΅ΡΡΠ¦ΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠ°ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ. Π²ΠΈΠ΅Π²ΠΠΈΠ΄ΠΠΈΡΠ°ΠΏΠΏΠ΅Π°Ρ ΡΠ΅ ΠΏΠΎΠ·ΠΈΠ²Π° ΠΈ ΠΈΠ³ΡΠ° ΡΠ΅ ΡΠ΅ΡΠ΅ΡΡΡΠ΅.
ΠΠ²ΠΎ ΠΊΠ°ΠΊΠΎ ΡΠ²Π΅ ΡΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° Ρ ΠΠ°ΠΌΠ΅Π¦ΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ-Ρ:
extension GameController: MemoryGameProtocol {
func memoryGameDidStart(_ game: MemoryGame) {
collectionView.reloadData()
}
func memoryGame(_ game: MemoryGame, showCards cards: [Card]) {
for card in cards {
guard let index = game.indexForCard(card)
else { continue
}
let cell = collectionView.cellForItem(
at: IndexPath(item: index, section:0)
) as! CardCell
cell.showCard(true, animted: true)
}
}
func memoryGame(_ game: MemoryGame, hideCards cards: [Card]) {
for card in cards {
guard let index = game.indexForCard(card)
else { continue
}
let cell = collectionView.cellForItem(
at: IndexPath(item: index, section:0)
) as! CardCell
cell.showCard(false, animted: true)
}
}
func memoryGameDidEnd(_ game: MemoryGame) {
let alertController = UIAlertController(
title: defaultAlertTitle,
message: defaultAlertMessage,
preferredStyle: .alert
)
let cancelAction = UIAlertAction(
title: "Nah", style: .cancel) {
[weak self] (action) in
self?.collectionView.isHidden = true
}
let playAgainAction = UIAlertAction(
title: "Dale!", style: .default) {
[weak self] (action) in
self?.collectionView.isHidden = true
self?.resetGame()
}
alertController.addAction(cancelAction)
alertController.addAction(playAgainAction)
self.present(alertController, animated: true) { }
resetGame()
}
}
Π£ ΡΡΠ²Π°ΡΠΈ, ΡΠΎ ΡΠ΅ ΡΠ²Π΅. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΎΠ²Π°Ρ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠΎΠΏΡΡΠ²Π΅Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ ΠΈΠ³ΡΠ΅.
Π‘ΡΠ΅ΡΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅!
Π‘ΠΊΠΈΠ»Π»Π±ΠΎΠΊ ΠΏΡΠ΅ΠΏΠΎΡΡΡΡΡΠ΅:
- ΠΡΠ°ΠΊΡΠΈΡΠ½ΠΈ ΠΊΡΡΡ
βΠΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ Π·Π° ΠΌΠΎΠ±ΠΈΠ»Π½Π΅ ΡΡΠ΅ΡΠ°ΡΠ΅β .- ΠΡΠΈΠΌΠ΅ΡΠ΅Π½ΠΈ ΠΎΠ½Π»Π°ΡΠ½ ΠΊΡΡΡ
βΠΠΈΡΡ ΠΎΠ½ Π°Π½Π°Π»ΠΈΡΠΈΡΠ°Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°β .- ΠΠ²ΠΎΠ³ΠΎΠ΄ΠΈΡΡΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΈ ΠΊΡΡΡ
βΠΠ° ΡΠ°ΠΌ ΠΠ Π Π²Π΅Π± ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρβ .
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ