Mercurial > public > geoquiz
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 |