読者です 読者をやめる 読者になる 読者になる

ホーリーのプログラミング日記

プログラミング初級者。歴1年。ポンコツアプリを量産しています。

Swiftで作る脱出ゲーム

プログラミング入門

 

脱出ゲームを作ったので、ちょっとその作り方について書いてみたいと思います。

 

ニート専用脱出ゲーム 職安へ行こう

ニート専用脱出ゲーム 職安へ行こう

  • Taro Horiguchi
  • ゲーム
  • 無料

 

脱出ゲームを作ってみて思ったことは、これクイズアプリの次に作れば良かったなってことです。

みんなどうやって作ってるのか知りませんけど、僕の作り方は技術的にも非常に簡単です。なんか結果的にそうなりましたw

最初に唯一悩んだのは、コンティニューの実装ですね。コンティニューが出来るようにしたかったので、これだけどうしようか考えた次第です。

(コンティニューについては、ちょっと後の方で書いてみます)

 

フラグ制御

プログラミングが完全な独学なので、言葉が合ってるか分かりませんが、フラグ制御ってあるじゃないですか。なんかスイッチみたいなやつ。あれを多用しただけなんですよね。

RPGで村長さんに話しかけても何も起こらないんですけど、村人Aに話しかけてから村長さんに話しかけるとイベントが始まる、みたいなやつですよ。

 

var eventFlg = 0

 

みたいなのを用意しておいて、それでなにかのアイテムを取ったら、この値を1にする、みたいな感じですね。終始そんな風に組み立ててみました。もしもこの値が1だったらイベントが発生して、もしも0だったら何も起こらないってことです。

 

アイテムの取得と使用

最初にちょっと不安だったのは、アイテムを取って、それを使えるように出来るかってことでした。

どこかを触ってイベントを発生させるのは簡単だろうと思ってたんですけど、このアイテム関連のそれだけは、やってみないと分からないって感じだったんですよ。だから最初にこんなの作って実験してみました。

 

下の白い四角がアイテムボックス。まあアイテム取ったらここに入るってわけです。

んで緑と青の四角も用意しました。

 

f:id:gevvoihorry:20160601134443j:plain

 

これ緑に触れると下のアイテムボックスに入るんですけど、青はそのまま触れても何も起こらないんですよ。

それでまず先に緑を取って、その緑を選択した上で青に触ると、青もアイテムボックスに入ります。

 

f:id:gevvoihorry:20160601134650j:plain

 

この状態ですね。分かりにくいでしょうが、アイテムを選択すると、枠が赤になるようにしました。それでONとOFFが分かるように。

 

ここまで書くのを忘れてましたが、これはSpriteKitで作ってます。普通のシングルビューなんとかでも作れるんでしょうけど、僕はSpriteKitを選びました。なんか慣れるとこっちの方が楽なんですよね。ストーリーボードないほうがいいです。

(その結果、iPadで見たときに、画面が見切れるってエラーが発生しました。単純なAspectFillだと、その辺の対応が出来ないですね。んでAspectFitだとAppleさんの審査が通らないんですよ。この辺は今後の仮題です)

 

はい、んで上記の仕組みは簡単です。白、青、緑とNodeを用意しておいて、それで触ったらremoveFromParent()で消す。

それでself.addChildでアイテムボックスの方に表示させるってことですね。

だから画像の位置だけ、最初から仕込んでおけば非常に簡単てわけです。

 

コンティニューの実装

さっき書きましたが、コンティニューの実装だけ悩みました。

そもそもセーブさせるのってNSUserDefaultsしか知らないんですよね。

SpriteKitではじめる2Dゲームプログラミングって本の6章くらいに、なんかそんなのが書いてたんで、そのままそれを使ってみました。

 

適当なんですけど、SAVEって名前のデータを作って、それでイベントが1個終わるたびに、その値を増やしていきました。1,2,3みたいな感じで。

だから上に書いたフラグ制御も半分はこのSAVEで管理してましたね。

 

コードがクソ長い

上記したように、技術的には簡単だったんですが、コードだけは山盛りになってしまいました。もうクソ長い。

今日までってファイル3〜5つくらいだったんですよ。アプリ作るときに使うファイルの数って。

それが15個くらいありましたからね。これで無駄に疲れました。

 

場面ごとに分けて作ったんですが、これ上手い人だと、もっと簡潔に作れるんだと思います。

僕は下手くそなので、なんか無駄に冗長なコードになってしまいました。

全ページ共通の関数とか、なんかもっと上手く定義すれば簡潔になる気がします。

(PHPだと分かるんですが、Swiftだと分からないんですよ。共通の処理が上手く)

 

画像が特盛り

コードもそうなんですけど、とにかく使う画像数が半端じゃなかった。これは上級者でもそうなるでしょう。

脱出ゲームってやつは、画像を用意するのがとにかく大変ですね。

 

今日まではひとつのアプリで20くらいしか画像を使ってなかった気がするんですけど、この脱出は100近く使った気がします。

 

んであれ

 

自分で絵を描くのがマジでつらかった

 

今日までは西村画伯(友達)に頼んでたんですけど、喧嘩した関係で描いてくれなくなっちゃったんですよ。

だから初めて自分で絵を描きました。メインキャラのフジコちゃんは画伯の作品ですが、9割方自分で描いたことは間違いありません。

んでこれからは自分で全部描いていくつもりです。

 

最後に

えー、なんか書き忘れてることがある気がするんですが、脱出ゲームの作り方は、おおむねこんな感じです。

仕組みは簡単なんですけど、コードと画像の量がどうしても多くなりますね。

 

あとはストーリー作りも難しい。謎解き考えるのもそうだし、一本道になってないと、処理が難しいんですよね。

ようはこのイベント終わらないと、次のイベントが始まらない、みたいな処理ですよ。

 

これ順番が前後出来るようになると、急にコンティニューの実装難易度が上がるんですよね。だから普通の脱出ゲームって一本道なストーリーになってると思います。

ここの自由度を上げちゃうと、急に難しくなるんじゃないですかね。少なくとも今の僕にはマジ無理ですw

 

ストーリーと絵が上手ければ、それだけで相当クオリティの高いものが作れると思いますよ。

僕の脱出はその両方とも低いですけど、よかったら一度やってみてください。

 

ニート専用脱出ゲーム 職安へ行こう

ニート専用脱出ゲーム 職安へ行こう

  • Taro Horiguchi
  • ゲーム
  • 無料