Swift5で行こう…第4回「ハイアンドローゲーム2」(もちゃち)

2020-08-02

目次へ
前(第3回)へ  次(第5回)へ

さて前回最後の問題は解けたでしょうか?
まだ解らない人の為にヒントです。


    @State var message = “0から9の値を入れて下さい”
    @State var value = “”
    @State var answer:Int = Int.random(in: 0…9)

この中の2箇所です。

1箇所は表示の問題と書いたので分かったのではないでしょうか。
@State var message = “0から9の値を入れて下さい”
の部分です。0から9を0から19とすれば良いのは解ったのではないでしょうか。
もう一箇所は難しかったかも知れません。
@State var answer:Int = Int.random(in: 0…9)
ここの9を19と変えれば良いのです。

    @State var message = “0から19の値を入れて下さい”
    @State var value = “”
    @State var answer:Int = Int.random(in: 0…19)

さて、今回作ったプログラムでは、一度終了しないと次のゲームが出来ません。それでは不便です。何回も遊べるようにしましょう。

最初の部分に

        @State var showingAlert = false

を加えて下さい。

そして

        else
        {
            message = “当たりです”
        }

の部分を変更します。

        else
        {
            self.showingAlert = true
            answer = Int.random(in: 0…9)
            message = “0から9の値を入れて下さい”
        }

として下さい。

また

            Button(action: {self.Action()}
            ){
                Text(“決定”)
            }

の部分を

            Button(action: {self.Action()}
            ){
                Text(“決定”)
            }
            .alert(isPresented: $showingAlert) {
                Alert(title: Text(“当たりです”))
            }

の様に変更します。

以下全体ソースコードです。

import SwiftUI

struct ContentView: View {
    @State var message = “0から9の値を入れて下さい”
    @State var value = “”
    @State var answer:Int = Int.random(in: 0…9)
    @State var showingAlert = false

    func Action() {
        var x:Int
        x = Int(value)!
        if (x > answer)
        {
            message = “もっと小さいです”
        }
        else if (x < answer)
        {
            message = “もっと大きいです”
        }
        else
        {
            self.showingAlert = true
            answer = Int.random(in: 0…9)
            message = “0から9の値を入れて下さい”
        }
    }
    
    var body: some View {
        VStack {
            Text(message)
            TextField(“Input”, text: $value)
                .frame(width: 50, height: 50, alignment: .center)
            Button(action: {self.Action()}
            ){
                Text(“決定”)
            }
            .alert(isPresented: $showingAlert) {
                Alert(title: Text(“当たりです”))
            }
        }
    }
}

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

実行してみましょう。何回も遊べるのが判ったと思います。

さて、今度は、当たるまで何回かかったか判るようにしたいと思います。

コードを以下のように変更して下さい。

以下全体ソースコードです。

import SwiftUI

struct ContentView: View {

    @State var count = 1
    @State var alertMessage = “”
    @State var message = “0から9の値を入れて下さい”
    @State var value = “”
    @State var answer:Int = Int.random(in: 0…9)
    @State var showingAlert = false

    func Action() {
        var x:Int
        x = Int(value)!
        if (x > answer)
        {
           message = “もっと小さいです”
        }
        else if (x < answer)
        {
            message = “もっと大きいです”
        }
        else
        {
            alertMessage = String(count) + “回で当たりです”
            self.showingAlert = true
            answer = Int.random(in: 0…9)
            count = 0
            message = “0から9の値を入れて下さい”
        }
        count = count + 1
    }    

    var body: some View {
        VStack {
            Text(String(count) + “回目”)
            Text(message)
            TextField(“Input”, text: $value)
                .frame(width: 50, height: 50, alignment: .center)
            Button(action: {self.Action()}
            ){
                Text(“決定”)
            }
            .alert(isPresented: $showingAlert) {
                Alert(title: Text(alertMessage))
            }
        }
    }
}

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

前(第3回)へ  次(第5回)へ
目次へ

Since1991 © Shimayugu All Rights Reserved.
アップルおよびアップルのロゴは、米国および他の国々で登録されたApple Inc.の商標です。
湘南マッキントッシュユーザーズグループは、独立したユーザグループで、Apple Japan合同会社が権限を与えた団体、支援する団体、またはその他に承認する団体ではありません。