週に一回は書きますよ 月に4つ記事を書けばノルマは満たされます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Monadiusを参考にHaskellでゲームを製作しています。なれない言語を扱う中で、気になったことがありました。

Monadius中では、ビックバイパー、オプション、弾、敵、地形などすべての要素は、GameObjectという型を持っています。
data GameObject = -- objects that are actually rendered and moved.
  VicViper{ -- player's fighter.
    tag::Maybe Int,position::Complex Double,hitDisp::Shape,hp::Int,
    trail::[Complex Double],
    speed::Double,
    powerUpPointer::Int,
    powerUpLevels::Array Int Int,
    reloadTime::Int,weaponEnergy::Int,
    ageAfterDeath::Int
    } |
  Option{ -- trailing support device. 中略
    } |
  StandardMissile{
    } | -- missile 以下略
VicViperだけは詳細を載せました。位置やらパワーアップ状態やらがレコードの要素になっています。
updateObjectという関数にこの要素を渡すと、少し未来のこの要素が帰ってきます。
  updateGameObject::GameObject->[GameObject]
  updateGameObject vicViper@VicViper{} = sounds ++ newShields ++
  (略)
  updateGameObject option@Option{} = makeMetalionShots option{
    position = trail vicViper !! (10*optionTag option),
    reloadTime = max 0 $ reloadTime option - 1
  }
  updateGameObject miso@StandardMissile{} = if hp miso <=0 then
  (略)
  updateGameObject shot@StandardRailgun{} = if hp shot <=0 then [] else
    [shot{position=position shot + velocity shot}]  
  updateGameObject laser@StandardLaser{} = if hp laser <=0 then [] else
  (略)
  updateGameObject shield@Shield{} = if(hp shield<=0) then [] else [
  (略)
こんなのがすべての要素について書いてあります。そのほか、要素を描画するrenderGameObjectという関数もあり、こちらもすべての要素について描画方法を書いてあります。

すべての要素について、更新処理や描画処理を一箇所にまとめて書かなければいけないのでしょうか。私はそういう風に書くことが少ないので、ちょっと当惑しました。

たとえばJavaだったら、私はこんな風に書きます。
public interface GameObject {
    void update(Game s);
    void draw(java.awt.Graphics g);
    void isValid();
}
public class VicViper implements GameObject {
    public void update(Game s) {
        以下略
いろいろな要素の更新・描画関数が一箇所に集まっていると、コードが見にくくなりがちなような気がします。慣れたら平気になるのでしょうか。

以下数回にわたって、上のMonadius的書式を下のJava式書式に変える方法について書きます。
スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://gusmachine.blog49.fc2.com/tb.php/11-102c2706
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。