じゃんけんアプリ

ドキュメント読むのも飽きてしまったしまったので下記参考にしてじゃんけんアプリを作成。

iPhoneアプリ開発入門
→StoryBoardを使って開発

iPhoneアプリを作ってみよう(Xcode4編)第1回:じゃんけんゲーム
スクラッチで開発

StoryBoardの完成図
f:id:tya_ko_suke:20130506195153p:plain

ソースコード

#import "testViewController.h"

@interface testViewController ()

@end

@implementation testViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    kekka.hidden = YES;
    aite_no_te.hidden = YES;
    restart.hidden = YES;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)junkeDidPush:(UIButton *)sender {
    kekka.hidden = NO;
    aite_no_te.hidden = NO;
    int aite_no_te_num = arc4random()%3;
    if(aite_no_te_num == 0){
        aite_no_te.text = @"石";
    }
    else if(aite_no_te_num == 1) {
        aite_no_te.text = @"はさみ";
    }
    else if(aite_no_te_num == 2) {
        aite_no_te.text = @"紙";
    }
    
    int jibun_no_te_num = sender.tag;
    if(jibun_no_te_num == 0) {
        tyoki.hidden = YES;
        paa.hidden = YES;
    }
    else if(jibun_no_te_num == 1) {
        guu.hidden = YES;
        paa.hidden = YES;
    }
    else if(jibun_no_te_num == 2) {
        guu.hidden = YES;
        tyoki.hidden = YES;
    }
    if(aite_no_te_num == jibun_no_te_num) {
        kekka.text = @"あいこ";
    }
    else if(aite_no_te_num == 0 && jibun_no_te_num == 2) {
        kekka.text = @"勝ち";
    }
    else if(aite_no_te_num == 1 && jibun_no_te_num == 0) {
        kekka.text = @"勝ち";
    }
    else if(aite_no_te_num == 2 && jibun_no_te_num == 1) {
        kekka.text = @"勝ち";
    }
    else {
        kekka.text = @"負け";
    }
    restart.hidden = NO;
}

- (IBAction)restartDidPush:(UIButton *)sender {
    kekka.hidden = YES;
    aite_no_te.hidden = YES;
    restart.hidden = YES;
    guu.hidden = NO;
    tyoki.hidden = NO;
    paa.hidden = NO;
}

@end

Xcodeを起動したところからスタート。

1 プロジェクトの作成

[File]->[New]->[Project...]で新規にプロジェクトを作成

Single View Applicationを選択、[Next]で次へ。
f:id:tya_ko_suke:20130506202251p:plain

Product NameとClass Prefixにjankenと入力。
最初からチェックが入っていると思うけれども、Use StoryBoardsにチェックを入れる。
最初に作ったときはClass Prefixを変えておらず、前に使った残りなのかtestが入っていて全部test〜になってしまった。
Use Automatic Reference Countingは「iOSの技術の概要」によると

Objective-Cのオブジェクトのライフサイクル管理処理を容易にする、コンパイラレベルの機能です。
オブジェクトをいつ獲得、解放するか、開発者が意識して管理する代わりに、ARCがオブジェクトの
ライフサイクル管理に必要な事項を評価し、コンパイル時に、自動的に適切なメソッド呼び出しを挿入します。

というものらしいのでこの文が分からない人はチェックを入れときましょう。
[Next]で次へ。
f:id:tya_ko_suke:20130506202759p:plain

[Create]で次へ。
プロジェクトが生成される。

2 起動画面を作成

2-1 背景の設定

StoryBoard(MainStoryBoard.storyboard)を開く。
f:id:tya_ko_suke:20130506204232p:plain

右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からImage Viewを選択しJanken View Controllerへドラッグ。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のImage ViewのImageからDefault.pngを選択。
f:id:tya_ko_suke:20130506204956p:plain

2-2 オブジェクトの配置

右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からLabelを選択しJanken View Controllerへドラッグ。
Labelのサイズ変更。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のLabelのText,Color,Fontの値を変更。
f:id:tya_ko_suke:20130506210552p:plain
右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からRound Rect Buttonを選択しJanken View Controllerへドラッグ。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のButtonの値を変更。
f:id:tya_ko_suke:20130506210900p:plain

3 ゲーム画面の作成

3-1 背景の設定

2-1 背景の設定を参照

3-2 起動画面とゲーム画面の接続

起動画面の開始ボタンをクリック。
Controlを押しながらゲーム画面へドラッグ。
ポップアップからModalを選択。
f:id:tya_ko_suke:20130506212849p:plain

3-3 オブジェクトの配置(タイトル、じゃんけんボタン)

