じゃんけんゲームを作ってみた。

タイトルは独自に作りましたみたいなタイトルですが、まだ作れる訳もなく・・・
Via:iPhoneアプリを作ってみよう(Xcode4編)第1回:じゃんけんゲーム
こちらを参考にさせていただきました。

Xcodeは4.3.3です。
途中の処理を省いて画像ボタンを使用しています。


「single view」で新規にプロジェクトを作ります。


「product name」をjyanken、「Storyboard」「ARC」にチェックを入れています。

とりあえず、パーツを配置

画像をxcodeに取り込みます。(画像は勝手にですが、お借りしています)
画像をディスクトップ等にダウンロードします(ぐー、ちょき、ぱー、それぞれ)
ディスクトップとxcodeの両方を開き、「Supportting Files」にドラックします。別グループを作ってもOK。

こんな画面がでるので、Finish。

追加されるとこんな感じになります。

ボタンに対して画像を入れます。
ボタンをクリックすると、右側のプロパティ欄にボタンのプロパティが表示されるので、image欄に表示されてる画像を指定します。

サイズが合わないので、潰れています。

サイズを調整します。縦72に3つとも変更。

コードを書きます。

真ん中のエディタを選んで、2画面表示にして、StoryboardとViewContoroller.hを表示して、ラベルをドラック(副キーが有効なら、右クリックでドラック。無効ならOption+クリックでドラック)します。
Labelの大きさ等はプロパティ欄で調整。imageも正方形に調整。


ラベルとimageは表示なのでoutlet、3つの画像ボタンはクリックアクションが入るのでoutletの他にActionも定義します。
途中で「もう一回」ボタンを忘れいることに気がついたので、追加で設定しました。

「ViewController.m」に動きを入れます。
「ぐー」の処理だけ入れました。処理内容は参考サイトと同じです。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize messageLabel;
@synthesize kekkaLabel;
@synthesize aiteImg;
@synthesize guBtnLabel;
@synthesize chBtnLabel;
@synthesize paBtnLabel;
@synthesize againLabel;

UIImage *gu_img;
UIImage *ch_img;
UIImage *pa_img;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
   
    kekkaLabel.hidden = YES;
    againLabel.hidden = YES;
   
    gu_img = [UIImage imageNamed:@"gu.png"];
    ch_img = [UIImage imageNamed:@"ch.png"];
    pa_img = [UIImage imageNamed:@"pa.png"];
   
    [kekkaLabel setFont:[UIFont boldSystemFontOfSize:30.0f]];
    [kekkaLabel setTextColor:[UIColor blueColor]];
}

- (void)viewDidUnload
{
    [self setKekkaLabel:nil];
    [self setAiteImg:nil];
    [self setMessageLabel:nil];
    [self setGuBtnLabel:nil];
    [self setChBtnLabel:nil];
    [self setPaBtnLabel:nil];
    [self setAgainLabel:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (IBAction)guBtn:(id)sender {
    messageLabel.text = @"じゃんけん・・・ぽん!";
    guBtnLabel.hidden = NO;
    chBtnLabel.hidden = YES;
    paBtnLabel.hidden = YES;
    aiteImg.hidden = NO;
    kekkaLabel.hidden = NO;
   
    NSInteger kekka = arc4random() % 3;
    if (kekka == 0) {
        [aiteImg setImage:gu_img];
        kekkaLabel.text = @"あいこで・・・";
        chBtnLabel.hidden = NO;
        paBtnLabel.hidden = NO;
        againLabel.hidden = YES;
        [kekkaLabel setTextColor:[UIColor blackColor]];
    } else if (kekka == 1) {
        [aiteImg setImage:ch_img];
        kekkaLabel.text = @"あなたの勝ち!";
        againLabel.hidden = NO;
        [kekkaLabel setTextColor:[UIColor blueColor]];
    } else {
        [aiteImg setImage:pa_img];
        kekkaLabel.text = @"あなたの負け!";
        againLabel.hidden = NO;
        [kekkaLabel setTextColor:[UIColor redColor]];
    }
}

- (IBAction)chBtn:(id)sender {
}

- (IBAction)paBtn:(id)sender {
}

- (IBAction)againBtn:(id)sender {
    guBtnLabel.hidden = NO;
    chBtnLabel.hidden = NO;
    paBtnLabel.hidden = NO;
    messageLabel.text = @"じゃんけん・・・";
    [aiteImg setImage:nil];
    kekkaLabel.text = @"";
    againLabel.hidden = YES;
}
@end

コードの書き方の悩みどころ

初心者の私として、コードの書き方の悩みどころは、 [ ] の使いどころ。

[aiteImg setImage:gu_img];

これと

aiteImg.image = gu_img;

これは同じ結果になるけれど、どちらが正解?
どちらも正解なんだと思うけど、ソースの見た目も気になる。
値を入れるときは「=」に統一する。とかした方がいいのかな。

ちなみに、これも同じこと。

kekkaLabel.text = @"あいこで・・・";
[kekkaLabel setText:@"あいこで・・・"];

[chBtnLabel setHidden:NO];
chBtnLabel.hidden = NO;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)