第26章~第30章

みるくあいらんどっ! > ドキュメント > C# > C#で龍神録を作る


第26章: ボスにエフェクトを付けてみよう

原作ページのリンク

移植版の留意点

  • input_phyメソッドの中身を input_phy_posメソッドの呼び出しとした。

第27章: 弾幕「サイレントセレナ」を作ってみよう

移植版の留意点

  • 原作版の #defineは、C#では const修飾子をつけたローカル変数で対応する。
  • C#ではローカル変数に static修飾子を使用できないので、staticなフィールドで代用した。今後、他と名前が被ることを防ぐために、フィールドの末尾にメソッド番号を後ろに付加することにする。
  • 円形弾の bulletの colは 4となっているが、1に設定した(プレイ動画の弾の色と合わせた)。
  • ボムを発射中は敵弾を消す処理を書き忘れていた不具合を修正。Bulletクラスの enemyshot_and_chメソッド。
  • この版の時点で、ボスにショットが当たった時に当たった音がしない。C言語版を動かせる環境にないので、正常かどうか不明。

第28章: 弾幕「パーフェクトシリーズ」を作ってみよう

移植版の留意点

  • Bulletクラスに kaitenフィールドを追加(サイトでは未解説)。
  • BulletInfoクラスに kaitenフィールドを追加。そして BulletInfoGroupのコンストラクタを修正(サイトでは未解説)。
  • kaitenフィールドを表示に反映させるために、GraphManagerの graph_bulletメソッド内の 2ヶ所を修正(サイトでは未解説)。
  • 「img/bullet/b7.png」のパラメータが記述ミス。「9, 9」ではなくて「10, 10」。原作サイトの第 13章の記述が間違っていた。
  • MyMathクラスのGetRandメソッドは、戻り値の範囲が仕様と異なっていました、修正。同様に、rangメソッドも戻り値の範囲が仕様と異なっていました。修正。
  • GetRandメソッドは DXライブラリで用意された関数だったことに今更気づく。DXライブラリを使用する GetRandメソッドと rangメソッドを新しく MyMathクラスに作成して切り替え。旧来の GetRandとメソッドと rangメソッドにはメソッド名に oldを記述して、事実上使用しないことにする。

第29章: 弾幕「恋の迷路」を作ってみよう

原作ページのリンク

移植版の留意点

  • Bossクラスの phyフィールドのアクセス修飾子を private→publicに変更した。
  • BossShotクラスのフィールド base_angleの配列の大きさを 1→10に変更した(原作サイトでは未解説)。
  • cnumの三項演算子が何度も使われているので、ローカル変数 cnum_flagを用意した。
  • 原作版を動作させる環境にないのでよく分からないのだけど、cum_flagの判定を、本来は「this.cnum003 != 0」と書くべきところを「this.cnum003 % 2 != 0」と剰余を記述した。そうじゃないと、左回り→右回り→右回り→右回り…と右回りばかりの攻撃になってしまう。多分、左右交互だと思われるので勝手に改修。
  • 1箇所目の弾生成部の colについて、原作版では「? 1 : 4」となっているのを「? 5 : 1」にした。原作版ソースコードそのままだと、プレイ動画の色と異なってしまう。

追加: リファクタリング 1

変数と定数を復活する

やはり既存コードとの 1対 1対応をするべき…と判断し、リファクタリングを実施します。

  • 原作版では PI2を宣言していたが、今回の移植にあたって使用していなかった。今更ながら MyMathクラスに定義することとして、既存のものを置き換える。
    • Bossクラス… 1ヶ所。
    • BossShotクラス… 11ヶ所。
    • GraphManagerクラス… 13ヶ所。
    • Shotクラス… 4ヶ所。
  • BossShotのH001,H003を製作する際に記述を省略していたローカル変数t2を、今後との兼ね合いもあって復活作成する。
  • MyMathクラスの oldメソッドは確実に不要となったため削除する。

失敗した、この労力はとてももったいない。

ソースコードは「Chapter29a」ディレクトリを参照のこと。実行結果は「Chapter29」のものと同じです。

追加: リファクタリング 2

Patternクラスを作成する

このまま弾幕を追加していくと、BossShotクラスが巨大になってしまうのでリファクタリングを実施します。

  • ShotPatternクラスとBossShotPatternクラスを作成する。
  • Shotクラスと BossShotクラスは自身を引数として渡す。
  • 弾生成メソッドを移行。すべて staticなメソッドとするため、予約語 thisは使用できないので修正する。Shotクラスでの thisは引数の shotに、BossShotクラスでの thisは引数の boss_shotに変更する。

ソースコードは「Chapter29b」ディレクトリを参照のこと。実行結果は「Chapter29」のものと同じです。

第30章: 弾幕「ケロちゃんに風雨に負けず」を作ってみよう

移植版の留意点

  • Bulletクラスに eff_detail, vx, vy1フィールドを追加(サイトでは未解説)。
  • GraphManagerクラスの敵弾描画メソッドに eff_detailの値を参照して処理する部分を追加(サイトでは未解説)。
  • GraphManagerクラスの敵弾描画メソッドのボス弾部分の実装が全然違っていたので、あちこち修正(不具合対応)。
  • GraphManagerクラスに残存していたデバッグ用コードを削除。
  • 原作版ソースどおりだと「bullet.col = 4;」と記述するべきところを、プレイ動画の色に合わせて「bullet.col = 1;」と記述した。
  • 勝手に改修。ボスに自キャラクタのショットが当たったときに、敵に当たったときと同じ音がなるようにした。CShotクラスの cshot_and_enemyメソッドに処理を追加した。
  • 勝手に改修。自キャラクタのショットが敵に当たった時の音が鳴らないときがあるので、MusicManagerクラスの playメソッドを勝手に改修。恐らく素材データの効果音の後半に無音部分が収録されていることが原因。
最終更新: 2013/03/21 , 公開: 2013/03/20
▲top