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

2014-10-18

目次ページへ

ーーーMavericks Xcode6.1ーーー
前回の問題の答えです。
1番目の問題は、実際に試してみましょう。
まず、前回完成したものを実行してみましょう。もう既に試されていると思いますが。
さて、ここでLevelChange関数を無効にしてみましょう。セグメンテッドコントロールを選択して、右上の一番右のアイコンをクリックして、Value Changedの所の×マークをクリックします。
スクリーンショット 2014-12-09 8.30.43
以下のようになります。LevelChange関数の左側にあった◉が○に変わりました。
スクリーンショット 2014-12-09 8.30.56
reset()関数をコメント化するだけでも良いです。コメントは頭に//を付けるとコメントになり、単なる注釈になって命令と見なされなくなります。
スクリーンショット 2014-12-09 8.31.24
これで実行すると、セグメンテッドコントロールを操作しても何も変わらなくなります。1ゲーム終了すると反映されるようになります。そういう仕様でも良いとは思いますが、コントロールを変更しているのに何も変化が無いというのは、使っている人が戸惑うかと思い、LevelChange関数を加えました。
スクリーンショット 2014-12-09 8.32.07
スクリーンショット 2014-12-09 8.32.13
それでは×マークをクリックした方は、セグメンテッドコントロールを選択して、また右上の一番右のアイコンをクリックし、下図の要領で再リンクします。
スクリーンショット 2014-12-09 8.33.04
このようになったでしょうか?LevelChange関数の左側にあった○が◉に変わりました。
スクリーンショット 2014-12-09 8.33.25
2番目の問題です。
randInt = Int(arc4random_uniform(10))
randInt = Int(arc4random_uniform(20))
の部分をまとめられないでしょうか?
以下のようにまとめてみました。
スクリーンショット 2014-12-09 8.35.11
以下、問題の部分のソースコードです。

さらにGuideラベルに表示する文字もまとめられないでしょうか?
以下のようにまとめてみました。
スクリーンショット 2014-12-09 8.39.06
以下、問題の部分のソースコードです。

さらに10、20も自動的に生成するようにしました。
スクリーンショット 2014-12-09 8.45.30
以下、問題の部分のソースコードです。

これでシンプルにはなったのですが、最後の修正は余計だと僕は思います。確かにシンプルにはなったかも知れませんが、ソースコードが解りにくくなってしまいました。その一つ前までの修正に止めておいた方が良いと思います。初級を10、中級を20としましたが、その一つ前の修正なら初級は10のままで中級を50等とする事が出来ます。また、文章も設定した数値-1で自動的に入るので、設定した数値だけを変えて文章を変え忘れたという事もなくなります。
解りやすいという点では、以下のように修正するのも良いかもしれません。
スクリーンショット 2014-12-09 8.50.32
以下、問題の部分のソースコードです。

3番目の問題です。
ここでは、2番目の問題でまとめたものを元にします。もちろん、まとめていないものを改造しても良いのですが少し大変です。ヒントで示したように、Segmentsの値を2から3に変えます。そして、SegmentをSegment2にして、Titleに上級と入れます。
スクリーンショット 2014-12-09 8.53.25
ソースコードを以下のように変更します。まとめてあると、修正が楽ですね。
スクリーンショット 2014-12-09 8.54.30
以下、変更する部分のソースコードです。

実行してみます。
スクリーンショット 2014-12-09 8.56.19
さて、今までは場合分けにif文を使っていましたが、ここでswitch文を使ってみます。以下のようにしてみて下さい。if文とswitch文、適材適所で使い分けて下さい。このように同じ事をするにも色々なやり方があります。そのうちのどれが良いかは解りやすい方とするのが良いと思います。
スクリーンショット 2014-12-09 8.58.02
以下、問題の部分のソースコードです。

解りやすいという事でソースコードを以下のように変えてみました。ただ、これも数値の方が解りやすいという人もいると思います。正解は一つではありません。
スクリーンショット 2014-12-10 8.28.21
以下、問題の部分のソースコードです。