右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からLabelを選択しJanken View Controllerへドラッグ。
Labelのサイズ変更。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のLabelのText,Color,Fontの値を変更。
右下のf:id:tya_ko_suke:20130506205224p:plainをクリック。
Objectsの中からRound Rect Buttonを選択しJanken View Controllerへドラッグ。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のButtonの値を変更。
※グー、チョキ、パーの3つ作成
f:id:tya_ko_suke:20130506213332p:plain

3-4 オブジェクトの配置(相手の手、結果)

下記の図のように配置
f:id:tya_ko_suke:20130506215226p:plain

4 じゃんけんプログラムの作成

4-1 ViewControllerとプログラムの紐付け

右上のf:id:tya_ko_suke:20130506220137p:plainをクリック。
CustomClassのClassにjankenViewControllerをセット。
f:id:tya_ko_suke:20130506204848p:plainをクリック。
隣にソースコード(ヘッダファイル)が表示される。

#import <UIKit/UIKit.h>

@interface jankenViewController : UIViewController
@end

@interfaceと@endの間に記載。
【StoryBoradを使う場合】
追加したいオブジェクトを選択し@interfaceと@endの間にContorolを押しながらドラッグ。
ポップアップのNameを変更
【スクラッチ】
下記のソースコード記載後に手動でOutletと紐付け。
jankenViewControllerをクリック後f:id:tya_ko_suke:20130506223010p:plainをクリック。
Outletsからドラッグで紐付けたいオブジェクトと繋げる。

#import <UIKit/UIKit.h>

@interface jankenViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *guu;
@property (weak, nonatomic) IBOutlet UIButton *tyoki;
@property (weak, nonatomic) IBOutlet UIButton *paa;
@property (weak, nonatomic) IBOutlet UILabel *aite_no_te;
@property (weak, nonatomic) IBOutlet UILabel *kekka;

@end

f:id:tya_ko_suke:20130506222929p:plainf:id:tya_ko_suke:20130506223010p:plain

4-2 相手の手表示プログラム作成

ボタンオブジェクトをControlキーを押しながら@interfaceと@endの間にドラッグ。
ポップアップのConnection(Action),Name(jankenDidPush),Type(UIButton)を変更。
それぞれのボタンにjankeDidPushを紐付け。
f:id:tya_ko_suke:20130506224148p:plain
f:id:tya_ko_suke:20130506223010p:plainをクリック。
Received Actionsからボタンオブジェクトにドラッグして接続。
ポップアップはTouch Up Insideを選択。
f:id:tya_ko_suke:20130508222825p:plain

jankenViewController.mを選択。
jankenDidPushメソッドを下記のように編集。

- (IBAction)jankenDidPush:(UIButton *)sender {
    int aite_no_te_num = arc4random() % 3;
    if (aite_no_te_num == 0) {
        _aite_no_te.text = @"グー";
    }
    else if(aite_no_te_num == 1) {
        _aite_no_te.text = @"チョキ";
    }
    else if(aite_no_te_num == 2) {
        _aite_no_te.text = @"パー";
    }
}

arc4random()で生成したランダムな数値の3の剰余を元に相手の手を決定。
後はif文でUILabelの値を書き換える。

f:id:tya_ko_suke:20130508231803p:plain

4-3 自分の手の判断とじゃんけんプログラム

どのじゃんけんボタンを押したかプログラムで判断できるようにボタンに紐付いた値(Tag)を設定する。
StoryBoradのグーボタンをクリック。
右上のf:id:tya_ko_suke:20130506204848p:plainをクリック。
その中のViewのTagに0を設定。
チョキは1、パーは2を設定。
上記でどのボタンを押したかどうか分かるようになったのでじゃんけんプログラムを追加する。
jankenViewController.mを編集。
下記のようにソースコードを編集。

- (IBAction)jankenDidPush:(UIButton *)sender {
    int aite_no_te_num = arc4random() % 3;
    if (aite_no_te_num == 0) {
        _aite_no_te.text = @"グー";
    }
    else if(aite_no_te_num == 1) {
        _aite_no_te.text = @"チョキ";
    }
    else if(aite_no_te_num == 2) {
        _aite_no_te.text = @"パー";
    }
    int jibun_no_te_num = sender.tag;
    if(aite_no_te_num == jibun_no_te_num) {
        _kekka.text = @"あいこ";
    }
    else if(aite_no_te_num ==0 && jibun_no_te_num == 2) {
        _kekka.text = @"勝ち";
    }
    else if(aite_no_te_num == 1 && jibun_no_te_num == 0) {
        _kekka.text = @"勝ち";
    }
    else if(aite_no_te_num ==2 && jibun_no_te_num == 1) {
        _kekka.text = @"勝ち";
    }
    else {
        _kekka.text = @"負け";
    }
}
<
Tagは
これで晴れてじゃんけんが出来るようになる。
[f:id:tya_ko_suke:20130508234229p:plain]