新Swiftで行こう…第53回「ハイアンドローゲーム2解説」 田部井保

目次 通常版

 ハイアンドローゲーム2の解説です。

 まず前半部分の0〜19とする場合です。

//
//  ViewController.swift
//  Hi and Lo
//
//  Created by 保 Tabei on 2024/09/22.
//

import UIKit

class ViewController: UIViewController {

    ///ガイドラベル
    @IBOutlet weak var Guide: UILabel!
    ///入力フィールド(0〜19を入れる)
    @IBOutlet weak var Input: UITextField!
    
    ///乱数発生(0〜19の間でランダムな数値を発生させる)
    var randInt = Int.random(in: 0 ..< 20)
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        //ガイドラベルに案内表示
        Guide.text = "0~19の数字を入れてボタンを押して下さい"
    }

    ///ボタン押下時処理
    @IBAction func TouchBtnGo(_ sender: Any) {
        //入力フィールドに入れた値を数値としてval変数に入れる
        let val = Int(Input.text!)!
        //入力値と乱数を比べて入力値が大きい場合
        if val > randInt {
            Guide.text = "もっと小さいです"
        }
        //入力値と乱数を比べて入力値が小さい場合
        else if val < randInt {
            Guide.text = "もっと大きいです"
        }
        //上記以外、等しい時
        else {
            Guide.text = "当たりです"
        }
    }
    
}

 ここの解説は、殆どしなくてよいかも知れません。

    var randInt = Int.random(in: 0 ..< 20)

ここの記述は、

    var randInt = Int.random(in: 0 ... 19)

でも良いです。この方が分かり易いかも知れません。

 次に中盤部分の何回も遊べる様にした部分です。

//
//  ViewController.swift
//  Hi and Lo
//
//  Created by 保 Tabei on 2024/09/22.
//

import UIKit

class ViewController: UIViewController {

    ///ガイドラベル
    @IBOutlet weak var Guide: UILabel!
    ///入力フィールド(0〜9を入れる)
    @IBOutlet weak var Input: UITextField!
    
    ///乱数発生(0〜9の間でランダムな数値を発生させる)
    var randInt = Int.random(in: 0 ..< 10)
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        //ガイドラベルに案内表示
        Guide.text = "0~9の数字を入れてボタンを押して下さい"
    }

    ///ボタン押下時処理
    @IBAction func TouchBtnGo(_ sender: Any) {
        //入力フィールドに入れた値を数値としてval変数に入れる
        let val = Int(Input.text!)!
        //入力値と乱数を比べて入力値が大きい場合
        if val > randInt {
            Guide.text = "もっと小さいです"
        }
        //入力値と乱数を比べて入力値が小さい場合
        else if val < randInt {
            Guide.text = "もっと大きいです"
        }
        //上記以外、等しい時
        else {
            //アラートを出す為のコントローラー設定
            let alert = UIAlertController()
            //アラートタイトル
            alert.title = "当たり"
            //アラートメッセージ
            alert.message = "当たりです"
            //アラートアクション
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            //アラートを出す
            present(alert, animated: true, completion: nil)
            //次の乱数発生
            randInt = Int.random(in: 0 ..< 10)
            //ガイドテキストの初期化
            Guide.text = "0~9の数字を入れてボタンを押して下さい"
        }
    }
    
}

 アラートを出す様にしました。今は、この手順で出すんだ程度の理解で良いと思います。41行目から50行目がアラートを出す部分です。

 52行目で、乱数を発生させています。

 54行目で、ガイドテキスト、「もっと小さいです」、「もっと大きいです」といった文言を出していて変わっている可能性があるので、最初の表示にしています。

 続いて、最後の部分です。回数を表示する様にした部分です。

//
//  ViewController.swift
//  Hi and Lo
//
//  Created by 保 Tabei on 2024/09/22.
//

import UIKit

class ViewController: UIViewController {

    ///ガイドラベル
    @IBOutlet weak var Guide: UILabel!
    ///入力フィールド(0〜9を入れる)
    @IBOutlet weak var Input: UITextField!
    ///回数表示ラベル
    @IBOutlet weak var Count: UILabel!
    
    ///乱数発生(0〜9の間でランダムな数値を発生させる)
    var randInt = Int.random(in: 0 ..< 10)
    ///回数保持、最初は0
    var cnt = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        //回数表示0回目
        Count.text = "0回目"
        //ガイドラベルに案内表示
        Guide.text = "0~9の数字を入れてボタンを押して下さい"
    }

    ///ボタン押下時処理
    @IBAction func TouchBtnGo(_ sender: Any) {
        //回数加算
        cnt = cnt + 1
        //回数表示
        Count.text = cnt.description + "回目"
        //入力フィールドに入れた値を数値としてval変数に入れる
        let val = Int(Input.text!)!
        //入力値と乱数を比べて入力値が大きい場合
        if val > randInt {
            Guide.text = "もっと小さいです"
        }
        //入力値と乱数を比べて入力値が小さい場合
        else if val < randInt {
            Guide.text = "もっと大きいです"
        }
        //上記以外、等しい時
        else {
            //アラートを出す為のコントローラー設定
            let alert = UIAlertController()
            //アラートタイトル
            alert.title = "当たり"
            //アラートメッセージ
            alert.message = "当たりです"
            //アラートアクション
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            //アラートを出す
            present(alert, animated: true, completion: nil)
            //次の乱数発生
            randInt = Int.random(in: 0 ..< 10)
            //回数初期化0に
            cnt = 0
            //ガイドテキストの初期化
            Guide.text = "0~9の数字を入れてボタンを押して下さい"
        }
    }
    
}

 22行目で、回数をカウントする変数を定義しています。型を指定せずに0を代入しているので、Int型になります。

 28行目で、回数表示しています。最初なので0回目としています。

 36行目で回数を+1しています。cnt = cnt + 1 で1加算できます。cnt += 1という書き方も出来ます。初期のSwiftではcnt++という書き方も出来たのですが、現在はこの書き方は許されなくなりました。

 38行目で回数表示をしています。cnt.description + “回目”としています。cnt + “回目” で良さそうに思えるかも知れませんが、cntはInt型でString(文字列)型で無いので、これだとエラーになってしまいます。cnt.descriptionでその数値を文字列にしたものを取得できます。

 64行目で、回数を0に戻しています。次のゲームに入る時に初期化する必要があります。通算の回数を表示するという考え方もありますが、今回は、1ゲーム内での回数としました。

目次 通常版

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA