0
    お待たせしました
    前回、キリンさんの食べたリンゴの個数を
    カウントできるようになりました

    ただ、カウントできたはいいですが、
    それでどうなるの?...って感じですね

    [今回の内容]
    ■ゲーム終了のボタンを作る
    ■ゲーム終了の条件
    ■ゲームを初期化する

    ということで今回は、
    「食べたリンゴの個数でゲームを終了させる、そしてもう一度スタート...」
    とゲームを繰り返し遊べるようにしてみましょう

    では、ゲーム終了からスタートの状態へ移動するためのボタンを作ります

    ■ゲーム終了のボタンを作る

    まずは、TestGameViewController.h の中から

    UIButton *moveLBT, *moveRBT, *startBT, *finishBT;

    ゲーム終了からゲームスタートに移るためのボタン finishBT を用意します

    .h

    次に、TestGameViewController.m- (void)loadView に移動し、
    いつものようにボタンを追加しましょう

    startBT = [[UIButton alloc] initWithFrame:CGRectMake(100.0, 300.0, 120.0, 80.0)];
    [startBT setTitle:@"START" forState:UIControlStateNormal];
    [startBT setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [startBT addTarget:self action:@selector(start_touchUp:) forControlEvents:UIControlEventTouchUpInside];
    startBT.backgroundColor = [UIColor blackColor];
    [self.view addSubview:startBT];

    finishBT = [[UIButton alloc] initWithFrame:CGRectMake(100.0, 300.0, 120.0, 80.0)];
    [finishBT setTitle:@"FINISH" forState:UIControlStateNormal];
    [finishBT setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [finishBT addTarget:self action:@selector(finish_touchUp:) forControlEvents:UIControlEventTouchUpInside];
    finishBT.backgroundColor = [UIColor grayColor];
    [self.view addSubview:finishBT];

    startBTとほぼ同じようにボタンを作成します
    異なる部分は、青い部分です
    ボタンの色をグレー(grayColor)にして、
    ボタンを押したときのアクションを finish_touchUp としています
    アクションの部分は後で記述します

    button

    ボタンを作ったら dealloc しましょう

    - (void)dealloc
    {
        [scoreLB release];
        [scoreIV release];
       
        [finishBT release];
        [startBT release];
        [moveRBT release];
        [moveLBT release];
       
        [tree1IV release];
        [tree2IV release];
        [apple1IV release];
        [apple2IV release];
       
        [lionIV release];
        [kirinIV release];
        [greenIV release];
       
        [super dealloc];
    }

    dealloc

    そして、ふたたび - (void)loadView にもどり、
    finishBT がはじめから見えていては問題があるので、
    赤い一行を追加して、finishBT をかくしておきます

    CGPoint center;
    center = kirinIV.center;
    kirinX = center.x;
    kirinY = center.y;

    center = lionIV.center;
    lionX = center.x;
    lionY = center.y;
       
    score = 0;
       
    finishBT.hidden = TRUE;

    hidden

    ボタンの準備は整いましたので、
    ゲームの内容に移りましょう

    ■ゲーム終了の条件

    では、ゲームの終了条件を
    キリンさんがリンゴを10個食べたらゲームを終了する
    ということにしましょう

    「キリンがリンゴを食べる」記述は、
    - (void)drawFrame の中の「score++」の部分です
    ということで「score++」の直後で、
    「score(リンゴの数)=10」になったら終了としましょう

    そして、ゲームを終了させるために、startFlag を使います
    startFlag は、スタートボタンを押したときに TRUE になっています
    ですから、ゲームを終了するときは、逆に FALSE とします

    if(moveLFlag == TRUE){
         CGRect frame = kirinIV.frame;
         frame.origin.x -= 1.0;
         if(frame.origin.x <= 40.0){
              frame.origin.x = 40.0;
              if(apple1IV.hidden == FALSE){
                   apple1IV.hidden = TRUE;
                   score++;
                   if(score == 10){
                        finishBT.hidden = FALSE;
                        startFlag = FALSE;
                   }
                   scoreLB.text = [NSString stringWithFormat:@"%d ", score];
                   if(apple2IV.hidden == TRUE) apple2IV.hidden = FALSE;
              }
         }
         [kirinIV setFrame:frame];

         //NSLog(@"MOVE(L):%.1f", frame.origin.x);

         CGPoint center = kirinIV.center;
         kirinX = center.x;
         kirinY = center.y;
    }

    if(moveRFlag == TRUE){
         CGRect frame = kirinIV.frame;
         frame.origin.x += 1.0;
         if(frame.origin.x >= 240.0){
              frame.origin.x = 240.0;
              if(apple2IV.hidden == FALSE){
                   apple2IV.hidden = TRUE;
                   score++;
                   if(score == 10){
                        finishBT.hidden = FALSE;
                        startFlag = FALSE;
                   }               scoreLB.text = [NSString stringWithFormat:@"%d ", score];
                   if(apple1IV.hidden == TRUE) apple1IV.hidden = FALSE;
              }
         }
         [kirinIV setFrame:frame];

         //NSLog(@"MOVE(R):%.1f", frame.origin.x);

         CGPoint center = kirinIV.center;
         kirinX = center.x;
         kirinY = center.y;
    }

    「score++」の下に、if の文を追加します
    また、「score++」は二箇所にあります
    食べたリンゴの数が10個になるのは
    ・左のリンゴを食べたとき
    ・右のリンゴを食べたとき
    の2パターンありますので、どちらにも同じ内容を記述します

    apple=10

    これで、リンゴを10個食べたら、
    finishBT が表示され、startFlag が FALSE になりアニメーションがとまるはずです

    ...

    あとひとつ、記述しなければいけない部分があります
    finishBT を押したときのアクションです
    スタートボタンを押したときのアクションの下に追加しましょう

    - (void) start_touchUp:(id)sender
    {   
        startFlag = TRUE;
        startBT.hidden = TRUE;
    }
    - (void) finish_touchUp:(id)sender
    {   
        finishBT.hidden = TRUE;
        startBT.hidden = FALSE;
    }

    赤い部分を追加しましたが、fiishBT を押したら、
    finishBT を隠す
    startBT を表示する
    となります

    finish

    では、いよいよ[Run]しましょう!

    ゲームをスタートしてリンゴを10個食べてみてください

    finish

    リンゴの数が10個になった瞬間に
    FINISH と書かれたボタンが出てきて、
    アニメーションがストップしましたか?

    そして、FINISHボタンを押すと、
    スタートボタンが表示されますね

    start

    それでは、
    スタートボタンを押して新しくゲームをはじめてみましょう...

    ... あれ?

    キリンさんとライオンさんの位置がそのままだし、
    リンゴが一個表示されていないし、
    リンゴの個数が10のまま...
    ゲームが終了したときと同じ状態のままです

    なので、ゲームを新しく始める前にゲーム内容を「初期化」しないといけません

    ■ゲームを初期化する

    なにを最初の内容に戻せば良いのか?
    ・キリンさんを最初の位置に移動
    ・ライオンさんも最初の位置に移動
    ・リンゴの木にリンゴを2つ表示させる
    ・リンゴの数をリセットし0個にする
    以上の4つのことを、finishBT を押したとき...つまり
    - (void) finish_touchUp:(id)sender の中で行うことにしましょう

    - (void) finish_touchUp:(id)sender
    {   
        finishBT.hidden = TRUE;
        startBT.hidden = FALSE;
       
        score = 0;
        scoreLB.text = [NSString stringWithFormat:@"%d ", score];
       
        kirinIV.frame = CGRectMake(60.0, 220.0, 40.0, 40.0);
        lionIV.frame = CGRectMake(140.0, 0.0, 40.0, 40.0);
       
        apple1IV.hidden = FALSE;
        apple2IV.hidden = FALSE;
    }

    赤い部分を追加しています
    1行目:スコアを0にする
    2行目:スコアをラベルに代入
    3行目:キリンさんを最初の位置にセット
    4行目:ライオンさんを最初の位置にセット
    5行目:左のリンゴを表示
    6行目:右のリンゴを表示
    となっています

    initialize

    では、確認の[Run]!!

    リンゴを10個食べて、

    finish

    FINISHボタンを押すと... 初期状態にセットされました〜!

    initialize

    そして、スタートボタンを押すと???
    新しくゲームを再開できましたね

    ヤッホ〜〜〜〜〜!!

    ...

    さて次回は?

    今回非常に影の薄かった百獣の王ライオンさん
    そのライオンさんのするどいキバを
    皆様にご覧いただくことといたしましょう...



     

    コメント
    コメントする








       
    この記事のトラックバックURL
    トラックバック

    Calendar
    S M T W T F S
        123
    45678910
    11121314151617
    18192021222324
    25262728   
    << February 2018 >>
    My Apps
    有料アプリ

    無料アプリ

    Selected entries
    Categories
    AdSense
    Sponsored Links
    Archives
    Recent comment
    Links
    Profile
    Search this site.
    Others
    Mobile
    qrcode
    powered
    無料ブログ作成サービス JUGEM