猜單字

水餃
Oct 22, 2020

主要畫面程式

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)

}

--

--