おそるおそるSwift 3-1 熱中時代ジャンケン編を作る ~ベース部分を作る~

Swift5+Xcode11.6

基本コンセプト

 「じゃんけん」は何かを決めるときによく使われる手段です。誰が自治会長をやるのか、誰が金を払うのか、誰が市長になるのか……運命の行方は「じゃんけん」によって決まると言っても過言ではありません。つまり「じゃんけん」を制するものは世界を制すると言っても過言ではないのです。成功を掴むために自主トレのためのツールを作ります。

今回のゴール

 とりあえず、画面レイアウトを作ってみて、とりあえず動作させてみようと思います。画面レイアウトの作成時に、座標を決めたりしなくても、パーツを置いていけば勝手にレイアウトしてくれるSwiftUIは、やっぱり便利ですね。

プレビュー

イメージ素材を仕込む

 ジャンケン用のイメージを仕込んでおきます。自分で作るのも手間なので、今回は他サイト(Internet Speakerさん)からいただきました。aiファイルで開くのがちょっと手間だったので、プレビュー画像をダウンロードし、プレビュー.appで切り取って3つのファイルにしました。

 次に、作った素材をプロジェクトのAssets.xcassetsフォルダにインポートしました。

左ペインで右クリックして「Import…」を選択

コードを打ち込む

 今回打ち込んだコードは下のとおりです(ContentView.swift)。

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)
                }) {
                    Text("グー")
                }
                Button(action: {
                    self.human = 1
                    self.comp = Int.random(in: 0...2)
                }) {
                    Text("チョキ")
                }
                Button(action: {
                    self.human = 2
                    self.comp = Int.random(in: 0...2)
                }) {
                    Text("パー")
                }
            }
        }
    }
}

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

 とりあえず用意した変数はmsg(メッセージ表示用)、human(人間側の選択肢用)、comp(PC側の選択肢用)の3つと、配列choice(画像選択用)を作りました。そうそう、上の画像では素材名を「choki」、「gu」等となっていますが、choiceに合わせ「チョキ」、「グー」等に変更しました。Imageの()の中でchoice[self.comp]は、choice配列のhuman番目(またはcomp番目)の画像を表示しろという意味です。ちなみに配列は0番から始めるので、choice[0]にグー、choice[1]にチョキ、choice[2]にパーが格納されています。

Assets.xcassetsフォルダの具

 あとは、「グー」、「チョキ」、「パー」ボタンを配置し、押したボタンに応じて人間側の選択肢がhumanに代入され、PC側の選択肢が乱数により決定されcompに代入されるようにしました。Int.random(in:)は覚えておきたいですね。0…2とすることで、乱数の範囲を0〜2に指定しています。

次回は

 勝敗の判定を自分でやるのも面倒なので、そういうことが得意そうなiPhoneにやってもらいます。

Bergamot

シェアする

コメントを残す

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

コメントする