switch文にdefault:という部分があって戸惑ったかも知れません。if文と同じにするなら以下の形になります。
スクリーンショット 2014-12-10 8.31.20
以下、問題の部分のソースコードです。

ただこれも上級(あるいは2)があった方が解りやすいかもという事で最初は付けていました。本当に書き方は色々あるというのを解って頂けたのではと思います。
ーーーMavericks Xcode6.0.1ーーー

前回の問題の答えです。
1番目の問題は、実際に試してみましょう。
まず、前回完成したものを実行してみましょう。もう既に試されていると思いますが。
さて、ここでLevelChange関数を無効にしてみましょう。セグメンテッドコントロールを選択して、右上の一番右のアイコンをクリックして、Value Changedの所の×マークをクリックします。

Hi and Lo4-01

以下のようになります。LevelChange関数の左側にあった◉が○に変わりました。

Hi and Lo4-02

reset()関数をコメント化するだけでも良いです。コメントは頭に//を付けるとコメントになり、単なる注釈になって命令と見なされなくなります。

Hi and Lo4-03

これで実行すると、セグメンテッドコントロールを操作しても何も変わらなくなります。1ゲーム終了すると反映されるようになります。そういう仕様でも良いとは思いますが、コントロールを変更しているのに何も変化が無いというのは、使っている人が戸惑うかと思い、LevelChange関数を加えました。

Hi and Lo4-04

Hi and Lo4-05

それでは×マークをクリックした方は、セグメンテッドコントロールを選択して、また右上の一番右のアイコンをクリックし、下図の要領で再リンクします。

Hi and Lo4-06

このようになったでしょうか?LevelChange関数の左側にあった○が◉に変わりました。

Hi and Lo4-07

2番目の問題です。
randInt = Int(arc4random_uniform(10))
randInt = Int(arc4random_uniform(20))
の部分をまとめられないでしょうか?
以下のようにまとめてみました。

Hi and Lo4-08

さらにGuideラベルに表示する文字もまとめられないでしょうか?
以下のようにまとめてみました。

Hi and Lo4-09

さらに10、20も自動的に生成するようにしました。

Hi and Lo4-10

これでシンプルにはなったのですが、最後の修正は余計だと僕は思います。確かにシンプルにはなったかも知れませんが、ソースコードが解りにくくなってしまいました。その一つ前までの修正に止めておいた方が良いと思います。初級を10、中級を20としましたが、その一つ前の修正なら初級は10のままで中級を50等とする事が出来ます。また、文章も設定した数値-1で自動的に入るので、設定した数値だけを変えて文章を変え忘れたという事もなくなります。

解りやすいという点では、以下のように修正するのも良いかもしれません。

Hi and Lo4-11

3番目の問題です。
ここでは、2番目の問題でまとめたものを元にします。もちろん、まとめていないものを改造しても良いのですが少し大変です。ヒントで示したように、Segmentsの値を2から3に変えます。そして、SegmentをSegment2にして、Titleに上級と入れます。

Hi and Lo4-12

ソースコードを以下のように変更します。まとめてあると、修正が楽ですね。

Hi and Lo4-13

実行してみます。

Hi and Lo4-14

さて、今までは場合分けにif文を使っていましたが、ここでswitch文を使ってみます。以下のようにしてみて下さい。if文とswitch文、適材適所で使い分けて下さい。このように同じ事をするにも色々なやり方があります。そのうちのどれが良いかは解りやすい方とするのが良いと思います。

Hi and Lo4-15

解りやすいという事でソースコードを以下のように変えてみました。ただ、これも数値の方が解りやすいという人もいると思います。正解は一つではありません。

Hi and Lo4-16

switch文にdefault:という部分があって戸惑ったかも知れません。if文と同じにするなら以下の形になります。

Hi and Lo4-17

ただこれも上級(あるいは2)があった方が解りやすいかもという事で最初は付けていました。本当に書き方は色々あるというのを解って頂けたのではと思います。

目次ページへ

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