D言語をはじめる

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が付属してない為(?)、そのままではコンパイルできないので注意。
    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言語の周辺情報はここで

コメント

  • 何か加筆されてる気がする。 -- kaikai (2009-03-20 23:08:07)
  • sowakaが出てこないw -- 名無しさん (2009-11-14 17:18:55)
名前:
コメント:

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年11月14日 17:18