D言語をはじめる

「D言語をはじめる」の編集履歴(バックアップ)一覧に戻る

D言語をはじめる - (2009/03/08 (日) 23:11:44) のソース

* D言語を始める

芝が生えるゲームは、D言語で書かれています。ということで、芝が生えるゲームを(気合入れて)改造する場合は、D言語がビルドできる環境を用意する必要があります。

* D言語って

JavaとC++を足して割った様な言語。「ガベージコレクタのあるC++」「ネイティブで走るJava」とか。まあ、そんな感じ。
JavaかC++の経験がある人なら、すんなり使えるんじゃないでしょうか

ソースコードの拡張子は .d 、文字コードは UTF-8 です

※注意※
D言語は現在、stableな「1.0系」と開発が進行している「2.0系」があります。お互いに互換性が微妙にありません。
芝が生えるゲームは「1.0系」で作られています。


* 芝が生えるゲームのアーキテクチャ紹介

SDL
http://www.libsdl.org/
メディアハンドリング担当。マウス座標とったり、ウインドウ初期化したり、bmp読んだり、タイマーだったりはこのライブラリを使っています。マルチプラットフォーム

SDL_mixer
http://www.libsdl.org/projects/SDL_mixer/
音担当。wavとoggが鳴らせます。
やっぱりマルチプラットフォーム

OpenGL
http://www.opengl.org/
作画担当。GPUを使ってあんなことやこんなことができる
これもマルチプラットフォーム

* ビルドできる環境を作る(Windows

D言語ゲーム開発入門
http://www5.atwiki.jp/yaruhara/pages/74.html
ここを参考に。

ダウンロードページ
http://www.digitalmars.com/d/download.html
から「1.0系」のdmd.1.030.zipとdmc.zipをダウンロードして、展開。
dmd.1.030.zipからはdmフォルダとdmdフォルダが、dmc.zipからはdmフォルダが展開されるはず。
なので、c:\dmdとかにdmフォルダとdmdフォルダをコピーする。
dmフォルダは一方を他方へ上書きコピーすればおk。
必要に応じて、c:\dmd\dmd\binとc:\dmd\dm\binにパスを通しておく。

芝ゲーの中のbuild.batをたたいて、ちゃんとゲームがビルドされて動けば、環境は一応完成です。
dmdがないって言われた場合、パスがあってないです。build.batを適宜書き換えると良いかもしれません。

備考
-koke_080806.zipはlibが付属してない為(?)、そのままではコンパイルできないので注意。&br()koke_080227.zipにあるlibフォルダを、srcフォルダの中にコピーすればおk。
-dmdフォルダとdmフォルダを混ぜて環境構築する時は、dmc.zipのdm\bin\sc.iniでdmd.1.030.zipのdmd\bin\sc.iniを上書きしないように注意。
-「改造してみるwを改造してみる」の場合、build.bat内でのPATH記述がちょっと違う(c:\dmdではなくc:\に環境構築した場合になってる)ので、build.batを書き換える必要があるかもです。
-バージョン上がっててコンパイルできない場合は、change logのページから古いのが落とせる。
--というかD1.041だとコンパイルが通らん。自力で直してもいいけど。
-D1.030でコンパイルできることを確認したリスト(他は知らん):
--koke_080227
--koke_080806
--kokekai_080519
--kokekai_080527
-てきとーに書いたので誰か加筆修正よろ

* 見通し的な話

ゲームの基本設計
-ゲームはフレームを基本単位として処理します。
-フレームは基本、一回の更新処理 と 一回の作画処理 から成ります
--※フレームスキップことエコノミー状態や、ksk中はこの限りではありませんが。
-更新処理は update や move といった関数名で書かれてます
-作画処理は draw といった関数名で書かれています。

-マップやキャラクタは個々に扱ってては面倒ですから、
--マップにはMapChipとMapの階層があります。MapChipの群れをMapがまとめる感じです
--キャラクタにはCharacterとCharacterPool。Characterの群れをCharacterPoolがまとめています。

-gamecore.dのclass GameMain : GameStateを見てみましょう
--かなーり肥大化してますが、move()とdraw()があることがわかるはずです。
--そこから
---move()なら map.update() マップの更新処理、charpool.move() キャラクタの更新処理を読んでいます
---draw()なら、map.draw() マップとキャラクタ作画処理
----※マップ&キャラの作画は作画順(ソート)の関係で、一括処理になってます
--だいたいそんなかんじ


* 改造の指針

主にゲームに直結してくる上位のコードはこのへん。

gamecore.d
-ゲームシステムの大元
--メニューボタンとか運営レーザーとかはここ
--チャートも無理やりだけどここに

character.d
-ゲームキャラクタ(動くもの)
--ニコ厨、うp主、ソワカちゃん、あらし、爆風エフェクト といったものはここ
--class Characterがキャラクタ周りの振る舞いをしているので、その辺に手をいれるといいのでは

map.d
-マップに依存するもの
--芝、動画、仕切りなど
--class MapChipとかだったはず



下位のモジュール。上のサポートをしてるようなもの
config.d
-コンフィグ
--config.iniを読んで解析する

boot.d
-エントリポイント
--実行時に最初に呼ばれます

state.d
-状態遷移まわり
--ゲームの大枠の状態遷移。タイトル->ゲーム本編->エンディングとか、を管理してます。
--芝ゲーではそういった状態管理はないのでほぼ未使用。流用ですからー

clickable.d
-ゲーム中のボタンUIの処理
--流用から、後々の拡張でズタズタになってますorz

actor.d
-キャラクタの基底クラスとか、キャラクタプールとかのテンプレート

vector.d
-ベクトルとかの基本演算。あまり使ってない

keypad.d
-ゲームパッドの入力とかをまとめてる。
--マウスのリプレイレコーダ/プレーヤーとかついてますが、使ってません。流用ですからー


Dhellライブラリ・ポーティングほか
hell2.d
-SDLとopenGLのラッパライブラリ
--作画とか、音再生とかの汎用関数があります
--以下のポーティングに依存

opengl.d
openglu.d
-OpenGLのDポーティング。shinhさんのものを使ってます。

SDL/フォルダ以下すべて
-SDLのDポーティング。同じくshinhさんのものです。

* リンク

公式(の日本語訳)
http://www.kmonos.net/alang/d/1.0/
標準ライブラリPhobosのリファレンスとか、言語仕様とかはここで調べるとおk

D言語Wiki
http://f17.aaa.livedoor.jp/~labamba/
具体的なサンプルコードとか

わかったつもりになるD言語
http://www.kmonos.net/alang/wnd/
D言語の周辺情報はここで

* コメント
#comment