annotate GeoQuiz/GuessTheCapitalView.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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
1 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
2 // GuessTheCapitalView.swift
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
3 // GeoQuiz
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 14/9/22.
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
8 import SwiftUI
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10 struct GuessTheCapitalView: View {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
11 @Binding var gameName: GameName?
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
12 @StateObject var game = GuessTheCapital()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
13
3
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
14 // var flagSymbol: String {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
15 // if let countryAsked = game.countries[game.countryNameAsked] {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
16 // return countryAsked.flagSymbol
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
17 // } else {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
18 // fatalError("Couldn't find \(game.countryNameAsked) in countries")
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
19 // }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
20 // }
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
21
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
22 var body: some View {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
23 ZStack {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
24 LinearGradient(gradient: .secondary, startPoint: .top, endPoint: .bottom)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
25 .ignoresSafeArea()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
26
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
27 GeometryReader { geo in
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
28 VStack(spacing: 20) {
3
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
29 // GameToolbar(
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
30 // userScore: $game.userScore,
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
31 // userLives: $game.userLives,
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
32 // gameName: $gameName,
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
33 // showingBuyLivesView: $game.showingBuyLivesView
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
34 // )
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
35
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
36 Spacer()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
37
3
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
38 // FlagImage(flagSymbol: flagSymbol, cornerRadius: 20)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
39 // .shadow(radius: 10)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
40 // .frame(height: geo.size.height * 0.15)
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
41
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
42 Spacer()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
43
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
44 HStack {
3
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
45 // VStack(alignment: .leading, spacing: 10) {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
46 // Text("Question \(game.questionCounter) of \(game.countries.count)")
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
47 // .font(.title3)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
48 //
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
49 // Text("What is the capital of \(game.countryNameAsked)?")
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
50 // .font(.title)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
51 // .fontWeight(.semibold)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
52 // }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
53 // .foregroundColor(.white)
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
54
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
55 Spacer()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
56 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
57
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
58 VStack {
3
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
59 // ForEach(Array(game.userChoices.values), id: \.self) { country in
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
60 // Button {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
61 // game.answered(userChoice: country.capitalName)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
62 // } label: {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
63 // AnswerButton(optionName: country.capitalName, color: .secondary)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
64 // .frame(height: geo.size.height * 0.08)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
65 // }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
66 // }
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
67 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
68 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
69 .padding()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
70 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
71 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
72 .navigationBarHidden(true)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
73
3
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
74 // .sheet(isPresented: $game.showingBuyLivesView) {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
75 // BuyLivesModal()
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
76 // }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
77 //
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
78 // .alert(game.alertTitle, isPresented: $game.showingNoLivesAlert) {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
79 // Button("Buy lives") { game.showingBuyLivesView = true }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
80 // Button("Exit", role: .destructive) { gameName = nil }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
81 // Button("Cancel", role: .cancel) { }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
82 // } message: {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
83 // Text(game.alertMessage)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
84 // }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
85 //
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
86 // .alert(game.alertTitle, isPresented: $game.showingWrongAnswerAlert) {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
87 // Button("Continue", role: .cancel) { game.askQuestion() }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
88 // } message: {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
89 // Text(game.alertMessage)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
90 // }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
91 //
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
92 // .alert(game.alertTitle, isPresented: $game.showingEndGameAlert) {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
93 // Button("Exit", role: .cancel) { gameName = nil }
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
94 // } message: {
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
95 // Text(game.alertMessage)
4dbe0cd9dadc first game prototype
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
96 // }
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
97 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
98 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
99
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
100 struct GuessCapitalView_Previews: PreviewProvider {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
101 static var previews: some View {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
102 NavigationView {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
103 GuessTheCapitalView(gameName: .constant(GameName.guessTheCapital))
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
104 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
105 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
106 }