هي آرٽيڪل هڪ سادي ميموري ٽريننگ راند ٺاهڻ جي عمل کي بيان ڪري ٿو جيڪا مون کي واقعي پسند آهي. پاڻ ۾ سٺو هجڻ سان گڏ، توهان سوفٹ ڪلاس ۽ پروٽوڪول بابت ٿورو وڌيڪ سکندا جيئن توهان وڃو. پر ان کان اڳ جو اسان شروع ڪريون، اچو ته راند کي سمجھون.
اسان توهان کي ياد ڏياريون ٿا:"Habr" جي سڀني پڙهندڙن لاءِ - 10 روبل جي رعايت جڏهن "Habr" پروموشنل ڪوڊ استعمال ڪندي ڪنهن به اسڪل باڪس ڪورس ۾ داخلا.
راند شروع ٿئي ٿي ڪارڊ جي هڪ سيٽ جي مظاهري سان. اهي منهن هيٺ ڪوڙ ڪن ٿا (ترتيب، تصوير هيٺ). جڏهن توهان ڪنهن هڪ تي ڪلڪ ڪندا آهيو، تصوير چند سيڪنڊن لاءِ کلي ٿي.
پليئر جو ڪم ساڳيو تصويرن سان سڀني ڪارڊن کي ڳولڻ آهي. جيڪڏهن، پهريون ڪارڊ کولڻ کان پوء، توهان ٻئي کي ڦيرايو ۽ تصويرون ملن ٿيون، ٻئي ڪارڊ کليل رهندا. جيڪڏهن اهي ملن نه ٿا، ڪارڊ ٻيهر بند ٿي ويا آهن. مقصد هر شي کي کولڻ آهي.
منصوبي جي جوڙجڪ
هن راند جو هڪ سادي نسخو ٺاهڻ لاء توهان کي هيٺين حصن جي ضرورت آهي:
ھڪڙو ڪنٽرولر: GameController.swift.
ھڪڙي ڏسو: CardCell.swift.
ٻه ماڊل: MemoryGame.swift ۽ Card.swift.
Main.storyboard يقيني بڻائڻ لاءِ ته اجزاء جو پورو سيٽ موجود آهي.
اسان راند جي آسان ترين جزو سان شروع ڪريون ٿا، ڪارڊ.
ڪارڊ، تيز
ڪارڊ جي ماڊل ۾ ٽي خاصيتون هونديون: هر هڪ کي سڃاڻڻ لاءِ id، هڪ بولين متغير ڏيکاريل آهي ڪارڊ جي حالت بيان ڪرڻ لاءِ (لڪيل يا کليل)، ۽ ڪارڊ تي تصويرن لاءِ آرٽ ورڪ URL.
class Card {
var id: String
var shown: Bool = false
var artworkURL: UIImage!
}
توهان کي انهن طريقن جي پڻ ضرورت پوندي صارف جي رابطي کي ڪنٽرول ڪرڻ لاءِ نقشن سان:
ڪارڊ تي تصوير ڏيکارڻ جو طريقو. هتي اسان سڀني ملڪيتن کي ڊفالٽ تي ري سيٽ ڪيو. id لاءِ، اسان NSUUIS().uuidString کي ڪال ڪري هڪ بي ترتيب id ٺاهيندا آهيون.
هي طريقو **cardsShown** صف ۾ آخري عنصر پڙهي ٿو ۽ غير ملندڙ ڪارڊ واپس ڪري ٿو.
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()
}
}
Main.storyboard ۽ GameController.swift
Main.storyboard ڪجهه هن طرح نظر اچي ٿو:
شروعات ۾، توهان کي نئين راند کي سيٽ ڪرڻ جي ضرورت آهي viewDidLoad ڪنٽرولر ۾، بشمول گرڊ لاء تصويرون. راند ۾، هي سڀ 4 * 4 ڪليڪشن ڏيئو جي نمائندگي ڪندو. جيڪڏهن توهان اڃا تائين واقف نه آهيو collectionView سان، هتي اهو آهي توهان کي گهربل معلومات حاصل ڪري سگهو ٿا.
اسان GameController کي ايپليڪيشن جي روٽ ڪنٽرولر طور ترتيب ڏينداسين. GameController وٽ ھڪڙو ڪليڪشن ويو ھوندو جنھن کي اسين IBOutlet طور حوالو ڏينداسين. ٻيو حوالو آهي IBAction onStartGame() بٽڻ، هي هڪ UIButton آهي، توهان ان کي PLAY نالي ڪهاڻي بورڊ ۾ ڏسي سگهو ٿا.
پروٽوڪول سان ڪم ڪرڻ سوفٽ پروگرامنگ جو بنيادي حصو آهي. پروٽوڪول ڪلاس، ڍانچي، يا ڳڻپ لاءِ ضابطا بيان ڪرڻ جي صلاحيت مهيا ڪن ٿا. هي اصول توهان کي ماڊلر ۽ وسعت وارو ڪوڊ لکڻ جي اجازت ڏئي ٿو. حقيقت ۾، هي هڪ نمونو آهي جيڪو اسان اڳ ۾ ئي لاڳو ڪري رهيا آهيون گڏ ڪرڻ لاءِ GameController ۾. هاڻي اچو ته پنهنجو نسخو ٺاهيو. نحو هن طرح نظر ايندو:
protocol MemoryGameProtocol {
//protocol definition goes here
}
اسان ڄاڻون ٿا ته هڪ پروٽوڪول اسان کي قاعدن يا هدايتن جي وضاحت ڪرڻ جي اجازت ڏئي ٿو هڪ طبقي کي لاڳو ڪرڻ لاء، تنهنڪري اچو ته سوچيو ته انهن کي ڇا هجڻ گهرجي. توھان کي مجموعي طور تي چار جي ضرورت آھي.
راند جي شروعات: memoryGameDidStart.
توهان کي ڪارڊ کي منهن ڏيڻ جي ضرورت آهي: memoryGameShowCards.
توهان کي ڪارڊ کي منهن ڏيڻ جي ضرورت آهي: memoryGameHideCards.
جڏهن هي طريقو هلايو ويندو آهي، راند شروع ٿيڻ گهرجي (استعمال ڪندڙ PLAY کي دٻائي ٿو). هتي اسان صرف collectionView.reloadData() کي ڪال ڪندي مواد کي ٻيهر لوڊ ڪنداسين، جيڪو ڪارڊ کي ڦيرائي ڇڏيندو.