しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

脳トレアプリ "24" をリリースしました

この度iPhoneアプリの24をリリースしました。

ゲーム説明

内容としては4つのカードがランダム配られるので、それを四則演算を使って24にするというものです。
中国やアメリカでメジャーなゲームで、トランプを使って遊ばれる事が多いようです。
実際のプレイ動画は下の物になります。

f:id:llcc:20150520233219g:plain

モードもいくつか用意してあり、「足す」と「引く」しか出てこない初心者モード、タイムアタック等があります。

ゲームで使っている技術

言語はObjective-cで書いています。
フレームワークにはApple純正2dゲームフレームワークのSpriteKitを利用しています。
画像はFireforksで制作して、音楽フリー素材を利用しています。

今回挑戦したこと

音楽再生 (AVFoundation)

今回は初めてアプリ中の音楽再生を実装しました。
AVFoundationを使ったのですが、とても簡単に実装する事ができました。 実際のコードは下の通りです。

#import <AVFoundation/AVFoundation.h>

- (void)startBgm {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"musicName"
                                         withExtension:@"mp3"];
    NSError *error = nil;
    // AVAudioPlayerのインスタンスを生成
    AVAudioPlayer *bgm = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    bgm.numberOfLoops = -1; // -1を指定すると永遠にリピート
    [bgm play]; // 音楽の再生スタート、曲を止めるときは[bgm stop];を使う
}

Facebook/Twitter/Lineへのシェア

Facebook/TwitterへのシェアにはSocialという標準のライブラリを使いました。

#import <Social/Social.h>

- (void)share {
    // Facebookの場合は引数を SLServiceTypeTwitter → SLServiceTypeFacebook にすれば良い
    SLComposeViewController *twitter = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    [twitter setInitialText:@"24を○問正解!"];
    [twitter addURL:[NSURL URLWithString:@"http://....(アプリのURL)"]];
    twitter.completionHandler = ^(SLComposeViewControllerResult result) {
        if (result == SLComposeViewControllerResultDone) {
            // ここにシェア完了後の処理を書く
        }
    };
    [self.view.window.rootViewController presentViewController:twitter
                                                      animated:YES
                                                    completion:nil];
}

Lineのシェアは下のようにUrlスキームを使う形になります。
シェア完了後のイベントの取り方は分からなかったので、ご存知の方いればぜひ教えて頂きたいです。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[@"line://msg/text/24を○門正解" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

多言語対応

今回は日本語・英語・中国語に対応しています。
多言語対応は下のように各言語のLocaleを作成してNSLocalizedString(@"normal", nil)のように書けば対応する言葉を取得できました。
実装は楽なのですが、全ての文言を変えるのとAppStoreに載せる説明文やスクリーンショットを多言語対応するのが非常に大変でした。

f:id:llcc:20150519135525p:plain

今回苦労した所

最後に今回頑張ったところを紹介したいと思います。
ゲームは計算結果を24にするのですが、もちろん24にならない数字の組み合わせはあります(1,1,1,1等)
そういう結果を排除するのに今回は苦戦しました。
対応方法としては下の通り力技になりました。
24になるパターンを配列で持っておいてその中から出しています。

f:id:llcc:20150519140122p:plain

配列の生成は下のようなスクリプトを作って行いました。
こちらもかなりの力技です。
1+1+1+1~13/13/13/13まで、全てのパターンを網羅して結果が24だったら配列に詰めるという事をやっています。

f:id:llcc:20150519140259p:plain

まとめ

今回は初めてゲームを作ったのですが、なんとかリリースまで持ってこれて良かったです。
初挑戦な事も多く、大変でもあり非常に楽しくできました。
今後はSwiftを使ったゲーム・Cocos2dやUnity等のゲームにも挑戦してみたいと思います。