Hoc articulum describit processus faciendi simplex memoria disciplinae ludum quod ego vere amo. Praeterquam quod in se bonum sit, paulo plura de Celeribus generibus et protocollis abeuntes disces. Sed priusquam incipiamus, ipsum ludum intelligamus.
admonemus;omnibus legentibus "Habr" - discount 10 rublorum cum scribendo in quavis Skillbox utens "Habr" codice promotivo.
Ludus incipit cum demonstratione actuum chartarum. In faciem iacent (respective, imaginem deorsum). Cum aliquem premes, imago brevi tempore aperit.
Ludii munus est omnes chartas iisdem imaginibus invenire. Si, post primum schedulam aperiendam, in secundum et tabulas inserere, ambae chartae apertae manent. Si non concordant, chartae iterum clauduntur. Propositum est omnia aperire.
Project structure
Ad simplicem huius ludi versionem creare debes sequentium partium:
One Controller: GameController.swift.
One View: CardCell.swift.
Duo exempla: MemoriaGame.swift et Card.swift.
Main.storyboard ut tota copia partium praesto sit.
Committitur simplicissima pars ludi, chartae.
Card.swift
Exemplar chartae tres proprietates habebit: id ad unumquemque cognoscendum, variabilis booleana ostensa ad statum chartae (absconditum vel apertum), et artworkURL pro imaginibus in chartis.
class Card {
var id: String
var shown: Bool = false
var artworkURL: UIImage!
}
His quoque methodis opus erit ut commercium cum mappis usoris contineas:
Methodus imaginem exhibendi in charta. Hic omnes proprietates ad defaltam exponimus. Id enim temere id generamus vocando NSUUIS().uuidString.
Secundum exemplar est MemoriaGame, hic 4*4 eget. Exemplar proprietates habebunt ut chartae (inclusio chartarum in craticulae), chartarum instructarum cum chartis iam apertis, et boolean variabilis indagat ut statum ludi indagat.
class MemoryGame {
var cards:[Card] = [Card]()
var cardsShown:[Card] = [Card]()
var isPlaying: Bool = false
}
Etiam methodos evolvere debemus ut user commercium cum malesuada euismod moderari.
Haec methodus ultimum elementum in cardsShown ordinata legit et cardo non-aequante redit.
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 et GameController.swift
Main.storyboard aliquid simile hoc spectat:
Initio, debes novum ludum constituere sicut in moderatoris viewDidLoad, etiam imagines pro malesuada euismod. In ludo, haec omnia repraesentabuntur per 4*4 collectionView. Si nondum nota cum collectionView, hic est vos can adepto vos postulo indicium.
GameController applicationem radicis moderatoris configurabimus. GameController collectionem habebit quam ut IBOutlet referemus. Alia relatio ad conjunctionem IBAction onStartGame, hoc est UIButton, videre potes in fabula fabula quae vocatur.
Paulo de exsecutione moderatoris:
Primum initializemus duas res principales - eget: ludus = MemoriaGame(), et tabulae chartarum: chartarum = [Card]().
Initiales variabiles pro viewDidLoad constituimus, primus modus est qui vocatur dum ludus currit.
collectionView in occulto positum est quia omnes chartae occultae sunt donec usor urget PLAY.
Cum primum LUDO premamus, sectionem inStartGame IBAction incipit, et collectionem View occultam rem falsam constituimus ut chartae visibiles fieri possint.
Quoties usor deligit schedulam, modus didSelectItemAt appellatur. In methodo didSelectCard appellamus ad efficiendum logicam principalem ludum.
Protocolla laborat nucleus Celeri programmatio. Protocolla praebent facultatem regulas definiendi genus, structuram, vel enumerationem. Hoc principium tibi permittit ut codicem modularem et extensum scribere. Re vera, hoc exemplum est quod iam in collectione View in GameController exsequuntur. Nunc versionem nostram faciamus. Syntaxis similis haec erit:
protocol MemoryGameProtocol {
//protocol definition goes here
}
Scimus protocollum nos permittere ut regulas vel instructiones definiamus ad genus exsequendum, ut cogitemus quid debeant. Quattuor opus est summa.
Ludus initium: memoryGameDidStart.
Opus est ut card faciem tuam convertas: memoryGameShowCards.
Opus est ut card faciem tuam convertas: memoryGameHideCards.
Ludus finis: memoryGameDidEnd.
Omnes quattuor modi effici possunt pro genere principali, quod est GameController.
memoryGameDidStart
Cum haec methodus currit, ludus debet incipere (utentis LUDO pressit). Simpliciter hic materiam explicabimus appellando collectioneView.reloadData(), quae chartulas miscebit.
Hanc methodum vocamus ex collectionSDViewSelectItemAt. Primo ostendit electum card. Deinde impedit ut videam an cardo singularis sit in schedulis instructis (si numerus cardsShown est impar). Si adsit, chartae selectae cum ea comparantur. Si picturae eaedem sunt, ambae chartae ad chartas Shown accedunt et faciem sursum manent. Si diversum est, chartae folia chartae monstrantur et utraque facies deflexa est.
memoryGameHideCards
Si schedae non concordant, haec methodus appellatur et imagines schedae occultantur.
ostensum est = falsum.
memoryGameDidEnd
Cum haec methodus appellatur, significat omnes chartas iam revelatas esse et in indice chartarum Shown: pectoShown.count = cards.count, praeludio finito. Methodus speciatim appellatur postquam finem Ludus() appellavimus ut isPlaying var ad falsum exponeret, post quem nuntius ludus finis ostenditur. Etiam alertController index pro moderatoris adhibetur. viewDidDisappear dicitur ac ludus reset.
Ecce id quod totum spectat sicut in GameController:
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()
}
}
Profecto id omne. Hoc consilio uti potes ad versionem tuam ludum creare.