0
    キリンさんはリンゴを10個食べて満腹中枢が刺激されました
    しかし、ライオンさんは空腹でフラフラです

    ライオンさんのキバはキリンさんに当たっているはずなのに
    キリンさんはへっちゃらで、リンゴを食べ続けています
    ライオンさんのプライドはズタズタです

    ということで、
    今回はライオンさんのプライドを取り戻すための記述をしていきます

    [今回の内容]
    ■結果表示用ラベルを作る
    ■キリンさんの勝ち!!
    ■キリンさんの負け...
    ■キリンさんの復活

    現在の状態では、
    「キリンさんがリンゴを10個食べたときゲームが終了」します

    これでは、ライオンさんの立場がありませんので、
    ゲーム終了にもうひとつ条件をつけます

    その条件を
    「キリンさんとライオンさんがぶつかったらゲームを終了させる」
    としましょう
    そらもう一撃です!ライオンさんの一撃でゲームは終了します

    そのふたつの条件をならべますね
    ・キリンさんが10個食べる ---> あなたの勝ち!!
    ・ライオンさんとぶつかる ---> あなたの負け...

    ...

    ■結果表示用ラベルを作る

    それでは、プログラムに手を加えていきましょう
    まずは、TestGameViewController.h にラベルをひとつ加えます

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

    UILabel *scoreLB, *resultLB;

    BOOL moveLFlag, moveRFlag, startFlag;

    結果を表示するためのラベルです

    .h

    次は、TestGameViewController.m に移動して、
    - (void)loadView の中でいつものようにラベルを作りましょう

    scoreLB = [[UILabel alloc] initWithFrame:CGRectMake(235.0, 5.0, 80.0, 40.0)];
    scoreLB.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.2];
    scoreLB.textColor = [UIColor whiteColor];
    scoreLB.textAlignment = UITextAlignmentRight;
    scoreLB.text = @"0 ";
    scoreLB.font = [UIFont fontWithName:@"Helvetica" size:26];
    scoreLB.layer.borderColor = [UIColor whiteColor].CGColor;
    scoreLB.layer.borderWidth = 1;
    [self.view addSubview:scoreLB];

    resultLB = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 160.0, 320.0, 40.0)];
    resultLB.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0];
    resultLB.textColor = [UIColor whiteColor];
    resultLB.textAlignment = UITextAlignmentCenter;
    resultLB.text = @"RESULT";
    resultLB.font = [UIFont fontWithName:@"Helvetica" size:32];
    [self.view addSubview:resultLB];

    赤い部分結果ラベルについての記述です
    スコアラベルと違う部分は青くしています

    変更部分は、
    ラベルの位置とサイズラベルの色は透明文字は中央揃え
    表示文字は"RESULT"文字のサイズを大きく
    そして、
    今回はラベルの枠は使用しないので、
    枠に関する記述は消しています

    そして、前回作った、終了ボタン(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;
    resultLB.hidden = TRUE;

    .m


    それから、ラベルを作ったら dealloc ですね

    [resultLB release];
    [scoreLB release];
    [scoreIV release];

    dealloc

    ...

    ■キリンさんの勝ち!!

    それでは、まずは「あなたの勝ち!!」のときに
    ラベルを表示する記述をしてみましょう

    - (void)drawFrame の中に記述します
    前回加えた終了条件のところに2行ずつ付け加えるだけです

    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;
                    resultLB.text = @"You Win!!";
                    resultLB.hidden = 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;
                    resultLB.text = @"You Win!!";
                    resultLB.hidden = 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;
    }


    加えた二行は、
    1行目:ラベルの文字を"You Win!!"にする
    2行目:ラベルを見えるようにする
    です
    簡単ですね

    win

    ...

    ■キリンさんの負け...

    それでは、「あなたの負け...」の場合を記述しましょう

    負けるときは、ライオンさんにぶつかったときなので、
    当たり判定のところに記述します

    //Atari
    float kyori = (kirinX-lionX)*(kirinX-lionX) + (kirinY-lionY)*(kirinY-lionY);
    if(kyori < 40.0*40.0){
         kirinIV.backgroundColor = [UIColor redColor];

         finishBT.hidden = FALSE;
         startFlag = FALSE;
         resultLB.text = @"You Lose...";
         resultLB.hidden = FALSE;
    }
    else {
         kirinIV.backgroundColor = [UIColor yellowColor];
    }

    以前に、ライオンさんとぶつかったキリンさんの色を赤くする
    記述をしましたが、そこに先ほど加えた二行とその上の二行の
    計4行を追加します
    で、ラベルの内容は"You Lose..."としています

    lose

    それから、終了ボタンを押したときには、終了ボタンと同様に
    結果ラベルを消さないといけないので
    finishBT を押した動作のところに「結果ラベルを消す」一行を追加します
    ゲームの初期化の部分ですね

    - (void) finish_touchUp:(id)sender
    {   
        finishBT.hidden = TRUE;
        resultLB.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;
    }

    initialize

    それでは、[Run]しましょう
    ・リンゴを10個食べたとき
    ・ライオンさんとぶつかったとき
    のふたつの結果を出してみてください

    Win と
    win

    Lose...
    lose

    予定通りの結果が得られましたか?

    ...

    でも、ひとつなんかモヤモヤするところがありますね?

    ないですか?

    キリンさんが... やられたあと... ゲームをはじめようとすると...
    すでに... 真っ赤に... 染まって...

    red

    いますね!

    かわいそうな、痛々しいすがたです

    ■キリンさんの復活

    これはゲームを初期化するところで何とかしないといけません
    ということで一行追加します

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

        score = 0;
        scoreLB.text = [NSString stringWithFormat:@"%d ", score];

        kirinIV.backgroundColor = [UIColor yellowColor];

        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;
    }

    初期化でキリンさんの色を黄色にしています

    yellow

    で、ひとつ不要になった部分があるので、
    そこを削除します

    当たり判定のところの、キリンさんを黄色にするところです
    以下の緑の3行は、必要なくなったので消しておきます


    //Atari
    float kyori = (kirinX-lionX)*(kirinX-lionX) + (kirinY-lionY)*(kirinY-lionY);
    if(kyori < 40.0*40.0){
         kirinIV.backgroundColor = [UIColor redColor];

         finishBT.hidden = FALSE;
         startFlag = FALSE;
         resultLB.text = @"You Lose...";
         resultLB.hidden = FALSE;
    }
    else {
         kirinIV.backgroundColor = [UIColor yellowColor];
    }

    delete

    それでは、仕上げの[Run]!!

    やられても...
    lose


    復活!!
    yellow

    いかがでしょうか?
    ライオンさんにやられたキリンさんは元気に復活しましたか?
    良かったですね

    ...

    さて次回は?

    次回は、いよいよお待ちかねの「画像」を表示させましょう

    お楽しみに!!




    【送料無料】iPhoneアプリ設計の極意

    【送料無料】iPhoneアプリ設計の極意
    価格:3,570円(税込、送料別)




    JUGEMテーマ:iPhone・iPadアプリ開発
     

    コメント
    コメントする








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

    Calendar
    S M T W T F S
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
    << May 2018 >>
    My Apps
    有料アプリ

    無料アプリ

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