主要畫面程式
import SwiftUI
struct GameView: View {
let array = [
["A", "B", "C", "D", "E", "F", "G"],
["H", "I", "J", "K", "L", "M", "N"],
["O", "P", "Q", "R", "S", "T", "U"],
["V", "W", "X", "Y", "Z"]
]
var guess: String {
var guess = ""
for char in gameData.answer {
if gameData.guessCharacters.lowercased().contains(char) {
guess += "\(char) "
} else if char == " " {
guess += " "
} else if char == "-" {
guess += "-"
} else if char == "." {
guess += "."
} else {
guess += "_ "
}
}
return guess
}
@State var gameData = GameData()
var char: String
func calculateWidth(width:CGFloat, count:Int) -> CGFloat {
let number = width - CGFloat(20 * (count - 1)) - 20
return number / CGFloat(count)
}
var body: some View {
VStack {
HStack {
Spacer()
HStack {
Button(action: {
print(self.gameData.answer.randomElement()!.uppercased(),
self.gameData.guessCharacters )
var randomChar = self.gameData.answer.randomElement()!.uppercased()
while self.gameData.guessCharacters.contains(randomChar) {
randomChar = self.gameData.answer.randomElement()!.uppercased()
}
self.gameData.guessCharacters += randomChar
playSound(sound: "click", type: "mp3")
}) {
Text("hint")
.font(.largeTitle)
}
.disabled(!self.guess.contains("_"))
Button(action: {
self.gameData.index += 1
self.gameData.guessWrongCount = 0
self.gameData.guessCharacters = ""
if self.gameData.index >= self.gameData.vocabularies.count {
self.gameData.index = 0
}
self.gameData.losses += 1
playSound(sound: "click", type: "mp3")
}
) {
Text("skip")
.font(.largeTitle)
}
}
}
.padding(.trailing)
GeometryReader {(geometry) in
VStack(spacing:10) {
Image("hangman\(self.gameData.guessWrongCount + 1)")
.renderingMode(.template)
.resizable()
.scaledToFit()
.frame(height: 280)
.foregroundColor(Color.primary)
.offset(x: 0, y: -20)
ZStack {
VStack(spacing: 20) {
ForEach(self.array, id: \.self) {
(values) in
HStack(spacing: 20) {
ForEach(values, id: \.self) {
(value) in
characterView(character: value, width: self.calculateWidth(width: geometry.size.width, count: values.count), gameData: self.$gameData)
}
}
.padding(.horizontal, 10)
}