この度iPhoneアプリの24をリリースしました。
ゲーム説明
内容としては4つのカードがランダム配られるので、それを四則演算を使って24にするというものです。
中国やアメリカでメジャーなゲームで、トランプを使って遊ばれる事が多いようです。
実際のプレイ動画は下の物になります。
モードもいくつか用意してあり、「足す」と「引く」しか出てこない初心者モード、タイムアタック等があります。
ゲームで使っている技術
言語は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に載せる説明文やスクリーンショットを多言語対応するのが非常に大変でした。
今回苦労した所
最後に今回頑張ったところを紹介したいと思います。
ゲームは計算結果を24にするのですが、もちろん24にならない数字の組み合わせはあります(1,1,1,1等)
そういう結果を排除するのに今回は苦戦しました。
対応方法としては下の通り力技になりました。
24になるパターンを配列で持っておいてその中から出しています。
配列の生成は下のようなスクリプトを作って行いました。
こちらもかなりの力技です。
1+1+1+1~13/13/13/13まで、全てのパターンを網羅して結果が24だったら配列に詰めるという事をやっています。
まとめ
今回は初めてゲームを作ったのですが、なんとかリリースまで持ってこれて良かったです。
初挑戦な事も多く、大変でもあり非常に楽しくできました。
今後はSwiftを使ったゲーム・Cocos2dやUnity等のゲームにも挑戦してみたいと思います。