弾幕ゲーム第2弾:対惑星レーザー

対惑星レーザー

後述する敵カテゴリの「戦艦」に搭載する対惑星レーザーを作成してみた。
動画では前方にのみ発射していますが、角度を指定して発射したり回転させる
事もできるようになっています。

 
 

メニュー(敵は100種類!)

エクセルで敵のデータを作成できるようにしたので、結構簡単に敵の種類を
増やせると思うのです。と言うことで、4つクラス(駆逐艦/巡洋艦/戦艦/空母)に
それぞれ5つのクラスを作成し、各クラスに5種類の敵を作成する事で
100種類(4x5x5)の敵を作ることにしました。
すでにメニューの一部を作成し、以下の様に遷移するようにする予定です。
cateMenu
 

クラス特有の武器

今回の動画にある対惑星レーザーは「戦艦」に搭載します。対惑星レーザーという
名目なのでプレイヤーのような小型機にはあまり脅威にならないかもしれませんが
他の弾幕と組みあわせることで、色々難易度を調節できそうです。
来週は「空母」に搭載する小型機を追加しようと思います。
 
 
 

弾幕ゲーム第2弾:自機のパワーアップ?

支援機を10機つけてみた

自機のパワーアップについて試行錯誤。動画では10機の支援機を付けてみましたが
ゲームバランスが崩れそうなので却下。

 

初心者でもクリアできるように

Androidの弾幕ゲームを幾つかインストールしてみたのですが、どれも私にとっては
難しいものばかり…。クリアできなすぎて悲しいので、制作中の弾幕ゲームでは自機を
パワーアップできるようにしようかとメニューを作ってみました(クリックで拡大)。
でもって冒頭のYoutube動画のように支援機を追加したわけです。
menu
 

パワーアップは却下

パワーアップは予想以上に強力で、ゲームバランスを崩すと判断しました。
そもそも、自分がクリアできないだけという私的な理由ですし、
難しいのが弾幕ゲームの良いところ?だとも思うのです。
その代わり、いつの日か別のゲームで自機をパワーアップさせるゲームを
作ろうと思います。ストレス発散できるような、圧倒的破壊力で敵を
なぎ倒していくような(こっちが弾幕を出す系)。
 
 
 

アプリ開発の年間収支

必要経費すら回収できず

AppleのdeveloperProgramに加入してから1年が経過したので収支を確認。
人件費を抜いても約8千円の赤字という結果に…。

経費:45,600円

内訳は以下の通り。別件で購入していたMac本体やAndroid2.3検証機、iPodTouchは含まず
—————————————————————
・Nexus7(Android4.4実機検証用)-28,700円
・Apple developer Program 年会費-8,400円
・google developer Program 登録費-2,500円
・itunesカード(開発の参考にアプリを購入したいので)-3,000円
・google playカード(開発の参考にアプリを購入したいので)-3,000円
—————————————————————

利益:38,066円

内訳は以下の通り。
—————————————————————
・jQuery問題集(iOS)-9,870円
・jQuery問題集(Android)-1,890円
・広告収入-26,306円
—————————————————————
 

今年は

1年を振り返りアプリで利益を出すことは難しいと感じました。
しかし作成してみたいアプリ(ゲーム)のネタは、まだ1年分くらい残っているので
のほほんと続けていきたいと思います。本年もよろしくお願いいたします。
 
 
 

弾幕ゲーム第2弾:矩形のあたり判定

レーザーを追加

丸い玉だけだと寂しいのでレーザーを追加しました。動画だとレーザーの挙動が
おかしいのですが、実機では問題なし。

 

線分と点の距離

レーザーは線なので、あたり判定は「線分と円」の距離で判定できます…が。
spriteから線分の式を算出するのが面倒なので、素直にcocos2d-xに
搭載されているあたり判定のメソッドを使うことにしました…が。
 

回転に対応していない

cocos2d-xの矩形のあたり判定は回転に対応していないことが判明!
ゲーム作成用のフレームワークなのに!
FlashのhitTestのようなメソッドが有っても良さそうなのに無いようです。
しかし以下のサイトを発見。考えることが面倒になっていたので
これを利用することにしました。とても助かりました!
→参考:Cocos2d-xでCCSpriteの当たり判定
 

メモ

今回は数学をする気分ではなかったので「線分と円」のあたり判定について
は諦めましたが、速度的には「こちら」の方が早いのでメモ。
このあたり判定は「線分と円」の距離が求まれば簡単に実現できます。
考え方については以下のページが詳しいです。
→参考:円と線分から多角形と円へ
 
