ぱろっと・すたじお

技術メモなどをまったりと / my site : http://parrot-studio.com/

RDGC-DungeonMaker(rdgc-dm) 0.2 リリース

ランダムなダンジョンを三行以内で作れる*1gem、
「RDGC-DungeonMaker(rdgc-dm)」の最新版を公開しました(`・ω・´)

インストール

gem install gemcutter # 入れてない人だけ
gem install rdgc-dm

使い方


動作サンプル:404 Not Found

require 'rubygems' # ruby 1.9.xでは不要
require 'rdgc-dm'
board = RDGC::Maker::DivideDungeonMaker.create(30, 40)
# 生成時にパラメータ指定可能

# boardが座標系の情報を保持
board.each do |x, y|
  t = board.tile(x, y)
  case
  when t.room?
    # 部屋
  when t.road?
    # 道
  when t.wall?
    # 壁
end

可視性制御(0.2.0 new!)

board = RDGC::Maker::DivideDungeonMaker.create(30, 40)
# Boardを作っただけでは可視制御は有効にならない
board.blind_mode? #=> false

# 1. Board#set_blind_modeで可視制御を有効にする
board.set_blind_mode # :none/:normal/:blind 省略時は:normal

# 2. 必要ならばArea#set_blindでArea単位の個別指定をする
board.rooms.choice.set_blind(:dark)

# 3. Board#fill_blindで可視状態を初期化する
# 2.と3.の手順が逆転すると正常に動かない
board.fill_blind

# 4. Board#open_blind(x, y, view_range)で不可視状態を可視状態にする
# playerが(5, 10)に存在し、見える範囲が2
view_range = 2
board.open_blind(5, 10, view_range)

# 5. Board#visible?/invisible?/dark?で可視性をチェックし、描画に使う
board.visible?(5, 10) #=> true
board.visible?(3, 10) #=> true
board.visible?(2, 10) #=> false
# 実際には移動可能範囲のみが可視状態になる(壁があればそこは処理されない)

# ...

# playerが(6, 10)に移動した
board.open_blind(6, 10, view_range)
board.visible?(6, 10) #=> true
board.visible?(5, 10) #=> true
# 一度歩いた場所は見えるようになっている
board.visible?(3, 10) #=> true

可視性の制御については、コードを見るより、
"RO"gue #1 (rev.2)を実際にやってもらった方が理解しやすいかと


"RO"gue #1 〜桃色の迷宮〜 (rev.2) リリース - どっかのBlogの前置きのような

*1:オブジェクトを作るのは三行以内だけども、そこから情報を引き出して表示やらなにやらは必要