プログラム解説

注意!!
 ここで公開しているソフトは圧縮前・圧縮後に「AVG Anti-Virus System 6.0 FREE Edition」
によりウィルスチェックを行っています。
しかし、チェックに漏れたウィルスが残っている可能性もあります。改めてウィルスチェックを行われることをオススメします。
 ここで公開しているソフトによる一切の不具合、及びソフトのダウンロード・
展開による不具合に対しYu-taは一切の責任を負えません。
 ここで公開しているソフトはフリーウェアですが、掲載・二次配布される場合は
nekokiki@banban.ne.jpまでご連絡いただけると嬉しいです。


今まで製作した作品たち
プログラム解説
ダウンロード
last update 2003.1.12

ぐるぐる大回転 (Ver0.70)
要 DirectX (DirectDraw使用) 
ファイル名: ggd070 (Guru Guru Daikaiten Ver0.70)
  
 以前製作していた「ぐるぐる大回転」がデータ紛失により
更新できなくなったため新たに製作し直したバージョン。

 本作品を製作する上でのプログラミングにおける目標は

 1. Strategyパターンを実際のプログラムに適用する。
 2. ”遊べるゲーム”を書籍などに頼らずに独力で作る。
 3. DirectX (Direct Draw)を理解し、活用できるようになる。
 4. ライブラリーとして他人のプログラムを活用する。
 5. 短期間(2ヶ月以内)でどこまでできるかチャレンジする。


1.Strategyパターンを実際のプログラムに適用する。
 デザインパターンのウチ「Strategyパターン」を用いて
より柔軟に作成・変更できる敵(アルゴリズム)を実装する
ことを本プログラムを作成する上での目標とした。

 実際にはインターフェイスクラスとして「IStrategyEnemy」を作成し
その具象クラスとして「StrEnemyRandom」(ランダムに行動を
決定する)「StrEnemySearchLowPos」(低い位置を探しそこに
落とそうとする)というクラスを作成することでアルゴリズムを
柔軟に変更できるよう実装した。
 また得点計算においてもインターフェイスクラスとして
「IStrategyScoreCalculation」を作成し、その具象クラスとして
「StrScoreCalcDef」というデフォルトの得点計算アルゴリズムを
実現するクラスを作成した。
これにより得点計算におけるハンデなどの実装が容易になる。

 プログラムドキュメント目次


2. ”遊べるゲーム”を書籍などに頼らずに独力で作る。
 まず「書籍などに頼らず」とは「書籍を丸写しすることなく」という
意味であり「書籍の知識を参照したり利用したりしない」という意味
ではないことを申し上げます。実際に「ぐるぐる大回転」を作成する
にあたり、多くの書籍やサイトを参考にさせていただきました。
 これは「4.ライブラリーとして他人のプログラムを活用する。」
と相反することのように思えるかもしれない。今回のプログラム
では ftn さんのプログラムを利用させていただいてはいるものの
ゲームの大まかな流れ以外は全てオリジナルで作成している。
 私は「プログラムとは正しく設計されていれば再利用できる
モノである」と考えており、「再利用できる部分は積極的に
再利用し、生産性の向上を図るべきである」と考えている。
 今回利用させていただいた ftn さんのプログラムがカバー
してくださる部分には「WindowsとDirectX周りの初期化等」
「描画関連処理」「リソース管理」「シーン管理」「フロー管理」
など非常に重要であり、かつ興味深い部分が多くある。
しかし、本作品ではそれらを研究することを目的としなかった。
それらの部分の研究は今後別の作品で研究していくものとし、
今回は逆に、実際の社会でも多いであろう”再利用”に挑戦した。
 基本的な処理以外の「ぐるぐる大回転」オリジナルの処理は全て
独力で行ったため、この目標は達成できていると考えられる。


3. DirectX (Direct Draw)を理解し、活用できるようになる。
 今回公開した「ぐるぐる大回転」は再製作版、すなわち2度目の
「ぐるぐる大回転」である。一度目を第一期、二度目を
第二期と呼ぶ。
 第一期のぐるぐる大回転は全てオリジナルで作成しており、
描画処理も全て自分で管理していたため「Direct Draw」に対する
理解が不可欠だった。自分で試行錯誤しながら描画処理を実装し、
ある程度 DirectDraw に対する理解も深まったと思う。
 今回公開した第二期のぐるぐる大回転は ftn さんのプログラムを
利用しているため、描画周りの調節はほとんど行っていない。
調節のため知識を再確認したこともあったが、まだまだ不十分
であると言わざるを得ない。
 今後の課題としたい。


