おそるおそるSwift 3-2 熱中時代ジャンケン編を作る ~勝敗判定させる~

Swift5+Xcode11.6

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

今回のゴール

 とりあえず、勝敗判定させてみます。最初に言っておきますが、この回での方法はかなり非効率です。次回以降、徐々に改良していく予定です。下の動画のようにデバッグウィンドウに勝敗を表示させます。

プレビュー

コードを打ち込む

 今回打ち込んだコードは下のとおりです(ContentView.swift)。ボタンアクションに、if文で勝敗を判定させ、printでデバッグウィンドウに結果を表示させました。

import SwiftUI

struct ContentView: View {
    @State var msg: String = "Jan Ken"
    @State var human: Int = 0
    @State var comp: Int = 0
    let choice = ["グー","チョキ","パー"]
    
    var body: some View {
        VStack {
            Image(choice[self.comp])
                .rotationEffect(.degrees(180))
            Image(choice[self.human])
            if self.human == 0 {
                Text("\(msg)")
            } else {
                Text("Pon!")
            }
            HStack {
                Button(action: {
                    self.human = 0
                    self.comp = Int.random(in: 0...2)
                    if self.comp == 1 {
                        print("Win!")
                    } else if self.comp == 2 {
                        print("Lose!")
                    } else {
                        print("Draw!")
                    }
                }) {
                    Text("グー")
                }
                Button(action: {
                    self.human = 1
                    self.comp = Int.random(in: 0...2)
                    if self.comp == 2 {
                        print("Win!")
                    } else if self.comp == 0 {
                        print("Lose!")
                    } else {
                        print("Draw!")
                    }
                }) {
                    Text("チョキ")
                }
                Button(action: {
                    self.human = 2
                    self.comp = Int.random(in: 0...2)
                    if self.comp == 0 {
                        print("Win!")
                    } else if self.comp == 1 {
                        print("Lose!")
                    } else {
                        print("Draw!")
                    }
                }) {
                    Text("パー")
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

次回は

  複数のボタンに同じような処理を書き込んだり、if~elseを繰り返すのはスマートではありません。この部分を改良したいと思います。

Bergamot

シェアする

コメントを残す

メールアドレスが公開されることはありません。

コメントする