新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ゲーム内での回数としました。