おそるおそるSwift 3-4 熱中時代ジャンケン編を作る ~勝敗判定をさらに改良する~

Swift5+Xcode11.6
今回のゴール
シリーズ3の4回目です。
おそるおそるSwift 3-3 熱中時代ジャンケン編を作る ~勝敗判定を改良する~
Swift5+Xcode11.6 今回のゴール シリーズ3の3回目です。 勝敗判定コードをよりスマートにします。内部処理のみの改良ですので、動作結果は前回と変わりません。 ユーザ定義関数を作る 再利用するコードなの […]
勝敗結果を画面に表示させます。
ユーザ定義関数を変更する
前回は、デバッグウィンドウに勝敗結果を表示させていたのですが、画面に表示されるように変更しました。
コードを変更する
変更点は、(1)結果表示用の変数msg2を追加した、(2)勝敗表示用のテキストボックスを新設した(ついでに”Jan ken”の場所も少しずらした)、(3)ユーザ定義関数hanteiでString型の値を返すようにした、(4)呼び出し側がhanteiからの返り値をmsg2に代入するようにした、といったところです。(変更点はコメント文で(1)〜(4)で表示しました。)
import SwiftUI
struct ContentView: View {
@State var msg: String = "Jan Ken"
@State var human: Int = 0
@State var comp: Int = 0
@State var msg2: String = "" //(1)
let choice = ["グー","チョキ","パー"]
var body: some View {
VStack {
Image(choice[self.comp])
.rotationEffect(.degrees(180))
if self.human == 0 {
Text("\(msg)")
} else {
Text("Pon!")
}
Text("\(msg2)") //(2)
Image(choice[self.human])
HStack {
Button(action: {
self.human = 0
self.comp = Int.random(in: 0...2)
self.msg2 = hantei(human1:self.human, comp1:self.comp) //(4)
}) {
Text("グー")
}
Button(action: {
self.human = 1
self.comp = Int.random(in: 0...2)
self.msg2 = hantei(human1:self.human, comp1:self.comp)
}) {
Text("チョキ")
}
Button(action: {
self.human = 2
self.comp = Int.random(in: 0...2)
self.msg2 = hantei(human1:self.human, comp1:self.comp)
}) {
Text("パー")
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
func hantei(human1: Int, comp1: Int) -> String {
let kekka:(Int, Int) = (human1, comp1)
switch kekka {
case (0, 0),(1, 1),(2, 2) :
return "Draw!"
case (0, 1),(1, 2),(2, 0) :
return "Win!"
case (0, 2),(1, 0),(2, 1) :
return "Lose!"
default :
return "?"
}
} //(4)次回は
ジャンケン、ポン、ポン、ポン…となっているのを、ジャンケン、ポン、(リセット)、ジャンケン、ポン、(リセット)…にしようと思います。