ಈ ಲೇಖನವು ನಾನು ನಿಜವಾಗಿಯೂ ಇಷ್ಟಪಡುವ ಸರಳ ಮೆಮೊರಿ ತರಬೇತಿ ಆಟವನ್ನು ರಚಿಸುವ ಪ್ರಕ್ರಿಯೆಯನ್ನು ವಿವರಿಸುತ್ತದೆ. ಸ್ವತಃ ಉತ್ತಮವಾಗಿರುವುದರ ಜೊತೆಗೆ, ನೀವು ಹೋದಂತೆ ಸ್ವಿಫ್ಟ್ ತರಗತಿಗಳು ಮತ್ತು ಪ್ರೋಟೋಕಾಲ್ಗಳ ಕುರಿತು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಕಲಿಯುವಿರಿ. ಆದರೆ ನಾವು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ಆಟವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳೋಣ.
ನಾವು ನೆನಪಿಸುತ್ತೇವೆ:ಎಲ್ಲಾ Habr ಓದುಗರಿಗೆ - Habr ಪ್ರೊಮೊ ಕೋಡ್ ಬಳಸಿಕೊಂಡು ಯಾವುದೇ ಸ್ಕಿಲ್ಬಾಕ್ಸ್ ಕೋರ್ಸ್ಗೆ ದಾಖಲಾಗುವಾಗ 10 ರೂಬಲ್ ರಿಯಾಯಿತಿ.
ಆಟವು ಕಾರ್ಡ್ಗಳ ಸೆಟ್ಗಳ ಪ್ರದರ್ಶನದೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. ಅವರು ಮುಖಾಮುಖಿಯಾಗಿ ಮಲಗುತ್ತಾರೆ (ಕ್ರಮವಾಗಿ, ಚಿತ್ರ ಕೆಳಗೆ). ನೀವು ಯಾವುದನ್ನಾದರೂ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ಚಿತ್ರವು ಕೆಲವು ಸೆಕೆಂಡುಗಳವರೆಗೆ ತೆರೆಯುತ್ತದೆ.
ಒಂದೇ ಚಿತ್ರಗಳೊಂದಿಗೆ ಎಲ್ಲಾ ಕಾರ್ಡ್ಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ಆಟಗಾರನ ಕಾರ್ಯವಾಗಿದೆ. ಮೊದಲ ಕಾರ್ಡ್ ಅನ್ನು ತೆರೆದ ನಂತರ, ನೀವು ಎರಡನೆಯದನ್ನು ತಿರುಗಿಸಿದರೆ ಮತ್ತು ಚಿತ್ರಗಳು ಹೊಂದಾಣಿಕೆಯಾದರೆ, ಎರಡೂ ಕಾರ್ಡ್ಗಳು ತೆರೆದಿರುತ್ತವೆ. ಅವು ಹೊಂದಿಕೆಯಾಗದಿದ್ದರೆ, ಕಾರ್ಡ್ಗಳನ್ನು ಮತ್ತೆ ಮುಚ್ಚಲಾಗುತ್ತದೆ. ಎಲ್ಲವನ್ನೂ ತೆರೆಯುವುದು ಗುರಿಯಾಗಿದೆ.
ಯೋಜನೆಯ ರಚನೆ
ಈ ಆಟದ ಸರಳ ಆವೃತ್ತಿಯನ್ನು ರಚಿಸಲು ನಿಮಗೆ ಈ ಕೆಳಗಿನ ಘಟಕಗಳು ಬೇಕಾಗುತ್ತವೆ:
ಒಂದು ನಿಯಂತ್ರಕ: GameController.swift.
ಒಂದು ನೋಟ: CardCell.swift.
ಎರಡು ಮಾದರಿಗಳು: MemoryGame.swift ಮತ್ತು Card.swift.
Main.storyboard ಘಟಕಗಳ ಸಂಪೂರ್ಣ ಸೆಟ್ ಲಭ್ಯವಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು.
ನಾವು ಆಟದ ಸರಳ ಅಂಶವಾದ ಕಾರ್ಡ್ಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ.
Card.swift
ಕಾರ್ಡ್ ಮಾದರಿಯು ಮೂರು ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ: ಪ್ರತಿಯೊಂದನ್ನು ಗುರುತಿಸಲು ಐಡಿ, ಕಾರ್ಡ್ನ ಸ್ಥಿತಿಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲು ತೋರಿಸಲಾದ ಬೂಲಿಯನ್ ವೇರಿಯೇಬಲ್ (ಗುಪ್ತ ಅಥವಾ ತೆರೆದ), ಮತ್ತು ಕಾರ್ಡ್ಗಳಲ್ಲಿನ ಚಿತ್ರಗಳಿಗಾಗಿ ಆರ್ಟ್ವರ್ಕ್URL.
class Card {
var id: String
var shown: Bool = false
var artworkURL: UIImage!
}
ನಕ್ಷೆಗಳೊಂದಿಗೆ ಬಳಕೆದಾರರ ಸಂವಹನವನ್ನು ನಿಯಂತ್ರಿಸಲು ನಿಮಗೆ ಈ ವಿಧಾನಗಳ ಅಗತ್ಯವಿದೆ:
ಕಾರ್ಡ್ನಲ್ಲಿ ಚಿತ್ರವನ್ನು ಪ್ರದರ್ಶಿಸುವ ವಿಧಾನ. ಇಲ್ಲಿ ನಾವು ಎಲ್ಲಾ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಡೀಫಾಲ್ಟ್ ಆಗಿ ಮರುಹೊಂದಿಸುತ್ತೇವೆ. ಐಡಿಗಾಗಿ, ನಾವು NSUUIS().uuidString ಅನ್ನು ಕರೆಯುವ ಮೂಲಕ ಯಾದೃಚ್ಛಿಕ ಐಡಿಯನ್ನು ರಚಿಸುತ್ತೇವೆ.
ಎರಡನೇ ಮಾದರಿ MemoryGame ಆಗಿದೆ, ಇಲ್ಲಿ ನಾವು 4*4 ಗ್ರಿಡ್ ಅನ್ನು ಹೊಂದಿಸಿದ್ದೇವೆ. ಮಾದರಿಯು ಕಾರ್ಡ್ಗಳಂತಹ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ (ಗ್ರಿಡ್ನಲ್ಲಿ ಕಾರ್ಡ್ಗಳ ಒಂದು ಶ್ರೇಣಿ), ಕಾರ್ಡ್ಗಳನ್ನು ಈಗಾಗಲೇ ತೆರೆದಿರುವ ಕಾರ್ಡ್ಗಳ ಸರಣಿ, ಮತ್ತು ಆಟದ ಸ್ಥಿತಿಯನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬೂಲಿಯನ್ ವೇರಿಯಬಲ್ isPlaying.
class MemoryGame {
var cards:[Card] = [Card]()
var cardsShown:[Card] = [Card]()
var isPlaying: Bool = false
}
ಗ್ರಿಡ್ನೊಂದಿಗೆ ಬಳಕೆದಾರರ ಸಂವಹನವನ್ನು ನಿಯಂತ್ರಿಸಲು ನಾವು ವಿಧಾನಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಬೇಕಾಗಿದೆ.
ನಾವು ಆಟವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಬಯಸಿದರೆ, ನಂತರ ನಾವು isPlaying ವೇರಿಯೇಬಲ್ ಅನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸುತ್ತೇವೆ ಮತ್ತು ಕಾರ್ಡ್ಗಳ ಆರಂಭಿಕ ವಿನ್ಯಾಸವನ್ನು ತೆಗೆದುಹಾಕುತ್ತೇವೆ.
ಈ ವಿಧಾನವು **ಕಾರ್ಡ್ಗಳು ತೋರಿಸಿರುವ** ಸರಣಿಯಲ್ಲಿನ ಕೊನೆಯ ಅಂಶವನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಹೊಂದಾಣಿಕೆಯಾಗದ ಕಾರ್ಡ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ.
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 ಸಂಗ್ರಹ ವೀಕ್ಷಣೆಯಿಂದ ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತದೆ. ಸಂಗ್ರಹ ವೀಕ್ಷಣೆಯ ಕುರಿತು ನಿಮಗೆ ಇನ್ನೂ ಪರಿಚಯವಿಲ್ಲದಿದ್ದರೆ, ಅದು ಇಲ್ಲಿದೆ ನಿಮಗೆ ಅಗತ್ಯವಿರುವ ಮಾಹಿತಿಯನ್ನು ನೀವು ಪಡೆಯಬಹುದು.
ನಾವು ಗೇಮ್ ಕಂಟ್ರೋಲರ್ ಅನ್ನು ಅಪ್ಲಿಕೇಶನ್ನ ರೂಟ್ ಕಂಟ್ರೋಲರ್ ಆಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತೇವೆ. ಗೇಮ್ ಕಂಟ್ರೋಲರ್ ಸಂಗ್ರಹ ವೀಕ್ಷಣೆಯನ್ನು ಹೊಂದಿರುತ್ತದೆ ಅದನ್ನು ನಾವು IBOutlet ಎಂದು ಉಲ್ಲೇಖಿಸುತ್ತೇವೆ. ಮತ್ತೊಂದು ಉಲ್ಲೇಖವೆಂದರೆ IBAction onStartGame() ಬಟನ್, ಇದು UIButton ಆಗಿದೆ, ನೀವು ಇದನ್ನು PLAY ಎಂಬ ಸ್ಟೋರಿಬೋರ್ಡ್ನಲ್ಲಿ ನೋಡಬಹುದು.
ನಿಯಂತ್ರಕಗಳ ಅನುಷ್ಠಾನದ ಬಗ್ಗೆ ಸ್ವಲ್ಪ:
ಮೊದಲಿಗೆ, ನಾವು ಎರಡು ಮುಖ್ಯ ವಸ್ತುಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ - ಗ್ರಿಡ್: ಆಟ = MemoryGame(), ಮತ್ತು ಕಾರ್ಡ್ಗಳ ಸೆಟ್: ಕಾರ್ಡ್ಗಳು = [ಕಾರ್ಡ್]().
ನಾವು ಆರಂಭಿಕ ಅಸ್ಥಿರಗಳನ್ನು viewDidLoad ಎಂದು ಹೊಂದಿಸಿದ್ದೇವೆ, ಇದು ಆಟವು ಚಾಲನೆಯಲ್ಲಿರುವಾಗ ಕರೆಯಲಾಗುವ ಮೊದಲ ವಿಧಾನವಾಗಿದೆ.
ಸಂಗ್ರಹ ವೀಕ್ಷಣೆಯನ್ನು ಮರೆಮಾಡಲು ಹೊಂದಿಸಲಾಗಿದೆ ಏಕೆಂದರೆ ಬಳಕೆದಾರರು ಪ್ಲೇ ಅನ್ನು ಒತ್ತುವವರೆಗೂ ಎಲ್ಲಾ ಕಾರ್ಡ್ಗಳನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ.
ನಾವು PLAY ಅನ್ನು ಒತ್ತಿದ ತಕ್ಷಣ, onStartGame IBAction ವಿಭಾಗವು ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಮತ್ತು ಕಾರ್ಡ್ಗಳು ಗೋಚರಿಸುವಂತೆ ನಾವು ಸಂಗ್ರಹ ವೀಕ್ಷಣೆ isHidden ಆಸ್ತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸುತ್ತೇವೆ.
ಪ್ರತಿ ಬಾರಿ ಬಳಕೆದಾರರು ಕಾರ್ಡ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ, didSelectItemAt ವಿಧಾನವನ್ನು ಕರೆಯಲಾಗುತ್ತದೆ. ಮುಖ್ಯ ಆಟದ ತರ್ಕವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ನಾವು didSelectCard ಎಂದು ಕರೆಯುವ ವಿಧಾನದಲ್ಲಿ.
ಪ್ರೋಟೋಕಾಲ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು ಸ್ವಿಫ್ಟ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ನ ತಿರುಳು. ಪ್ರೋಟೋಕಾಲ್ಗಳು ವರ್ಗ, ರಚನೆ ಅಥವಾ ಎಣಿಕೆಗೆ ನಿಯಮಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಈ ತತ್ವವು ಮಾಡ್ಯುಲರ್ ಮತ್ತು ಎಕ್ಸ್ಟೆನ್ಸಿಬಲ್ ಕೋಡ್ ಅನ್ನು ಬರೆಯಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ವಾಸ್ತವವಾಗಿ, ಇದು ಗೇಮ್ಕಂಟ್ರೋಲರ್ನಲ್ಲಿ ಸಂಗ್ರಹಣೆ ವೀಕ್ಷಣೆಗಾಗಿ ನಾವು ಈಗಾಗಲೇ ಅನುಷ್ಠಾನಗೊಳಿಸುತ್ತಿರುವ ಮಾದರಿಯಾಗಿದೆ. ಈಗ ನಮ್ಮ ಸ್ವಂತ ಆವೃತ್ತಿಯನ್ನು ಮಾಡೋಣ. ಸಿಂಟ್ಯಾಕ್ಸ್ ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:
protocol MemoryGameProtocol {
//protocol definition goes here
}
ಒಂದು ವರ್ಗವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ನಿಯಮಗಳು ಅಥವಾ ಸೂಚನೆಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಪ್ರೋಟೋಕಾಲ್ ಅನುಮತಿಸುತ್ತದೆ ಎಂದು ನಮಗೆ ತಿಳಿದಿದೆ, ಆದ್ದರಿಂದ ಅವುಗಳು ಏನಾಗಿರಬೇಕು ಎಂಬುದರ ಕುರಿತು ಯೋಚಿಸೋಣ. ನಿಮಗೆ ಒಟ್ಟು ನಾಲ್ಕು ಬೇಕು.
ಆಟದ ಪ್ರಾರಂಭ: ಮೆಮೊರಿ ಆಟಆರಂಭ.
ನೀವು ಕಾರ್ಡ್ ಮುಖವನ್ನು ಕೆಳಕ್ಕೆ ತಿರುಗಿಸುವ ಅಗತ್ಯವಿದೆ: memoryGameShowCards.
ನೀವು ಕಾರ್ಡ್ ಮುಖವನ್ನು ಕೆಳಕ್ಕೆ ತಿರುಗಿಸುವ ಅಗತ್ಯವಿದೆ: memoryGameHideCards.
ಆಟದ ಅಂತ್ಯ: memoryGameDidEnd.
ಎಲ್ಲಾ ನಾಲ್ಕು ವಿಧಾನಗಳನ್ನು ಮುಖ್ಯ ವರ್ಗಕ್ಕೆ ಅಳವಡಿಸಬಹುದಾಗಿದೆ, ಇದು ಗೇಮ್ ಕಂಟ್ರೋಲರ್ ಆಗಿದೆ.
ಮೆಮೊರಿ ಆಟಪ್ರಾರಂಭಿಸಿದೆ
ಈ ವಿಧಾನವನ್ನು ಚಲಾಯಿಸಿದಾಗ, ಆಟವು ಪ್ರಾರಂಭವಾಗಬೇಕು (ಬಳಕೆದಾರರು ಪ್ಲೇ ಅನ್ನು ಒತ್ತುತ್ತಾರೆ). ಇಲ್ಲಿ ನಾವು ಕಾರ್ಡ್ಗಳನ್ನು ಷಫಲ್ ಮಾಡುವ collectionView.reloadData() ಗೆ ಕರೆ ಮಾಡುವ ಮೂಲಕ ವಿಷಯವನ್ನು ಮರುಲೋಡ್ ಮಾಡುತ್ತೇವೆ.
ಸಂಗ್ರಹಣೆSDViewSelectItemAt ನಿಂದ ನಾವು ಈ ವಿಧಾನವನ್ನು ಕರೆಯುತ್ತೇವೆ. ಮೊದಲು ಅದು ಆಯ್ದ ಕಾರ್ಡ್ ಅನ್ನು ತೋರಿಸುತ್ತದೆ. ನಂತರ ಕಾರ್ಡ್ಗಳು ತೋರಿಸಿದ ಅರೇಯಲ್ಲಿ ಸಾಟಿಯಿಲ್ಲದ ಕಾರ್ಡ್ ಇದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ (ಪ್ರದರ್ಶಿತ ಕಾರ್ಡ್ಗಳ ಸಂಖ್ಯೆ ಬೆಸವಾಗಿದ್ದರೆ). ಒಂದು ಇದ್ದರೆ, ಆಯ್ಕೆಮಾಡಿದ ಕಾರ್ಡ್ ಅನ್ನು ಅದರೊಂದಿಗೆ ಹೋಲಿಸಲಾಗುತ್ತದೆ. ಚಿತ್ರಗಳು ಒಂದೇ ಆಗಿದ್ದರೆ, ಎರಡೂ ಕಾರ್ಡ್ಗಳನ್ನು ತೋರಿಸಲಾದ ಕಾರ್ಡ್ಗಳಿಗೆ ಸೇರಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಮುಖಾಮುಖಿಯಾಗಿ ಉಳಿಯುತ್ತದೆ. ಬೇರೆಯಾದರೆ, ಕಾರ್ಡ್ ಎಲೆಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಎರಡನ್ನೂ ಕೆಳಗೆ ತಿರುಗಿಸಲಾಗುತ್ತದೆ.
ಮೆಮೊರಿ ಆಟಹೈಡ್ ಕಾರ್ಡ್ಸ್
ಕಾರ್ಡ್ಗಳು ಹೊಂದಿಕೆಯಾಗದಿದ್ದರೆ, ಈ ವಿಧಾನವನ್ನು ಕರೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಕಾರ್ಡ್ ಚಿತ್ರಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ.
ತೋರಿಸಲಾಗಿದೆ = ತಪ್ಪು.
ಮೆಮೊರಿ ಆಟDidEnd
ಈ ವಿಧಾನವನ್ನು ಕರೆಯುವಾಗ, ಎಲ್ಲಾ ಕಾರ್ಡ್ಗಳು ಈಗಾಗಲೇ ಬಹಿರಂಗಗೊಂಡಿವೆ ಮತ್ತು ಕಾರ್ಡ್ಗಳು ತೋರಿಸಿದ ಪಟ್ಟಿಯಲ್ಲಿವೆ: cardsShown.count = cards.count, ಆದ್ದರಿಂದ ಆಟವು ಮುಗಿದಿದೆ. isPlaying var ಅನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಲು ನಾವು endGame() ಅನ್ನು ಕರೆದ ನಂತರ ವಿಧಾನವನ್ನು ನಿರ್ದಿಷ್ಟವಾಗಿ ಕರೆಯಲಾಗುತ್ತದೆ, ಅದರ ನಂತರ ಆಟದ ಅಂತ್ಯದ ಸಂದೇಶವನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ. ಅಲರ್ಟ್ ಕಂಟ್ರೋಲರ್ ಅನ್ನು ನಿಯಂತ್ರಕಕ್ಕೆ ಸೂಚಕವಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ. viewDidDisappear ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಆಟವನ್ನು ಮರುಹೊಂದಿಸಲಾಗಿದೆ.
ಗೇಮ್ಕಂಟ್ರೋಲರ್ನಲ್ಲಿ ಎಲ್ಲವೂ ಹೇಗೆ ಕಾಣುತ್ತದೆ ಎಂಬುದು ಇಲ್ಲಿದೆ:
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()
}
}
ವಾಸ್ತವವಾಗಿ, ಅಷ್ಟೆ. ಆಟದ ನಿಮ್ಮ ಸ್ವಂತ ಆವೃತ್ತಿಯನ್ನು ರಚಿಸಲು ನೀವು ಈ ಯೋಜನೆಯನ್ನು ಬಳಸಬಹುದು.