WHITELEAF:Kindle応援サイト

KindleでWEB小説を読もう! Narou.rb 公開中

続 Min-in 駆動型ゲームライブラリ


前回は method_missing とか使ったりして、ヒドイもんだったけど今回はちょっと真面目(当社比)
ライブラリが揃っていたと仮定して、ゲーム部分はこんな感じになりす。

require_relative "framework"
require_relative "unit"
require_relative "mixinlibrary"

class Enemy < Unit
  include Move, Fire, Render
  setting {
    position rand(800), rand(600)
    speed rand * 3 + 2.0
    size 40, 40
    color [255, 0, 0]
    fire_interval 20
    bullet Bullet
  }
end

class Bullet < Unit
  include Move, Render
  setting {
    speed 2
    size 10, 10
    color [0, 255, 0]
  }
end

class Player < Unit
  include InputMove, Render
  setting {
    position 100, 200
    speed 10
    size 50, 50
    color [255, 255, 255]
  }
end

class MyApplication < Framework
  def initialize
    super(800, 600)
    @player = Player.new
    @enemies = []
    5.times {
      enemy = Enemy.new
      enemy.extend(Fire::Homing)
      enemy.homing_target(@player)
      @enemies << enemy
    }
    regist_units(@player, @enemies)
  end
end

MyApplication.boot

初期化とかはちゃんとインスタンス作成時なので、継承関係は構築済みなので、kind_of? で依存関係のチェックが可能。
@enemy に extend してるのでわかると思うけど、オブジェクトに対しての Mix-in にたいしても Render とかとまったく同じインターフェイスで拡張が書けます。

けどやっぱりカオス。まぁ前回よりかは遥かにましですけど。

細かい実装はZIPにまとめたコードを参照のこと。頭が痛くなるコードでごめんなさい。

コード一式ダウンロード:http://ux.getuploader.com/whiteleaf/download/3/meta.zip