Mercurial > public > geoquiz
diff GeoQuiz/Logic/GuessTheCapital.swift @ 3:4dbe0cd9dadc
first game prototype
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Thu, 22 Sep 2022 10:42:39 +0200 |
parents | 413e2d21333e |
children | de54f05adb78 |
line wrap: on
line diff
--- a/GeoQuiz/Logic/GuessTheCapital.swift Tue Sep 20 11:54:06 2022 +0200 +++ b/GeoQuiz/Logic/GuessTheCapital.swift Thu Sep 22 10:42:39 2022 +0200 @@ -7,109 +7,111 @@ import Foundation -class GuessTheCapital: Game, ObservableObject { - - struct Country: Hashable { - let capitalName: String - let flagSymbol: String - } - - let countries: [String: Country] - var countriesAsked = [String: Country]() - - @Published var userScore = 0 - @Published var userLives = 3 - @Published var questionCounter = 0 - @Published var alertTitle = "" - @Published var alertMessage = "" - @Published var showingBuyLivesView = false - @Published var showingNoLivesAlert = false - @Published var showingWrongAnswerAlert = false - @Published var showingEndGameAlert = false - - @Published var userChoices = [String: Country]() - @Published var countryNameAsked = "" - - init() { - let flags: CountryFlags = load("CountryFlags.json") - let capitals: CountryCapitals = load("CountryCapitals.json") - - var countries = [String: Country]() - - for country in capitals.countries { - let countryName = country.key - let capitalName = country.value - - if let flagSymbol = flags.countries[countryName] { - countries[country.key] = Country(capitalName: capitalName, flagSymbol: flagSymbol) - } else { - fatalError() - } - } - - self.countries = countries - askQuestion() - } +class GuessTheCapital: ObservableObject { - func askQuestion() { - guard questionCounter < countries.count else { - self.alertTitle = "Amazing!" - self.alertMessage = "You've completed the game." - self.showingEndGameAlert = true - - return - } - - var userChoices = [String: Country]() - - while userChoices.count < 2 { - if let country = countries.randomElement() { - userChoices[country.key] = country.value - } else { - fatalError("Couldn't get a random country") - } - } - - let countryAsked = countries.first(where: { - !userChoices.keys.contains($0.key) && - !countriesAsked.keys.contains($0.key) - }) - - if let countryAsked = countryAsked { - userChoices[countryAsked.key] = countryAsked.value - self.countriesAsked[countryAsked.key] = countryAsked.value - self.countryNameAsked = countryAsked.key - } else { - fatalError("Couldn't get countryAsked") - } - - self.userChoices = userChoices - self.questionCounter += 1 - } - - func answered(userChoice userCapitalNameGuess: String) { - guard let correctCountry = countries[countryNameAsked] else { - fatalError("Couln't find \(countryNameAsked) in countries dictionary") - } - - guard userLives > 0 else { - self.alertTitle = "Not enough lives!" - self.alertMessage = "Please buy more lives to keep playing" - self.showingNoLivesAlert = true - - return - } - - if correctCountry.capitalName == userCapitalNameGuess { - hapticSuccess() - self.userScore += 1 - askQuestion() - } else { - hapticError() - self.userLives -= 1 - self.alertTitle = "Wrong!" - self.alertMessage = "The capital of \(countryNameAsked) is \(correctCountry.capitalName). You have \(userLives) lives left" - self.showingWrongAnswerAlert = true - } - } +// struct Country: Hashable { +// let capitalName: String +// let flagSymbol: String +// } +// +// let countries: [String: Country] +// var countriesAsked = [String: Country]() +// +// @Published var userScore = 0 +// @Published var userLives = 3 +// @Published var questionCounter = 0 +// @Published var alertTitle = "" +// @Published var alertMessage = "" +// @Published var scoreScaleAmount = 1.0 +// @Published var livesScaleAmount = 1.0 +// @Published var showingBuyLivesView = false +// @Published var showingNoLivesAlert = false +// @Published var showingWrongAnswerAlert = false +// @Published var showingEndGameAlert = false +// +// @Published var userChoices = [String: Country]() +// @Published var countryNameAsked = "" +// +// init() { +// let flags: CountryFlags = load("CountryFlags.json") +// let capitals: CountryCapitals = load("CountryCapitals.json") +// +// var countries = [String: Country]() +// +// for country in capitals.countries { +// let countryName = country.key +// let capitalName = country.value +// +// if let flagSymbol = flags.countries[countryName] { +// countries[country.key] = Country(capitalName: capitalName, flagSymbol: flagSymbol) +// } else { +// fatalError() +// } +// } +// +// self.countries = countries +// askQuestion() +// } +// +// func askQuestion() { +// guard questionCounter < countries.count else { +// self.alertTitle = "Amazing!" +// self.alertMessage = "You've completed the game." +// self.showingEndGameAlert = true +// +// return +// } +// +// var userChoices = [String: Country]() +// +// while userChoices.count < 2 { +// if let country = countries.randomElement() { +// userChoices[country.key] = country.value +// } else { +// fatalError("Couldn't get a random country") +// } +// } +// +// let countryAsked = countries.first(where: { +// !userChoices.keys.contains($0.key) && +// !countriesAsked.keys.contains($0.key) +// }) +// +// if let countryAsked = countryAsked { +// userChoices[countryAsked.key] = countryAsked.value +// self.countriesAsked[countryAsked.key] = countryAsked.value +// self.countryNameAsked = countryAsked.key +// } else { +// fatalError("Couldn't get countryAsked") +// } +// +// self.userChoices = userChoices +// self.questionCounter += 1 +// } +// +// func answered(userChoice userCapitalNameGuess: String) { +// guard let correctCountry = countries[countryNameAsked] else { +// fatalError("Couln't find \(countryNameAsked) in countries dictionary") +// } +// +// guard userLives > 0 else { +// self.alertTitle = "Not enough lives!" +// self.alertMessage = "Please buy more lives to keep playing" +// self.showingNoLivesAlert = true +// +// return +// } +// +// if correctCountry.capitalName == userCapitalNameGuess { +// hapticSuccess() +// self.userScore += 1 +// askQuestion() +// } else { +// hapticError() +// self.userLives -= 1 +// self.alertTitle = "Wrong!" +// self.alertMessage = "The capital of \(countryNameAsked) is \(correctCountry.capitalName). You have \(userLives) lives left" +// self.showingWrongAnswerAlert = true +// } +// } }