新Swiftで行こう…第9回「ハイアンドローゲーム6」 田部井保
さて、今まで無視して来たのですが、TextFieldに何も入れずにButtonを押したり、アルファベットを入れてButtonを押すと エラーになります。
let val = Int(Input.text!)!
ここで、TextFieldに入っている文字列を無理矢理数値に変えているので、数値以外の文字や空白だとエラーになってしまいます。最後の”!”を取れば、その部分ではエラーにならなくなります。ここは、僕の勘違いだったのですが、そうすると今度は型が一致しないというエラーが出て実行出来なくなると思い込んでいたのですが、そんな事はなかったです。最初から”!”を取っていれば良かったです。
これを取って、何も入れないでボタンを押した時、又はアルファベットを入力してボタンを押した時に変数valには、nilという特別な値が入ります。そこでnilかどうか判断して、nilだったら「数値を入れて下さい」と表示するようにします。ここで等しい事を表すのに「==」を使いました。数学とは異なってしまいますがC言語の流れを汲むプログラミング言語では、「=」は変数に値を代入するという意味で使い、等しい事を表すのには「==」を使います。
@IBAction func TouchBtnGo(_ sender: Any) {
cnt = cnt + 1
Count.text = cnt.description + "回目"
let val = Int(Input.text!)
if val == nil {
Guide.text = "数値を入れて下さい"
}
else if val! > randInt {
Guide.text = "もっと小さいです"
}
else if val! < randInt {
Guide.text = "もっと大きいです"
}
else {
Guide.text = "当たりです"
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)
}
}
しかし、これだと何も入れないでボタンを押した時、又はアルファベットを入力してボタンを押した時にも1回カウントされてしまい、あまり良くありません。数値以外を入れた時は、数値をいれるように促し、カウントしないのが良いと思います。そこでカウント部分を移します。
これで大分良くなったと思います。 以下問題の部分のソースコードです。
@IBAction func TouchBtnGo(_ sender: Any) {
let val = Int(Input.text!)
if val == nil {
Guide.text = "数値を入れて下さい"
}
else {
cnt = cnt + 1
Count.text = cnt.description + "回目"
if val! > randInt {
Guide.text = "もっと小さいです"
}
else if val! < randInt {
Guide.text = "もっと大きいです"
}
else {
Guide.text = "当たりです"
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)
}
}
}
さて、ここで一旦、ハイアンドローゲームは終了します。やろうと思えば、3回ゲームをしてかかった回数の合計を出し、それの一番小さな値を保持しておき、最短レコードとして記録を残す。または、3回置きに嘘をついて(本当は小さいのに大きいですと出す。大きい時も同様。当たった時だけは当たりとする)、それが最初からなのか、2回目からなのか、3回目からなのかが判らないので、ゲームの難易度が上がるというゲームにする等、アイデア次第で色々出来ると思います。最初の記録保持は今の知識では難しいですが、3回置きに嘘をつくほうは、何とか出来るかも知れません(変数の扱いがまだ難しいかな)。
いずれにせよ、次回は電子サイコロ、そしてその次からトランプに入ろうと思います。まず電子サイコロですが、ハイアンドローゲームの知識があれば作れると思います。ボタンを押すとただ単に1〜6の数値を出すというものです。皆さん、作ってみて下さい。