Coming from Learning Swift (the programming language), I have completed Assignment 1 (including extra credit #1, but not #2). Most of the tasks were relatively straight-forward. I did not do any of the reading.
The last post had a fully functional game working as described in lectures 1 & 2. This assignment built from that.
Some brief notes on the required tasks:
- Easy. Done on the last post.
- Also easy.
- Not too hard, just added a new struct called TitleView and plopped it before the ScrollView in the VStack
- I tried to figure out a way to have the emojis var populated with the contents of a different emoji list (e.g. vehicleEmojis, as in var emojis = vehicleEmojis), but wasn’t successful. This will probably be covered in lecture 3. I ended up just hardcoding the initial list to be the same values as the vehicleEmoji string array. The buttons themselves were pretty straightforward.
- The hardest part about this was figuring out how to use the emoji browser so I didn’t have to close and re-open it for every new emoji. I did vehicles, animals, and fruit.
- array.shuffled(), easy
- VStack the system images with text
- Okay, I suppose I can do that. I picked the fruit emojis before realizing there weren’t specific fruit symbols. In SF 2, there is a leaf, which is close enough. This seems a bit nit-picky.
- font(.body)
- ok
Extra credit:
- set emojiCount to be a random value from 4 (minimum specified in the task) up to yourEmojiListVar.count. easy. do this after shuffling though
- this seems like a lot of work for something I don’t really need to do yet
Code
// // ContentView.swift // Memorize - Stanford CS193p, Spring 2021 // After assignment 1 // // Created by Austin from austinsnerdythings.com on 5/27/21. // import SwiftUI struct ContentView: View { var vehicleEmojis = ["?","?","?","?","?","?","?","?","?","?","?","?","?","✈️","?","?","?","?","?","?","?","?","?","?"] var animalEmojis = ["?","?","?","?","?","?","?","?","?","?","?","?"] var fruitEmojis = ["?","?","?","?","?","?","?","?","?","?","?","?"] @State var emojis = ["?","?","?","?","?","?","?","?","?","?","?","?","?","✈️","?","?","?","?","?","?","?","?","?","?"] @State var emojiCount: Int = 8 var body: some View { VStack { TitleView() ScrollView { LazyVGrid(columns: [GridItem(.adaptive(minimum: 80))]){ ForEach(emojis[0..<emojiCount], id: \.self) { emoji in CardView(content: emoji) .aspectRatio(2/3, contentMode: .fit) } } } .foregroundColor(.red) Spacer() HStack { vehicleTheme Spacer() animalTheme Spacer() fruitTheme } .font(.largeTitle) .padding(.horizontal) } .padding() } var remove: some View { Button { if emojiCount > 1 { emojiCount -= 1 } } label: { Image(systemName: "minus.circle") } } var add: some View { Button { if emojiCount < vehicleEmojis.count { emojiCount += 1 } } label: { Image(systemName: "plus.circle") } } var vehicleTheme: some View { Button(action: { emojis = vehicleEmojis.shuffled() emojiCount = Int.random(in: 4..<vehicleEmojis.count) }, label: { VStack{ Image(systemName: "car").font(.largeTitle) Text("Vehicles").font(.body) } }) } var animalTheme: some View { Button(action: { emojis = animalEmojis.shuffled() emojiCount = Int.random(in: 4..<animalEmojis.count) }, label: { VStack{ Image(systemName: "hare").font(.largeTitle) Text("Animals").font(.body) } }) } var fruitTheme: some View { Button(action: { emojis = fruitEmojis.shuffled() emojiCount = Int.random(in: 4..<fruitEmojis.count) }, label: { VStack{ Image(systemName: "leaf").font(.largeTitle) Text("Fruits").font(.body) } }) } } struct CardView: View { var content: String @State var isFaceUp: Bool = true var body: some View { ZStack { let shape = RoundedRectangle(cornerRadius: 20) if isFaceUp { shape.fill().foregroundColor(.white) shape.strokeBorder(lineWidth: 3) Text(content).font(.largeTitle) } else { shape.fill() } } .onTapGesture { if isFaceUp == true { isFaceUp = false } else { isFaceUp = true } } } } struct TitleView: View { var body: some View { HStack { Spacer() Text("Memorize!").font(.largeTitle) Spacer() } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() .preferredColorScheme(.light) ContentView() .preferredColorScheme(.dark) } }
Screenshots
Next up – lecture 3
Link to post about lecture 3 here.