面倒なのはレーザーの線分を求める部分。レーザーのぼやけた部分
にはあたらないようにしたいので、線分はspriteの実体よりも短くする
必要があります。
また傾いているレーザーにも対応するため、短くした線分を回転行列に
通す必要が出てくるでしょう。
このときレーザーのspriteのアンカーポイントを「上部中央」に
すると計算式を簡単にすることができると思う。
→参考:cocos2d入門編 〜anchorPointについて〜
 
しかし私の古いiPodTOuchでも前項の方法で速度低下しなかった
ため、この方法に切り替えることは考えていません。今のところ。
 
 
 

弾幕ゲーム第2弾:エクセルで弾幕の設定

20近い引数…

一昨日の状態からさらに「これから実装しそうな弾幕」も予想して引数を用意したら
20近くの引数が必要になりました…。似たカテゴリの引数を配列にしてまとめて
みましたが、以下の様な有様です(クリックで拡大します)。
arg
あまりの引数の多さに、プログラムを書いた直後ですら把握できません。
なのでエクセルでデータ(csv)を作成し、それを読み込むようにしました。
 

csvの読込

先月のシミュレーションゲーム作成でcsvデータの読込をマスターしていたので
今回の問題はエクセルから書き出したcsvデータを読み込んで解決することに
しました(下図)。1ステージに1つのcsvファイルを対応させるようにしたので
データには母船の移動に関する引数も含めるようにしました。
セルに説明を記述しているため時間が経過しても内容を簡単に確認できると思います。
(クリックで拡大)
スクリーンショット 2014-12-20 0.34.30
 
年末が近づき微妙に学習モチベーションが下がっていますが
来週末は「レーザー攻撃」を追加したいと思います。
ちょっと下調べをしたのですが、あたり判定が思いの外面倒になりそう…。
 
 

弾幕ゲーム第2弾:継承を使おうとしたら…

弾幕のバリエーションを作った

以下の動画は現時点のサンプル。複数の弾幕砲台がありますが
すべて1種類のクラスから作成されています(引数がとても多い…)。 

 

継承について

継承という仕組みはjavaScriptにも存在し、オブジェクトの共通部分を
効率よく作成する仕組みです。たとえば弾幕を出す砲台であれば、
「被弾するとダメージを受けて、ライフが0で消滅する」という部分は
共通で作成し、弾幕の種類は「それに上乗せする」形で作成します。
継承という言葉を利用して言葉を直すと、
「すべての弾幕砲台は前述の機能を継承する」という感じです。
 
ちなみにcocos2d-xでの継承は以下の様に記述します。
※現在作成しているゲームの弾クラスでspriteを継承しています。
keisyou
これはActionScript3.0の継承と似たような構文です。
→参考:ActionScript 3なら継承&実装で大規模開発もできる
ちなみにjavaScriptはActionScript1.0/2.0と同じようにprototype
を利用します。→参考:JavaScript初級者から中級者になろう
 

しかし継承は使いませんでした…

初めは、一定間隔で弾を連射する「マシンガン」と複数の弾を同時に発射
する「ショットガン」を作成しようとしたのですが、そうすると
「複数の弾を一定間隔で連射する」場合はどうしたら良いの?となった
わけです。「マシンガン」を継承して「ショットガン」を足すのかな?
しかし「何となく効率が悪いような気がして」結局は引数を利用して
色々な弾幕を生成できるようにしました。継承は使わずじまいです…。
 
その結果、現時点で引数が10を越えており管理しにくくなってきたので
エクセルのcsvを読み込む形に変更中。次回説明しようと思います。
 
 
 

弾幕ゲーム第2弾:時間差で砲台を稼働

時間差で砲台を稼働

普通の弾幕ゲームは一定のダメージを負う毎に攻撃が変化し、徐々に難しくなっていきます。
しかし私が作成しているゲームの仕様だと、砲台をたくさん配置しているため、
最初は鬼のような攻撃となり、砲台が破壊される毎に弱くなってしまいます。
 
これではゲームの流れとして良くないので、対策を考えてみました。動画では4つの砲台が
有りますが中心の砲台はゲージが青くなっていて攻撃をしません。
青いゲージは徐々に短くなり、青ゲージが無くなると攻撃を開始します。
つまり時間差で攻撃を開始するようになっています。
 
また青いゲージの砲台にダメージを与えるとゲージのが減り、攻撃までの時間が
短くなります。一度に攻撃されるのは不利なため、待機中の砲台にはダメージを
与えないようにするという戦略が有効になったりもします。

 
 

敵のバリエーション

今回のアプリでは敵の種類を沢山用意しようと思います。
1943がモチーフなので艦艇のクラスでカテゴリを分ける予定です。
 
駆逐艦ステージ:
搭載している砲台は少ないが移動量が大きい。youtubeのサンプルは駆逐艦タイプ。
 
