Qhov kev ua si pib nrog kev ua qauv qhia ntawm ib daim npav. Lawv pw ntsej muag (feem ntau, duab hauv qab). Thaum koj nyem rau ntawm ib qho twg, cov duab qhib rau ob peb feeb.
Tus neeg ua si txoj haujlwm yog nrhiav txhua daim npav nrog cov duab tib yam. Yog tias, tom qab qhib thawj daim npav, koj tig dua thib ob thiab cov duab sib tw, ob daim npav tseem qhib. Yog tias lawv tsis sib xws, daim npav raug kaw dua. Lub hom phiaj yog qhib txhua yam.
Qhov project qauv
Txhawm rau tsim ib qho yooj yim version ntawm qhov kev ua si no koj xav tau cov khoom hauv qab no:
Ib Tus Tswj: GameController.swift.
Ib Saib: CardCell.swift.
Ob tug qauv: MemoryGame.swift thiab Card.swift.
Main.storyboard los xyuas kom meej tias tag nrho cov txheej txheem muaj.
Peb pib nrog qhov yooj yim feem ntawm qhov kev ua si, daim npav.
Card.swift
Daim npav qauv yuav muaj peb yam khoom: id txhawm rau txheeb xyuas txhua tus, qhov sib txawv ntawm boolean qhia kom qhia meej cov xwm txheej ntawm daim npav (pom zais lossis qhib), thiab artworkURL rau cov duab ntawm daim npav.
class Card {
var id: String
var shown: Bool = false
var artworkURL: UIImage!
}
Koj tseem yuav xav tau cov txheej txheem no los tswj cov neeg siv kev cuam tshuam nrog cov duab qhia:
Txoj kev los tso saib cov duab ntawm ib daim npav. Ntawm no peb rov pib dua tag nrho cov khoom rau lub neej ntawd. Rau id, peb tsim ib tug random id los ntawm hu rau NSUUIS().uuidString.
Txoj kev los tsim ib daim qauv ntawm txhua daim npav - nyob rau hauv thiaj li yuav tau txais ib tug loj tus naj npawb ntawm zoo tib yam sawv daws yuav. Txoj kev no yuav rov qab daim npav nrog cov txiaj ntsig zoo sib xws.
Tus qauv thib ob yog MemoryGame, ntawm no peb teeb 4 * 4 daim phiaj. Tus qauv yuav muaj cov khoom xws li daim npav (ib daim npav ntawm daim phiaj), daim npav Qhia array nrog cov npav twb qhib lawm, thiab qhov sib txawv boolean yog ua si los taug qab cov xwm txheej ntawm qhov kev ua si.
class MemoryGame {
var cards:[Card] = [Card]()
var cardsShown:[Card] = [Card]()
var isPlaying: Bool = false
}
Peb kuj yuav tsum tau tsim txoj hauv kev los tswj cov neeg siv kev sib cuam tshuam nrog daim phiaj.
Txhua zaus tus neeg siv xaiv ib daim npav, didSelectItemAt txoj kev hu ua. Nyob rau hauv txoj kev peb hu ua didSelectCard los siv lub ntsiab kev ua si logic.
Tam sim no cia peb tham me ntsis txog cov txheej txheem tseem ceeb.
Raws tu qauv
Ua haujlwm nrog cov txheej txheem yog qhov tseem ceeb ntawm Swift programming. Cov txheej txheem muab lub peev xwm los txhais cov cai rau cov chav kawm, qauv, lossis kev suav sau. Lub hauv paus ntsiab lus no tso cai rau koj los sau cov code modular thiab extensible code. Qhov tseeb, qhov no yog tus qauv uas peb twb tau siv rau collectionView hauv GameController. Tam sim no cia peb ua peb tus kheej version. Lub syntax yuav zoo li no:
protocol MemoryGameProtocol {
//protocol definition goes here
}
Peb paub tias cov txheej txheem tso cai rau peb los txhais cov cai lossis cov lus qhia rau kev siv cov chav kawm, yog li cia peb xav txog qhov lawv yuav tsum ua. Koj xav tau plaub tag nrho.
Game pib: memoryGameDidStart.
Koj yuav tsum tig daim npav ntsej muag: memoryGameShowCards.
Koj yuav tsum tig daim npav ntsej muag: memoryGameHideCards.
Peb hu cov qauv no los ntawm collectionSDViewSelectItemAt. Ua ntej nws pom daim npav xaiv. Tom qab ntawd txheeb xyuas seb puas muaj daim npav tsis sib xws hauv daim npavShown array (yog tias tus lej ntawm daim npavShown yog khib). Yog tias muaj ib qho, daim npav xaiv tau muab piv nrog nws. Yog tias cov duab zoo ib yam, ob daim npav ntxiv rau daim npavShown thiab nyob twj ywm ntsej muag. Yog tias txawv, daim npav tawm daim npavShown thiab ob qho tib si tig ntsej muag.
memoryGameHideCards
Yog tias daim npav tsis sib xws, txoj kev no raug hu thiab cov duab daim npav raug muab zais.
qhia = cuav.
memoryGameDidEnd
Thaum txoj kev no hu ua, nws txhais tau hais tias txhua daim npav twb tau nthuav tawm thiab nyob hauv daim npavShown: cardsShown.count = cards.count, yog li qhov kev ua si dhau lawm. Cov txheej txheem hu ua tshwj xeeb tom qab peb tau hu ua endGame() los teeb tsa lub isPlaying var rau qhov tsis tseeb, tom qab uas cov lus kawg game tau qhia. Tsis tas li ntawd alertController yog siv los ua qhov taw qhia rau tus maub los. viewDidDisappear raug hu thiab qhov kev ua si rov pib dua.
Nov yog txhua yam zoo li hauv 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()
}
}
Qhov tseeb, yog tag nrho. Koj tuaj yeem siv qhov project no los tsim koj tus kheej version ntawm qhov kev ua si.