diff GeoQuiz/Logic/GameInfoProtocol+Extension.swift @ 16:1011e56b7832

implement user profile
author Dennis C. M. <dennis@denniscm.com>
date Thu, 20 Oct 2022 13:49:42 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GeoQuiz/Logic/GameInfoProtocol+Extension.swift	Thu Oct 20 13:49:42 2022 +0200
@@ -0,0 +1,75 @@
+//
+//  GameInfoProtocol+Structs.swift
+//  GeoQuiz
+//
+//  Created by Dennis Concepción Martín on 20/10/22.
+//
+
+import Foundation
+import SwiftUI
+
+@objc
+public enum GameType: Int16 {
+    case guessTheFlag, guessTheCapital, guessTheCountry, guessThePopulation
+}
+
+protocol GameInfo {
+    static var type: GameType { get }
+    static var level: String { get }
+    static var name: String { get }
+    static var symbol: String { get }
+    static var gradient: Gradient { get }
+    static var numberOfQuestions: Int { get }
+}
+
+class GuessTheFlagInfo: GameInfo {
+    static let type: GameType = .guessTheFlag
+    static let level = "Level 1"
+    static let name = "Guess the flag"
+    static let symbol = "flag.fill"
+    static let gradient: Gradient = .main
+    
+    static var numberOfQuestions: Int {
+        let data: CountryData = load("countries.json")
+        return data.countries.count
+    }
+}
+
+class GuessTheCapitalInfo: GameInfo {
+    static let type: GameType = .guessTheFlag
+    static let level = "Level 2"
+    static let name = "Guess the capital"
+    static let symbol = "building.2.fill"
+    static let gradient: Gradient = .secondary
+    
+    static var numberOfQuestions: Int {
+        let data: CountryData = load("countries.json")
+        return data.countries.count
+    }
+}
+
+class GuessTheCountryInfo: GameInfo {
+    static let type: GameType = .guessTheFlag
+    static let level = "Level 3"
+    static let name = "Guess the country"
+    static let symbol = "globe.americas.fill"
+    static let gradient: Gradient = .tertiary
+    
+    static var numberOfQuestions: Int {
+        let data: CityData = load("cities.json")
+        return data.cities.count
+    }
+}
+
+class GuessThePopulationInfo: GameInfo {
+    static let type: GameType = .guessTheFlag
+    static let level = "Level 4"
+    static let name = "Guess the population"
+    static let symbol = "person.fill"
+    static let gradient: Gradient = .quaternary
+    
+    static var numberOfQuestions: Int {
+        let data: CityData = load("cities.json")
+        return data.cities.count
+    }
+}