Game kasebut diwiwiti kanthi demonstrasi set kertu. Padha ngapusi madhep mudhun (mungguh, gambar mudhun). Nalika sampeyan ngeklik salah siji, gambar mbukak sawetara detik.
Tugas pamuter nemokake kabeh kertu kanthi gambar sing padha. Yen, sawise mbukak kertu pisanan, sampeyan nguripake liwat kaloro lan gambar cocog, loro kertu tetep mbukak. Yen padha ora cocog, kertu ditutup maneh. Tujuane kanggo mbukak kabeh.
Struktur proyek
Kanggo nggawe versi prasaja saka game iki sampeyan kudu komponen ing ngisor iki:
Siji Controller: GameController.swift.
Siji Tampilan: CardCell.swift.
Rong Model: MemoryGame.swift lan Card.swift.
Main.storyboard kanggo mesthekake yen kabeh pesawat saka komponen kasedhiya.
Kita miwiti karo komponen paling gampang saka game, kertu.
Card.swift
Model kertu bakal duwe telung sifat: id kanggo ngenali saben siji, variabel boolean sing dituduhake kanggo nemtokake status kertu (didhelikake utawa mbukak), lan artworkURL kanggo gambar ing kertu.
class Card {
var id: String
var shown: Bool = false
var artworkURL: UIImage!
}
Sampeyan uga mbutuhake cara iki kanggo ngontrol interaksi pangguna karo peta:
Cara kanggo nampilake gambar ing kertu. Ing kene kita ngreset kabeh properti dadi standar. Kanggo id, kita generate id acak dening nelpon NSUUIS ().uuidString.
Model kapindho yaiku MemoryGame, ing kene kita nyetel kothak 4 * 4. Model kasebut bakal duwe properti kayata kertu (sakumpulan kertu ing kothak), susunan kartu sing ditampilake karo kertu sing wis mbukak, lan variabel boolean isPlaying kanggo nglacak status game kasebut.
class MemoryGame {
var cards:[Card] = [Card]()
var cardsShown:[Card] = [Card]()
var isPlaying: Bool = false
}
Kita uga kudu ngembangake cara kanggo ngontrol interaksi pangguna karo kothak.
Cara iki maca unsur pungkasan ing ** cardsShown ** Uploaded lan bali kertu non-cocog.
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 lan GameController.swift
Main.storyboard katon kaya iki:
Kaping pisanan, sampeyan kudu nyetel game anyar minangka viewDidLoad ing controller, kalebu gambar kanggo kothak. Ing game, kabeh iki bakal diwakili dening 4 * 4 collectionView. Yen sampeyan durung kenal karo collectionView, kene sampeyan bisa njaluk informasi sing dibutuhake.
Kita bakal ngatur GameController minangka pengontrol root aplikasi. GameController bakal duwe collectionView sing bakal kita rujuk minangka IBOutlet. Referensi liyane kanggo IBAction onStartGame () tombol, iki UIButton, sampeyan bisa ndeleng ing storyboard disebut PLAY.
A sethitik babagan implementasine saka controller:
First, kita initialize loro obyek utama - kothak: game = MemoryGame (), lan pesawat saka kertu: kertu = [Card] ().
Kita nyetel variabel awal minangka viewDidLoad, iki minangka cara pisanan sing diarani nalika game mlaku.
collectionView disetel kanggo didhelikake amarga kabeh kertu didhelikake nganti pangguna mencet PLAY.
Sanalika kita menet PLAY, miwiti bagean onStartGame IBAction, lan kita nyetel property collectionView isHidden palsu supaya kertu bisa katon.
Saben pangguna milih kertu, metode didSelectItemAt diarani. Ing cara kita nelpon didSelectCard kanggo ngleksanakake logika game utama.
Iki minangka implementasi GameController pungkasan:
Nggarap protokol minangka inti saka pemrograman Swift. Protokol nyedhiyakake kemampuan kanggo nemtokake aturan kanggo kelas, struktur, utawa enumerasi. Prinsip iki ngidini sampeyan nulis kode modular lan extensible. Nyatane, iki minangka pola sing wis ditindakake kanggo collectionView ing GameController. Saiki ayo nggawe versi kita dhewe. Sintaks bakal katon kaya iki:
protocol MemoryGameProtocol {
//protocol definition goes here
}
Kita ngerti manawa protokol ngidini kita nemtokake aturan utawa instruksi kanggo ngetrapake kelas, mula ayo dipikirake apa sing kudu ditindakake. Sampeyan butuh papat total.
Game wiwitan: memoryGameDidStart.
Sampeyan kudu nguripake kertu mudhun: memoryGameShowCards.
Sampeyan kudu nguripake kertu mudhun: memoryGameHideCards.
Game pungkasan: memoryGameDidEnd.
Kabeh papat cara bisa dileksanakake kanggo kelas utama, yaiku GameController.
memoriGameDidStart
Nalika cara iki mbukak, game kudu miwiti (pangguna mencet PLAY). Kene kita mung bakal isi maneh kanthi nelpon collectionView.reloadData (), sing bakal ngacak kertu.
Kita nelpon cara iki saka collectionSDViewSelectItemAt. Pisanan nuduhake kertu sing dipilih. Banjur mriksa kanggo ndeleng yen ana kertu sing ora cocog ing array cardsShown (yen jumlah cardsShown aneh). Yen ana siji, kertu sing dipilih dibandhingake karo. Yen gambar padha, loro kertu ditambahake menyang cardsShown lan tetep madhep munggah. Yen beda, kertu ninggalake cardsShown lan loro-lorone dipateni.
memoryGameHideCards
Yen kertu ora cocog, cara iki diarani lan gambar kertu didhelikake.