サイトアイコン BergamotMagic

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

Swift5+Xcode11.6

今回のゴール

 シリーズ3の4回目です。

 勝敗結果を画面に表示させます。

ユーザ定義関数を変更する

 前回は、デバッグウィンドウに勝敗結果を表示させていたのですが、画面に表示されるように変更しました。

プレビュー

コードを変更する

 変更点は、(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)

次回は

 ジャンケン、ポン、ポン、ポン…となっているのを、ジャンケン、ポン、(リセット)、ジャンケン、ポン、(リセット)…にしようと思います。

モバイルバージョンを終了