Ku qorista ciyaarta kaararka xusuusta gudaha Swift
Maqaalkani wuxuu sharxayaa habka abuurista ciyaarta tababarka xusuusta fudud oo aan runtii jeclahay. Marka laga soo tago in aad lafteedu ku wanaagsan tahay, waxaad baran doontaa wax yar oo ku saabsan fasallada Swift iyo borotokoollada markaad tagto. Laakiin ka hor intaanan bilaabin, aan fahanno ciyaarta lafteeda.
Waxaan xusuusineynaa:dhammaan akhristayaasha "Habr" - qiimo dhimis ah 10 rubles marka la qorayo koorso kasta oo Skillbox ah iyadoo la adeegsanayo koodhka xayeysiinta "Habr".
Ciyaartu waxay ku bilaabataa muujinta kaararka. Waxay u jiifsadaan wejiga (sida ay u kala horreeyaan, sawirka hoos). Markaad mid uun gujiso, sawirku wuxuu furmayaa dhowr ilbiriqsi.
Hawsha ciyaartoygu waa inuu helo dhammaan kaadhadhka sawiro isku mid ah leh. Haddii, ka dib markaad furto kaarka koowaad, aad rogto kan labaad oo sawiradu iswaafaqaan, labada kaadhba way furn yihiin. Haddii ay iswaafaqi waayaan, kaadhadhku mar kale waa la xidhay. Ujeedadu waa in wax walba la furo.
Qaab dhismeedka mashruuca
Si aad u abuurto nooc fudud oo ciyaartan ah waxaad u baahan tahay qaybaha soo socda:
Hal maamule: GameController.swift.
Hal Muuqaal: CardCell.swift.
Laba nooc: MemoryGame.swift iyo Card.swift.
Main.storyboard si loo hubiyo in dhammaan qaybaha qaybaha la heli karo.
Waxaan ku bilownaa qaybta ugu fudud ee ciyaarta, kaararka.
Kaarka.degdega
Qaabka kaadhku waxa uu yeelan doonaa saddex guri: id si loo garto mid walba, doorsoome boolean ah oo la tusay si loo qeexo heerka kaadhka (qarsoon ama furan), iyo artworkURL ee sawirada kaararka.
class Card {
var id: String
var shown: Bool = false
var artworkURL: UIImage!
}
Waxaad sidoo kale u baahan doontaa hababkan si aad u xakamayso isdhexgalka isticmaalaha khariidadaha:
Habka loogu muujinayo sawirka kaadhka. Halkan waxaan dib u dejinay dhammaan guryaha si ay u noqdaan kuwo default ah. Aqoonsi ahaan, waxaanu soo saareynaa id random annagoo wacaya NSUUIS() .uuidString.
Qaabka labaad waa MemoryGame, halkan waxaan dejinay 4*4 grid. Qaabku waxa uu yeelan doonaa sifooyin ay ka mid yihiin kaadhadhka (habka kaadhadhka ee shabaqlaha), kaarka la soo bandhigay ee kaadhadhku hore u furnaayeen, iyo doorsoome boolean ah oo u ciyaaraya si uu ula socdo heerka ciyaarta.
class MemoryGame {
var cards:[Card] = [Card]()
var cardsShown:[Card] = [Card]()
var isPlaying: Bool = false
}
Waxaan sidoo kale u baahanahay inaan horumarino habab lagu xakameynayo isdhexgalka isticmaalaha ee shabakada.
Habka abuurista ciyaar cusub. Halkan waxaan ugu yeernaa habka ugu horreeya ee lagu bilaabo qaabka hore oo aan ku bilowno doorsoomaha isPlaying si run ah.
Isla marka aan riixno PLAY, qaybta onStartGame IBAction ayaa bilaabmaysa, waxaanan u dhignay ururinta View isHidden hantida been si ay kaararku u noqdaan kuwo muuqda.
Mar kasta oo isticmaaluhu doorto kaarka, habka didSelectItemAt ayaa loo yaqaan. Habka aan ugu yeerno didSelectCard si loo hirgeliyo macquulka ciyaarta ugu weyn.
protocol MemoryGameProtocol {
//protocol definition goes here
}
Waxaan ognahay in hab-maamuusku noo ogolaado inaan qeexno xeerarka ama tilmaamaha lagu hirgelinayo fasalka, markaa aan ka fikirno waxay noqon doonaan. Waxaad u baahan tahay afar guud ahaan.
Bilawga ciyaarta: memoryGameDidStart.
Waxaad u baahan tahay inaad kaarka hoos u dhigto: memoryGameShowCards.
Waxaad u baahan tahay inaad kaarka hoos u dhigto: memoryGameHideCards.
Habkan waxaan uga yeernaa ururintaSDViewSelectItemAt. Marka hore waxay muujinaysaa kaadhka la doortay. Ka dib hubi inuu jiro kaadh aan isku mid ahayn oo ku jira shaxda kaararkaShown (haddii tirada kaararkaShown ay tahay mid aan caadi ahayn). Haddii uu mid jiro, kaarka la doortay ayaa la barbar dhigayaa. Haddii sawiradu isku mid yihiin, labada kaadhba waxa lagu daraa kaadhadhkaShown oo ay kor u taagan yihiin. Haddii uu ka duwan yahay, kaarku wuxuu ka baxayaa cardsShown oo labaduba wejigooda ayaa loo rogay.
Marka habkan la yiraahdo, waxay ka dhigan tahay in dhammaan kaararku mar horeba shaaca laga qaaday oo ay ku jiraan liiska kaararka: cardsShown.count = cards.count, markaa ciyaartu waa dhammaatay. Habka waxaa loogu yeeraa si gaar ah ka dib markii aan u yeernay endGame () si loo dejiyo isPlaying var been ah, ka dib markii fariinta dhamaadka ciyaarta la muujiyo. Sidoo kale alertController waxa loo istcimaalaa tilmaame ka mid ah kantaroolaha. ViewDisappear waa la wacay oo ciyaarta dib ayaa loo dajiyay.
Waa kuwan waxa dhammaan u eg 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()
}
}
Dhab ahaantii, taasi waa dhammaan. Waxaad u isticmaali kartaa mashruucan si aad u abuurto noocaada ciyaarta.