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

目次 通常版

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

//
//  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!
    ///レベル指定セグメンテッドコントロール
    @IBOutlet weak var Level: UISegmentedControl!
    
    ///乱数保持変数
    var randInt = 0
    ///回数保持、最初は0
    var cnt = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        //初期設定処理
        reset()
    }

    ///初期設定処理、ゲーム開始状態にする
    func reset()
    {
        //初級の場合
        if Level.selectedSegmentIndex == 0 {
            //乱数発生 0〜9
            randInt = Int.random(in: 0 ..< 10)
            //ガイドラベル初期化 0〜9
            Guide.text = "0~9の数字を入れてボタンを押して下さい"
        //中級の場合
        } else {
            //乱数発生 0〜19
            randInt = Int.random(in: 0 ..< 20)
            //ガイドラベル初期化 0〜19
            Guide.text = "0~19の数字を入れてボタンを押して下さい"
        }
        //回数初期化0に
        cnt = 0
        //回数表示0回目
        Count.text = "0回目"
    }

    ///レベル変更時処理
    @IBAction func LevelChange(_ sender: Any) {
        //初期設定処理
        reset()
    }
    
    ///ボタン押下時処理
    @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 {
            Guide.text = "当たりです"
            //OKボタンの表示と押下時処理記述
            //押下時reset関数を呼ぶ
            let okAction = UIAlertAction(title: "OK", style: .default)
            { (action) in
                self.reset()
            }
            //アラートコントローラー定義
            //タイトル、メッセージをまとめた
            //スタイルはアラート
            let alert = UIAlertController(title: "当たり", message: "当たりです", preferredStyle: .alert)
            //アラートアクション
            alert.addAction(okAction)
            //アラートを出す
            present(alert, animated: true, completion: nil)
        }
    }
    
}

 52行目は、今回reset関数の中に入れる事が出来る様になりました。今までは、reset関数に入れてしまうと、当たった時、すぐに記述が0回目となってしまって、何回で当たったかが分からなくなってしまっていました。

 79行目の”当たりです”の表示ですが、ここも以前の場合だと、すぐに”0~9の数字を入れてボタンを押して下さい”等となってしまい、ここで出しても意味がありませんでした。今回reset関数がOKボタンを押してから起動する様になった為、意味が出てきました。

 82行目〜85行目が、

alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))

以前addActionの中に書いていたものを表に出したものです。OKボタンを押した後にreset関数を起動する様にしています。

 89行目が

            let alert = UIAlertController()
            alert.title = "当たり"
            alert.message = "当たりです"

以前、この様に書いていた部分をまとめたものです。それ以外に

    preferredStyle: .alert

とする事で、アラートの出し方を以前とは変えています。

    preferredStyle: .actionSheet

とすれば、以前と同じ形になります。

 91行目は、以前()内に定義も記述していましたが、今回82〜85行目に書いたものを指定する様にしました。

目次 通常版

コメントを残す

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

CAPTCHA