戦艦ステージ:
巨大な船体と大火力な砲台だけど移動量はほとんど無い。惑星攻略用の艦のため
プレイヤーのような小型機には弱い。噛ませ犬的なステージ?
 
巡洋艦ステージ:
駆逐艦と戦艦の間のクラス。そこそこ大きくて、そこそこ移動する。
 
空母ステージ:
小型機をたくさん排出する艦艇。プレイヤーのような小型機の天敵で、難関な
ステージが多くなる予定。
 
 

来週の予定

現在は前面に弾を出す砲台だけですが、たくさんのバリエーションを作成して
いこうと思います。弾の大きさも複数用意する予定。

弾幕ゲーム第2弾:作業開始

自機の操作

前回の操作方法は、私の小さいiPodTouchでも自機が指に隠れないような操作方法を
模索して完成させたのですが、大きい画面では親指が届かず帰って操作しにくくなり
また、左右方向の操作がジェットのON/OFFという状態になってしまいました。
ということで、今回はより一般的なスワイプして操作するものに変更します。
この方法はマルチタップの必要がないので簡単に実現できました。
※今回はタテのレイアウトで作成しますが、動画は都合上ヨコに傾けました。
 
→参考:Youtube:ダライアス(スマホ版)の操作
 

1942(ゲーム)のボス戦がモチーフ

今回の動画では破壊対象が3つありますが、これはあとで「砲台」に置き換わる予定です。
色々なゲーム機に移植された名作「1942」の砲台がたくさん搭載されたボス戦が個人的に
すきなので(あとダライアスのボス戦も好きです)モチーフにしたいと思います。
沢山の砲台をプチプチと破壊していくのは楽しそうだと思うのです。
 
Youtubeで動画を探したらカプコンではない1942が見つかった…
こんなハイクオリティとは張り合うつもりはなく、シンプルな幾何学的なデザインに
する予定です。
 
 
 

シミュレーションの続きとリワード広告に関するメモ

シミュレーションゲームの経過報告

切りの良いところまで終わったので、動画をyoutubeにアップしてページを更新しました。
来週は「弾幕系ゲーム」の新規作成に入りたいと思います。
→参考:jQuery入門講座-サンプル「番外編」

 
 

リワード広告の規制が緩和?

6月くらいにAppleがアプリのリワード広告の取締を厳しくしたのですが
それが緩和されているような記事を見つけたのでメモ。
→参考:GameCast様「Apple、リワード広告への審査強化を撤回。
 

リワード広告のメリット

私が利用しているインターステイシャル広告は「弾幕の光」のように
サイクルの早い(プレイ時間の短い)アプリでは有利なのですが、
現在作成している「ファミコンウォーズ系」のようなアプリには不向きです。
なので、リワード広告の報酬として新しいマップや兵器が追加されるような
仕組みにしたいのです。
 

リワード広告を扱っている会社

iOSのタワーディフェンス系のアプリで有名な「ディフェンスウィッチーズ
では3つのリワード広告があるのですが会社が分かったのは以下の2つ。
→参考:AppDriver
→参考:Tapjoy
tapjoyは本社がアメリカなので英語圏の市場にも強いそうです。
→参考:人気アプリ「にゃんこ大戦争」を支える「Tapjoy」とは
 

敵AIのアルゴリズム

シミュレーションの続き

敵AIの作成に入りました。とはいえ一番近い街を探し、そこに移動
する処理だけです。→参考:jQuery入門講座-サンプル「番外編」

 
今回の部分で、私が難しそうと考えていたアルゴリズム部分が完了しました。
なのでcocos2d-xへの移植作業に入ろうと思います。というか、すでに移植を
開始しました。ですので次回はcocos2d-xのサンプルをyoutubeでお見せして、
番外編の終了としたいと思います。
 

web制作者からのアプリ作成

興味深い記事を見つけたのでメモ。webデザイナーさんの転身物語。
→参考:プログラミング未経験、貯金100万円でアプリで独立
「脱出ゲーム」というジャンルがあることは以前から知っていたのですが、
謎解きが理不尽なものが多く「適当にタップしまくるゲーム」と認識し
苦手意識を持っていました。映画のCubeやsawのシリーズも理不尽だから
理不尽を楽しむ?というジャンルなのかもしれませんが…。
 
でも逆に「理不尽を廃し、論理的に祖予測できる謎」にすれば良いのでは?
と思ったわけです。でも、そうすると「推理ゲーム」になって別ジャンルに
なるのかな?
利益を見込むには難しそうなジャンルですが、ちょっと作成してみたいかも…。
 
PCゲームの名作推理ゲームがスマホ用のゲームになっていたりもします。
→参考:iOS版「琥珀色の遺言