4. ライブラリーとして他人のプログラムを活用する。
 今まで、「全国プログラミングコンテスト」に出場するにあたり、
複数人でのプログラミングを経験したことはあった。しかしそれは
「必要な処理を分割し、各々がその処理をする関数を製作する。」
「そしてそれを私が統合する。」というような形でのプログラミング
であった。
 今回ほど大部分を誰かに任せて行うプログラミングは初経験
だった。
 例えるなら「ケーキを2分割してそれぞれを作り、合わせて完成品
とする」のか「スポンジケーキの作成を任せて、デコレーションを
担当する」ことの違いという感じだろうか。
 前者ならどちらもある程度スポンジケーキを作成する必要が
あるためスポンジの固さなどをある程度理解しているが、後者の
場合は全くそれが分からない。そのような何とも言えない不安
のようなものを感じながらのプログラミングとなった。
後者を選択したため、できあがったスポンジの固さ(ライブラリーの
仕様や性能)をある程度調査する必要があった。
 しかし、今回のような形をとったことで私はほぼ全力で
オリジナル処理のみに取りかかることが出来た。また製作スピード
も、全てをひとりで行っていた時とは比べモノにならなかった。
 「自分ならもっとうまくできるかも知れない」「ここはどういう
実装をしているのだろうか」などといった興味や意欲をもちながら
コードを再利用するのであれば、それは素晴らしい効果をもたらす
ということを体感出来たと思う。


5. 短期間(2ヶ月以内)でどこまでできるかチャレンジする。
 プログラミングを仕事とするようになった場合、そのスピードも
要求される事になると思われる。そのため、今回は製作期間を
2ヶ月とし、その中でどれぐらいまでできるものかチャレンジした。
 製作開始は11月初旬であるから、二ヶ月半ほどが経過しているが
プログラミングが出来なかった期間などもあったため、実製作期間
は二ヶ月弱。学校などがなく、丸一日プログラミングに当てられる
のであれば一ヶ月半程度ではないかと考えている。
 そこそこなペースではあると思われるが、まだまだ設計などが
不十分であったり、二度目の製作ということもあったので、十分とは
言えないスピードであると考える。
 今後よりスマートでスムースなプログラミングを心がけたい。


●今回のソース内容
・doc フォルダ  - ドキュメントファイル
・dxLib フォルダ - ftnさんのプログラム(ライブラリ)
・Images フォルダ - リソース画像
・Main フォルダ  - オリジナルプログラム
・GuruGuruDx.dsp - プロジェクトファイル
・GuruGuruDx.dsw - プロジェクトワークスペース
・GuruGuruDx.ncb
・GuruGuruDx.opt
・GuruGuruDx.plg



●今回の反省と今後の展望
・全般について
 今回は第一期のぐるぐる大回転のときにおこなった大まかな設計
に基づいて、特に企画書・設計書などを書くことなくプログラミング
に取りかかった。
 今後はプログラミングに取りかかる前に、FSM図やクラス
ダイアグラムを用いて十分な設計を行った後にプログラミングを
開始するという手法をとりたい。


・プログラミング技術について
 プレイヤー生成部分にAbstructFactoryを適用し、スマートに
プレイヤーを生成できるようにする。
 さらにデザインパターンを適用できるところを検討し、
より柔軟なプログラムにする。
 画像データを個々に読み込んでいるが、一つのまとまった画像を
読み込み、適時必要な部分を切り取って使用するという形に
変更することで画像データ読み込みによる負荷を減らす。
 メモリープールの実装。
 処理を最適化し、より低いスペックでも動作するように改良する。
 画像のアニメーションに対応する。
 プレイデータを保存できるようにする。(デモの実装)
 よりスマートな敵のアルゴリズム(シミュレートなど)を実装する。
 オプション画面を実装する。(回転に対する連鎖縛りなどの選択)
 落下物の移動量を調節する。
 シナリオやステージの切り替えを実装する。
 BGM・効果音再生機能の実装。
 エフェクトを実装する。
 通信対戦を実装する。

 3D技術の修得。
 描画処理技術の研究・修得。
 よりスマートなプログラミング技術の修得。
ソフト
ggd070.lzh(69.5KB)


ソース
0111GuruGuruDx.lzh(291KB)


ヘルプファイル
help.html
(htmlバージョン)



ドキュメント
doc.html
(htmlバージョン)


doc.lzh(30.3KB)


プログラム解説
解説