comparison GeoQuiz/Controllers/CityGameController.swift @ 30:eb23effeede7

add DatasetView
author Dennis C. M. <dennis@denniscm.com>
date Thu, 10 Nov 2022 11:51:52 +0100
parents f5a2c2dab208
children 6d574bd1644f
comparison
equal deleted inserted replaced
29:f5a2c2dab208 30:eb23effeede7
43 // Sound effects 43 // Sound effects
44 @Published var player: AVAudioPlayer? 44 @Published var player: AVAudioPlayer?
45 45
46 init() { 46 init() {
47 let data: CityModel = Bundle.main.decode("cities.json") 47 let data: CityModel = Bundle.main.decode("cities.json")
48 self.data = data.cities 48 let shuffledCities = data.cities.shuffled().prefix(100)
49
50 var cities = [String: T]()
51 for shuffledCity in shuffledCities {
52 cities[shuffledCity.key] = shuffledCity.value
53 }
54
55 self.data = cities
49 56
50 let user = UserController() 57 let user = UserController()
51 userLives = user.data.numberOfLives 58 userLives = user.data.numberOfLives
52 59
53 if let userData = UserDefaults.standard.data(forKey: "UserData") { 60 if let userData = UserDefaults.standard.data(forKey: "UserData") {
78 } else { 85 } else {
79 fatalError("Couldn't get a random value from data") 86 fatalError("Couldn't get a random value from data")
80 } 87 }
81 } 88 }
82 89
83 // Get question asked (correct answer) 90 // Get correct answer
91 let randomCityKeys = data.keys.shuffled()
84 let userChoicesCountry = userChoices.map { $0.value.country } 92 let userChoicesCountry = userChoices.map { $0.value.country }
85 let correctAnswer = data.first(where: { 93
86 !userChoices.keys.contains($0.key) && // Avoid duplicated cities 94 let correctCityKey = randomCityKeys.first(where: {
87 !dataAsked.keys.contains($0.key) && // Avoid cities already asked 95 !userChoices.keys.contains($0) && // Avoid duplicated cities
88 !userChoicesCountry.contains($0.value.country) // Avoid duplicated country names in userChoices 96 !dataAsked.keys.contains($0) && // Avoid cities already asked
97 !userChoicesCountry.contains(data[$0]!.country) // Avoid duplicated country names in userChoices
89 }) 98 })
90 99
91 // Unwrap optional 100 // Unwrap optional
92 if let correctAnswer = correctAnswer { 101 if let correctCityKey = correctCityKey {
93 userChoices[correctAnswer.key] = correctAnswer.value 102 let correctCityValue = data[correctCityKey]!
94 dataAsked[correctAnswer.key] = correctAnswer.value 103
104 userChoices[correctCityKey] = correctCityValue
105 dataAsked[correctCityKey] = correctCityValue
106
107 let correctAnswer = (key: correctCityKey, value: correctCityValue)
95 self.correctAnswer = correctAnswer 108 self.correctAnswer = correctAnswer
96 } else { 109 } else {
97 fatalError("Couldn't unwrap optional value") 110 fatalError("Couldn't unwrap optional value")
98 } 111 }
99 112