こんにちは(^O^)

今日は前回のプログラムの説明をしたいと思います。

難しいことはわからないので、
自分がわかる範囲でわかりやすくをモットーにしていきたいと思います(°∀°)b

では早速、はじめていきましょう。


 typedef enum{
       PlayStateChoose, //パネルの選択という状態
       PlayStateChange //パネルの交換という状態
 } PlayState;

 @interface PlayViewController : UIViewController {

       IBOutlet UIImageView *backView;
       IBOutlet UIImageView *frontView;
       IBOutlet UILabel *scoreLabel;
       IBOutlet UILabel *timeLabel;

10       PlayState state;
11       BOOL isFinished;
12 }

13 @end


まず、1~4の列挙体の宣言の部分ははなにかというと、
コメントに書いてあるとおり、
PlayStateChoose はパネルの選択という状態
PlayStateChange はパネルの交換という状態
で、10ではそれを使うために、PlayState型の変数stateを用意してます。

必要なときにstateを設定したり、参照したりしましょうね(^O^)


続きまして、BOOL型の変数のisFinishedは、このゲームは時間制限がありますので、
残り時間がなくなったときにここに「時間切れ」をあらわす値をいれてゲームが終了したことがわかるようにします。
時間がなくなったときに「YES」にします。


 - (void)viewWillAppear:(BOOL)animated{
       srand((unsigned)time(NULL));
       state = PlayStateChoose;
       isFinished = NO;
       for(int y=0;y<6;y++){
             for(int x=0;x<6;x++){
                CALayer *layer = [CALayer layer];
                layer.bounds = CGRectMake(0,0,42,42);
                layer.position = CGPointMake(59+(42+1)*x,53+(42+1)*y);

10                int dice = rand() % 5;
11                NSString *layerName = [NSString stringWithFormat:@"panel-%d",dice];
12                NSString *imageName = [layerName stringByAppendingPathExtension:@"png"];
13                layer.contents = (id)[UIImage imageNamed:imageName].CGImage;
14                layer.name = layerName;

15                [backView.layer addSublayer:layer];
16                }
17          }
18 }


さて、次はviewWillAppear:メソッドです。

2 のsrand~っていうのは、他の言語でもよく使われている。乱数を発生させるもの。
現在時間をtime()で取得して、乱数を作っています。毎回パネルをランダムに置くために使います。
3 は、さっき言ってたパネルの状態をあらわ数変数「state」は最初なので、パネルを選択するという状態にしてます。
 isFinished は当然始めたばかりなので「Flase」です。

5,6は縦方向と横方向にパネルを敷き詰めていく、ループになってます。
7~15は実際にパネルを置いていってる部分です。
そのうち、7~9はCALayer クラスのlayer メソッドを使って、レイヤを作成していて、
はその位置と大きさをを設定してます。位置のx座標とy座標ははあとから設定していくので0にしてます。
パネルの画像は42ピクセルの正方形でしたね。それを設定してます。
はループの変数x、yを使ってlayerpositionプロパティ(中心の座標)を設定していってます。
10で0~4の5種類の数字がランダムで生成されるので、
11では、"panel-1"やら、"panel-4"とかの文字列が作られるので、
12pngというのを見ればわかると思いますが、対応する画像ファイル名を生成してます。
13ではそれをもとにして、UIImage オブジェクトを作って、layercontentsに設定しています。
14で最後にレイヤの名前を設定します。初期ではレイヤの名前が付いていないようなので、ここで設定しています。
あとで、隣どおしが同じパネルかどうかチェックするためにつけてます。
17はちょっと難しいんですが、backViewはマス目があるビューです。
backViewlayerに対して、addSublayerメソッドを呼び出し、新しく作成したレイヤを追加することで表示できるようになるみたいです。


なんどかパネルを敷き詰めることが出来ました。
乱数を使ってるんで起動ごとに、パネルの配置がいろいろかわってることがわかると思います。

次回は、パネルを選択したり交換できるようになればいいなと思ってます。

次回もよろしくです。

ランキングに参加しています。下のクリックお願いしますー(*゚ー゚*)

にほんブログ村 IT技術ブログ iPhoneアプリ開発へ

にほんブログ村 携帯ブログ iPhoneへ