rdgc-dm 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +64 -1
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/lib/rdgc/map/blind_area.rb +183 -0
- data/lib/rdgc/map/board.rb +8 -0
- data/lib/rdgc/map/direction.rb +58 -0
- data/lib/rdgc-dm.rb +2 -0
- data/rdgc-dm.gemspec +9 -6
- data/spec/rdgc/map/06_board_spec.rb +32 -0
- data/spec/rdgc/map/07_direction_spec.rb +56 -0
- data/spec/rdgc/map/08_blind_area_spec.rb +336 -0
- metadata +12 -19
    
        data/README.rdoc
    CHANGED
    
    | @@ -76,6 +76,69 @@ License:: The MIT License | |
| 76 76 | 
             
            * :max_depth       => 分割再帰の深さ max_depth=nのとき、Blockの最大数は2^nになる
         | 
| 77 77 | 
             
            * :cross_road_ratio => 交差点生成率(0 <= x <= 9)
         | 
| 78 78 |  | 
| 79 | 
            +
            == Blind Area(from 0.2)
         | 
| 80 | 
            +
             | 
| 81 | 
            +
             Boardが保持する座標系について、座標ごとの可視・不可視を制御する仕組み
         | 
| 82 | 
            +
             あくまで状態の管理であり、描画時にその情報を元にした処理を行わないと意味がない
         | 
| 83 | 
            +
             サンプル実装である"RO"gueの動作を参考に
         | 
| 84 | 
            +
             http://sourceforge.jp/projects/rdgc/
         | 
| 85 | 
            +
             
         | 
| 86 | 
            +
             
         | 
| 87 | 
            +
             require 'rubygems'
         | 
| 88 | 
            +
             require 'rdgc-dm'
         | 
| 89 | 
            +
             
         | 
| 90 | 
            +
             board = RDGC::Maker::DivideDungeonMaker.create(30, 40)
         | 
| 91 | 
            +
             # Boardを作っただけでは可視制御は有効にならない
         | 
| 92 | 
            +
             board.blind_mode? #=> false
         | 
| 93 | 
            +
             
         | 
| 94 | 
            +
             # 1. Board#set_blind_modeで可視制御を有効にする
         | 
| 95 | 
            +
             board.set_blind_mode # :none/:normal/:blind 省略時は:normal
         | 
| 96 | 
            +
             
         | 
| 97 | 
            +
             # 2. 必要ならばArea#set_blindでArea単位の個別指定をする
         | 
| 98 | 
            +
             board.rooms.choice.set_blind(:dark)
         | 
| 99 | 
            +
             
         | 
| 100 | 
            +
             # 3. Board#fill_blindで可視状態を初期化する
         | 
| 101 | 
            +
             # 2.と3.の手順が逆転すると正常に動かない
         | 
| 102 | 
            +
             board.fill_blind
         | 
| 103 | 
            +
             
         | 
| 104 | 
            +
             # 4. Board#open_blind(x, y, view_range)で不可視状態を可視状態にする
         | 
| 105 | 
            +
             # playerが(5, 10)に存在し、見える範囲が2
         | 
| 106 | 
            +
             view_range = 2
         | 
| 107 | 
            +
             board.open_blind(5, 10, view_range)
         | 
| 108 | 
            +
             
         | 
| 109 | 
            +
             # 5. Board#visible?/invisible?/dark?で可視性をチェックし、描画に使う
         | 
| 110 | 
            +
             board.visible?(5, 10) #=> true
         | 
| 111 | 
            +
             board.visible?(3, 10) #=> true
         | 
| 112 | 
            +
             board.visible?(2, 10) #=> false
         | 
| 113 | 
            +
             # 実際には移動可能範囲のみが可視状態になる(壁があればそこは処理されない)
         | 
| 114 | 
            +
             
         | 
| 115 | 
            +
             # ...
         | 
| 116 | 
            +
             
         | 
| 117 | 
            +
             # playerが(6, 10)に移動した
         | 
| 118 | 
            +
             board.open_blind(6, 10, view_range)
         | 
| 119 | 
            +
             board.visible?(6, 10) #=> true
         | 
| 120 | 
            +
             board.visible?(5, 10) #=> true
         | 
| 121 | 
            +
             # 一度歩いた場所は見えるようになっている
         | 
| 122 | 
            +
             board.visible?(3, 10) #=> true
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            === Area#set_blindに指定できるレベル
         | 
| 125 | 
            +
             | 
| 126 | 
            +
             * :none => Area内は最初から全て可視
         | 
| 127 | 
            +
             * :open => 最初は全体が不可視だが、Area内の座標に対してopen_blindされると、Area全体が可視状態になる
         | 
| 128 | 
            +
             * :blind => 最初は全体が不可視で、open_blindされた場所だけが可視状態
         | 
| 129 | 
            +
             * :dark => open_blind時にArea内の状態が一度初期化され、常にopen_blindされた領域しか見えない(ダークゾーン)
         | 
| 130 | 
            +
             | 
| 131 | 
            +
            === Board#set_blind_modeに指定できるレベル
         | 
| 132 | 
            +
             | 
| 133 | 
            +
             * :normal => Roomが全て:open、Roadが全て:blind(デフォルト)
         | 
| 134 | 
            +
             * :none => Room/Road共に:none
         | 
| 135 | 
            +
             * :blind => Room/Road共に:blind
         | 
| 136 | 
            +
             | 
| 137 | 
            +
             Board全体を:darkに指定するオプションは定義されていない
         | 
| 138 | 
            +
             必要ならば手動で行う
         | 
| 139 | 
            +
             
         | 
| 140 | 
            +
             board.areas.each{|a| a.blind_level(:dark)}
         | 
| 141 | 
            +
             | 
| 79 142 | 
             
            == FAQ
         | 
| 80 143 |  | 
| 81 144 | 
             
            === パラメータが適用されない
         | 
| @@ -133,7 +196,7 @@ License:: The MIT License | |
| 133 196 | 
             
             rdgc-dmには含んでいません(RDGCとしては存在します)
         | 
| 134 197 |  | 
| 135 198 | 
             
             Area#ramdom_pointで各Areaのランダムな座標が取れますので、
         | 
| 136 | 
            -
              | 
| 199 | 
            +
             それを使ってスタートやゴールや障害を配置してください
         | 
| 137 200 |  | 
| 138 201 | 
             
            === 自分でロジックを書きたい
         | 
| 139 202 |  | 
    
        data/Rakefile
    CHANGED
    
    | @@ -8,13 +8,13 @@ begin | |
| 8 8 | 
             
                gem.summary = %Q{Random Dungeon Maker from RDGC}
         | 
| 9 9 | 
             
                gem.description = <<-TXT
         | 
| 10 10 | 
             
                This gem is part of RDGC - Ruby(Random) Dungeon Game Core.
         | 
| 11 | 
            -
                RDGC is core of random dungeon game (like rogue), make dungeon, manage  | 
| 11 | 
            +
                RDGC is core of random dungeon game (like rogue), make dungeon, manage monsters etc.
         | 
| 12 12 | 
             
                TXT
         | 
| 13 13 | 
             
                gem.email = "parrot@users.sourceforge.jp"
         | 
| 14 14 | 
             
                gem.homepage = "http://github.com/parrot-studio/rdgc-dm"
         | 
| 15 15 | 
             
                gem.authors = ["parrot_studio"]
         | 
| 16 16 | 
             
                gem.required_ruby_version = ">= 1.8.7"
         | 
| 17 | 
            -
                gem.add_development_dependency "rspec", ">= 1.2.9"
         | 
| 17 | 
            +
                #gem.add_development_dependency "rspec", ">= 1.2.9"
         | 
| 18 18 | 
             
                # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
         | 
| 19 19 | 
             
              end
         | 
| 20 20 | 
             
              Jeweler::GemcutterTasks.new
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0. | 
| 1 | 
            +
            0.2.0
         | 
| @@ -0,0 +1,183 @@ | |
| 1 | 
            +
            # coding: UTF-8
         | 
| 2 | 
            +
            module RDGC
         | 
| 3 | 
            +
              module Map
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                class Area
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def blind_level
         | 
| 8 | 
            +
                    @blind_level
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def set_blind(level)
         | 
| 12 | 
            +
                    return unless [:none, :open, :blind, :dark].include?(level)
         | 
| 13 | 
            +
                    @blind_level = level
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def blind_level_none?
         | 
| 17 | 
            +
                    blind_level == :none ? true : false
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def blind_level_open?
         | 
| 21 | 
            +
                    blind_level == :open ? true : false
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def blind_level_blind?
         | 
| 25 | 
            +
                    blind_level == :blind ? true : false
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  def blind_level_dark?
         | 
| 29 | 
            +
                    blind_level == :dark ? true : false
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                end # Area
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                class Board
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  BLIND_MODE_NONE = :none
         | 
| 37 | 
            +
                  BLIND_MODE_NORMAL = :normal
         | 
| 38 | 
            +
                  BLIND_MODE_BLIND = :blind
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  # override
         | 
| 41 | 
            +
                  def blind_level
         | 
| 42 | 
            +
                    # do nothing
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  # override
         | 
| 46 | 
            +
                  def set_blind(level)
         | 
| 47 | 
            +
                    # do nothing
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  def set_blind_mode(mode = nil)
         | 
| 51 | 
            +
                    @blind_mode = mode
         | 
| 52 | 
            +
                    @blind_mode ||= BLIND_MODE_NORMAL
         | 
| 53 | 
            +
                    init_blind
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  def blind_mode
         | 
| 57 | 
            +
                    @blind_mode
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  def blind_mode?
         | 
| 61 | 
            +
                    @blind_mode ? true : false
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  def fill_blind
         | 
| 65 | 
            +
                    areas.each do |r|
         | 
| 66 | 
            +
                      case
         | 
| 67 | 
            +
                      when r.blind_level_none?
         | 
| 68 | 
            +
                        target = :none
         | 
| 69 | 
            +
                      when r.blind_level_dark?
         | 
| 70 | 
            +
                        target = :dark
         | 
| 71 | 
            +
                      else
         | 
| 72 | 
            +
                        target = :blind
         | 
| 73 | 
            +
                      end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                      r.each do |x, y|
         | 
| 76 | 
            +
                        blind_data[x][y] = target
         | 
| 77 | 
            +
                      end
         | 
| 78 | 
            +
                    end
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  def visible?(x, y)
         | 
| 82 | 
            +
                    return false  unless has_xy?(x, y)
         | 
| 83 | 
            +
                    return true unless blind_mode?
         | 
| 84 | 
            +
                    v = blind_data[x][y]
         | 
| 85 | 
            +
                    return false unless v
         | 
| 86 | 
            +
                    v == :none ? true : false
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  def invisible?(x, y)
         | 
| 90 | 
            +
                    ! visible?(x, y)
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  def dark?(x, y)
         | 
| 94 | 
            +
                    return false  unless has_xy?(x, y)
         | 
| 95 | 
            +
                    blind_data[x][y] == :dark ? true : false
         | 
| 96 | 
            +
                  end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                  def open_blind(sx, sy, range)
         | 
| 99 | 
            +
                    return unless movable?(sx, sy)
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                    # 先にdarkのエリアを塗りつぶす
         | 
| 102 | 
            +
                    fill_dark_before_cancel
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                    # 再帰処理で解除
         | 
| 105 | 
            +
                    open_list = []
         | 
| 106 | 
            +
                    cancel_blind(sx, sy, open_list, range)
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                    # :openのareaを全解除
         | 
| 109 | 
            +
                    return if open_list.empty?
         | 
| 110 | 
            +
                    open_list.uniq.each do |a|
         | 
| 111 | 
            +
                      a.each do |x, y|
         | 
| 112 | 
            +
                        blind_data[x][y] = :none
         | 
| 113 | 
            +
                      end
         | 
| 114 | 
            +
                    end
         | 
| 115 | 
            +
                  end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                  def blind_data
         | 
| 118 | 
            +
                    @blind_data ||= Hash.new{|hash, key| hash[key] = {}}
         | 
| 119 | 
            +
                    @blind_data
         | 
| 120 | 
            +
                  end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                  def init_blind
         | 
| 123 | 
            +
                    case blind_mode
         | 
| 124 | 
            +
                    when BLIND_MODE_NONE
         | 
| 125 | 
            +
                      init_blind_all(:none)
         | 
| 126 | 
            +
                    when BLIND_MODE_BLIND
         | 
| 127 | 
            +
                      init_blind_all(:blind)
         | 
| 128 | 
            +
                    when BLIND_MODE_NORMAL
         | 
| 129 | 
            +
                      init_blind_normal
         | 
| 130 | 
            +
                    end
         | 
| 131 | 
            +
                  end
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                  def init_blind_all(level)
         | 
| 134 | 
            +
                    areas.each do |r|
         | 
| 135 | 
            +
                      r.set_blind(level)
         | 
| 136 | 
            +
                    end
         | 
| 137 | 
            +
                  end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                  def init_blind_normal
         | 
| 140 | 
            +
                    rooms.each do |r|
         | 
| 141 | 
            +
                      r.set_blind(:open)
         | 
| 142 | 
            +
                    end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                    roads.each do |r|
         | 
| 145 | 
            +
                      r.set_blind(:blind)
         | 
| 146 | 
            +
                    end
         | 
| 147 | 
            +
                  end
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                  private
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                  def fill_dark_before_cancel
         | 
| 152 | 
            +
                    areas.select{|r| r.blind_level_dark?}.each do |r|
         | 
| 153 | 
            +
                      r.each do |x, y|
         | 
| 154 | 
            +
                        blind_data[x][y] = :dark
         | 
| 155 | 
            +
                      end
         | 
| 156 | 
            +
                    end
         | 
| 157 | 
            +
                  end
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                  def cancel_blind(sx, sy, open_list, range, r=0)
         | 
| 160 | 
            +
                    return unless movable?(sx, sy)
         | 
| 161 | 
            +
                    return if r > range
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                    # 今のポイントを可視に
         | 
| 164 | 
            +
                    blind_data[sx][sy] = :none
         | 
| 165 | 
            +
             | 
| 166 | 
            +
                    # 今の座標が:openならareaを可視に
         | 
| 167 | 
            +
                    areas_for(sx, sy).each do |a|
         | 
| 168 | 
            +
                      next unless a.blind_level_open?
         | 
| 169 | 
            +
                      open_list << a unless open_list.include?(a)
         | 
| 170 | 
            +
                    end
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    # 再帰的に処理
         | 
| 173 | 
            +
                    Direction.each do |dir|
         | 
| 174 | 
            +
                      nx = sx + dir.x
         | 
| 175 | 
            +
                      ny = sy + dir.y
         | 
| 176 | 
            +
                      cancel_blind(nx, ny, open_list, range, r+1)
         | 
| 177 | 
            +
                    end
         | 
| 178 | 
            +
                  end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                end # Board
         | 
| 181 | 
            +
             | 
| 182 | 
            +
              end
         | 
| 183 | 
            +
            end
         | 
    
        data/lib/rdgc/map/board.rb
    CHANGED
    
    
| @@ -0,0 +1,58 @@ | |
| 1 | 
            +
            # -*- coding: UTF-8 -*-
         | 
| 2 | 
            +
            module RDGC
         | 
| 3 | 
            +
              module Map
         | 
| 4 | 
            +
                class Direction
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  attr_reader :x, :y
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  private
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def self.create(x, y)
         | 
| 11 | 
            +
                    obj = self.new
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    obj.instance_eval do
         | 
| 14 | 
            +
                      @x = x
         | 
| 15 | 
            +
                      @y = y
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    obj.freeze
         | 
| 19 | 
            +
                    obj
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  public
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  SELF = self.create(0, 0)
         | 
| 25 | 
            +
                  LEFT = self.create(-1, 0)
         | 
| 26 | 
            +
                  RIGHT = self.create(1, 0)
         | 
| 27 | 
            +
                  UPPER = self.create(0, -1)
         | 
| 28 | 
            +
                  BOTTOM = self.create(0, 1)
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  def self.each
         | 
| 31 | 
            +
                    return to_enum(:each) unless block_given?
         | 
| 32 | 
            +
                    self.all.each do |d|
         | 
| 33 | 
            +
                      yield(d)
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def self.all
         | 
| 38 | 
            +
                    [LEFT, UPPER, RIGHT, BOTTOM]
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  def opposite
         | 
| 42 | 
            +
                    case self
         | 
| 43 | 
            +
                    when LEFT
         | 
| 44 | 
            +
                      RIGHT
         | 
| 45 | 
            +
                    when RIGHT
         | 
| 46 | 
            +
                      LEFT
         | 
| 47 | 
            +
                    when UPPER
         | 
| 48 | 
            +
                      BOTTOM
         | 
| 49 | 
            +
                    when BOTTOM
         | 
| 50 | 
            +
                      UPPER
         | 
| 51 | 
            +
                    when SELF
         | 
| 52 | 
            +
                      SELF
         | 
| 53 | 
            +
                    end
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
            end
         | 
    
        data/lib/rdgc-dm.rb
    CHANGED
    
    
    
        data/rdgc-dm.gemspec
    CHANGED
    
    | @@ -5,13 +5,13 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{rdgc-dm}
         | 
| 8 | 
            -
              s.version = "0. | 
| 8 | 
            +
              s.version = "0.2.0"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["parrot_studio"]
         | 
| 12 | 
            -
              s.date = %q{2010- | 
| 12 | 
            +
              s.date = %q{2010-05-13}
         | 
| 13 13 | 
             
              s.description = %q{    This gem is part of RDGC - Ruby(Random) Dungeon Game Core.
         | 
| 14 | 
            -
                RDGC is core of random dungeon game (like rogue), make dungeon, manage  | 
| 14 | 
            +
                RDGC is core of random dungeon game (like rogue), make dungeon, manage monsters etc.
         | 
| 15 15 | 
             
            }
         | 
| 16 16 | 
             
              s.email = %q{parrot@users.sourceforge.jp}
         | 
| 17 17 | 
             
              s.extra_rdoc_files = [
         | 
| @@ -31,8 +31,10 @@ Gem::Specification.new do |s| | |
| 31 31 | 
             
                 "lib/rdgc/maker/dungeon_maker.rb",
         | 
| 32 32 | 
             
                 "lib/rdgc/maker/temp_block.rb",
         | 
| 33 33 | 
             
                 "lib/rdgc/map/area.rb",
         | 
| 34 | 
            +
                 "lib/rdgc/map/blind_area.rb",
         | 
| 34 35 | 
             
                 "lib/rdgc/map/block.rb",
         | 
| 35 36 | 
             
                 "lib/rdgc/map/board.rb",
         | 
| 37 | 
            +
                 "lib/rdgc/map/direction.rb",
         | 
| 36 38 | 
             
                 "lib/rdgc/map/road.rb",
         | 
| 37 39 | 
             
                 "lib/rdgc/map/room.rb",
         | 
| 38 40 | 
             
                 "lib/rdgc/map/tile.rb",
         | 
| @@ -50,6 +52,8 @@ Gem::Specification.new do |s| | |
| 50 52 | 
             
                 "spec/rdgc/map/04_room_spec.rb",
         | 
| 51 53 | 
             
                 "spec/rdgc/map/05_block_spec.rb",
         | 
| 52 54 | 
             
                 "spec/rdgc/map/06_board_spec.rb",
         | 
| 55 | 
            +
                 "spec/rdgc/map/07_direction_spec.rb",
         | 
| 56 | 
            +
                 "spec/rdgc/map/08_blind_area_spec.rb",
         | 
| 53 57 | 
             
                 "spec/rdgc/util/01_config_spec.rb",
         | 
| 54 58 | 
             
                 "spec/rdgc/util/02_random_util_spec.rb",
         | 
| 55 59 | 
             
                 "spec/spec.opts",
         | 
| @@ -69,6 +73,8 @@ Gem::Specification.new do |s| | |
| 69 73 | 
             
                 "spec/rdgc/map/06_board_spec.rb",
         | 
| 70 74 | 
             
                 "spec/rdgc/map/01_tile_spec.rb",
         | 
| 71 75 | 
             
                 "spec/rdgc/map/03_road_spec.rb",
         | 
| 76 | 
            +
                 "spec/rdgc/map/08_blind_area_spec.rb",
         | 
| 77 | 
            +
                 "spec/rdgc/map/07_direction_spec.rb",
         | 
| 72 78 | 
             
                 "spec/rdgc/map/05_block_spec.rb",
         | 
| 73 79 | 
             
                 "spec/rdgc/map/02_area_spec.rb",
         | 
| 74 80 | 
             
                 "spec/rdgc/maker/02_divide_temp_block_spec.rb",
         | 
| @@ -82,12 +88,9 @@ Gem::Specification.new do |s| | |
| 82 88 | 
             
                s.specification_version = 3
         | 
| 83 89 |  | 
| 84 90 | 
             
                if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
         | 
| 85 | 
            -
                  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
         | 
| 86 91 | 
             
                else
         | 
| 87 | 
            -
                  s.add_dependency(%q<rspec>, [">= 1.2.9"])
         | 
| 88 92 | 
             
                end
         | 
| 89 93 | 
             
              else
         | 
| 90 | 
            -
                s.add_dependency(%q<rspec>, [">= 1.2.9"])
         | 
| 91 94 | 
             
              end
         | 
| 92 95 | 
             
            end
         | 
| 93 96 |  | 
| @@ -22,6 +22,38 @@ describe RDGC::Map::Board, 'has rooms and roads from Blocks' do | |
| 22 22 | 
             
                b.right.should == 40
         | 
| 23 23 | 
             
              end
         | 
| 24 24 |  | 
| 25 | 
            +
              it "#areas provides rooms and roads list" do
         | 
| 26 | 
            +
                b = Board.create(0, 20, 0, 20)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                room = Room.create(5, 15, 5, 15)
         | 
| 29 | 
            +
                road1 = Road.create(0, 4, 10, 10)
         | 
| 30 | 
            +
                road2 = Road.create(16, 20, 12, 12)
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                b.rooms << room
         | 
| 33 | 
            +
                b.roads << road1
         | 
| 34 | 
            +
                b.roads << road2
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                b.areas.each do |a|
         | 
| 37 | 
            +
                  [room, road1, road2].should be_include(a)
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              it "#areas_for provide rooms/roads list at (x, y)" do
         | 
| 42 | 
            +
                b = Board.create(0, 20, 0, 20)
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                room = Room.create(5, 15, 5, 15)
         | 
| 45 | 
            +
                road1 = Road.create(0, 4, 10, 10)
         | 
| 46 | 
            +
                road2 = Road.create(16, 20, 12, 12)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                b.rooms << room
         | 
| 49 | 
            +
                b.roads << road1
         | 
| 50 | 
            +
                b.roads << road2
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                b.areas_for(10, 10).should be_include(room)
         | 
| 53 | 
            +
                b.areas_for(10, 2).should be_include(road1)
         | 
| 54 | 
            +
                b.areas_for(12, 20).should be_include(road2)
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
             | 
| 25 57 | 
             
              it "#fill will fill room/road, and fill at wall other coordinates" do
         | 
| 26 58 | 
             
                b = Board.create(0, 20, 0, 20)
         | 
| 27 59 |  | 
| @@ -0,0 +1,56 @@ | |
| 1 | 
            +
            # coding: UTF-8
         | 
| 2 | 
            +
            require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            include RDGC::Map
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            describe RDGC::Map::Direction do
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              it "SELF is point itself" do
         | 
| 9 | 
            +
                Direction::SELF.x.should == 0
         | 
| 10 | 
            +
                Direction::SELF.y.should == 0
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                Direction::SELF.opposite.should equal(Direction::SELF)
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              it "UPPER is upper of point" do
         | 
| 16 | 
            +
                Direction::UPPER.x.should == 0
         | 
| 17 | 
            +
                Direction::UPPER.y.should == -1
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                Direction::UPPER.opposite.should equal(Direction::BOTTOM)
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              it "BOTTOM is bottom of point" do
         | 
| 23 | 
            +
                Direction::BOTTOM.x.should == 0
         | 
| 24 | 
            +
                Direction::BOTTOM.y.should == 1
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                Direction::BOTTOM.opposite.should equal(Direction::UPPER)
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              it "LEFT is left of point" do
         | 
| 30 | 
            +
                Direction::LEFT.x.should == -1
         | 
| 31 | 
            +
                Direction::LEFT.y.should == 0
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                Direction::LEFT.opposite.should equal(Direction::RIGHT)
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              it "RIGHT is right of point" do
         | 
| 37 | 
            +
                Direction::RIGHT.x.should == 1
         | 
| 38 | 
            +
                Direction::RIGHT.y.should == 0
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                Direction::RIGHT.opposite.should equal(Direction::LEFT)
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              it "all provides all Direction at clockwise" do
         | 
| 44 | 
            +
                dirs = [Direction::LEFT, Direction::UPPER, Direction::RIGHT, Direction::BOTTOM]
         | 
| 45 | 
            +
                Direction.all.should == dirs
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              it "each provides each Direction at clockwise" do
         | 
| 49 | 
            +
                dirs = [Direction::LEFT, Direction::UPPER, Direction::RIGHT, Direction::BOTTOM]
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                Direction.each.with_index do |d, i|
         | 
| 52 | 
            +
                  d.should equal(dirs[i])
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            end
         | 
| @@ -0,0 +1,336 @@ | |
| 1 | 
            +
            # coding: UTF-8
         | 
| 2 | 
            +
            require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            include RDGC::Map
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            describe "blind mode" do
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              describe RDGC::Map::Area, "with blind" do
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                before do
         | 
| 11 | 
            +
                  @area = Area.new
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                it "level none" do
         | 
| 15 | 
            +
                  @area.set_blind(:none)
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  @area.blind_level.should == :none
         | 
| 18 | 
            +
                  @area.blind_level_none?.should be_true
         | 
| 19 | 
            +
                  @area.blind_level_open?.should be_false
         | 
| 20 | 
            +
                  @area.blind_level_blind?.should be_false
         | 
| 21 | 
            +
                  @area.blind_level_dark?.should be_false
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                it "level open" do
         | 
| 25 | 
            +
                  @area.set_blind(:open)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  @area.blind_level.should == :open
         | 
| 28 | 
            +
                  @area.blind_level_none?.should be_false
         | 
| 29 | 
            +
                  @area.blind_level_open?.should be_true
         | 
| 30 | 
            +
                  @area.blind_level_blind?.should be_false
         | 
| 31 | 
            +
                  @area.blind_level_dark?.should be_false
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                it "level blind" do
         | 
| 35 | 
            +
                  @area.set_blind(:blind)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  @area.blind_level.should == :blind
         | 
| 38 | 
            +
                  @area.blind_level_none?.should be_false
         | 
| 39 | 
            +
                  @area.blind_level_open?.should be_false
         | 
| 40 | 
            +
                  @area.blind_level_blind?.should be_true
         | 
| 41 | 
            +
                  @area.blind_level_dark?.should be_false
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                it "level dark" do
         | 
| 45 | 
            +
                  @area.set_blind(:dark)
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  @area.blind_level.should == :dark
         | 
| 48 | 
            +
                  @area.blind_level_none?.should be_false
         | 
| 49 | 
            +
                  @area.blind_level_open?.should be_false
         | 
| 50 | 
            +
                  @area.blind_level_blind?.should be_false
         | 
| 51 | 
            +
                  @area.blind_level_dark?.should be_true
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                it "unexpected level" do
         | 
| 55 | 
            +
                  @area.set_blind(:hoge)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  @area.blind_level.should be_nil
         | 
| 58 | 
            +
                  @area.blind_level_none?.should be_false
         | 
| 59 | 
            +
                  @area.blind_level_open?.should be_false
         | 
| 60 | 
            +
                  @area.blind_level_blind?.should be_false
         | 
| 61 | 
            +
                  @area.blind_level_dark?.should be_false
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              describe RDGC::Map::Board, "with blind" do
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                before do
         | 
| 69 | 
            +
                  @board = Board.create(0, 20, 0, 20)
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  @room = Room.create(5, 15, 5, 15)
         | 
| 72 | 
            +
                  @road1 = Road.create(0, 4, 10, 10)
         | 
| 73 | 
            +
                  @road2 = Road.create(16, 20, 12, 12)
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  @board.rooms << @room
         | 
| 76 | 
            +
                  @board.roads << @road1
         | 
| 77 | 
            +
                  @board.roads << @road2
         | 
| 78 | 
            +
                  @board.fill
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                it "#blind_level/#set_blind is disable" do
         | 
| 82 | 
            +
                  [:none, :open, :blind, :dark].each do |lv|
         | 
| 83 | 
            +
                    @board.set_blind(lv)
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                    @board.blind_level.should be_nil
         | 
| 86 | 
            +
                    @board.blind_level_none?.should be_false
         | 
| 87 | 
            +
                    @board.blind_level_open?.should be_false
         | 
| 88 | 
            +
                    @board.blind_level_blind?.should be_false
         | 
| 89 | 
            +
                    @board.blind_level_dark?.should be_false
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                it "#init_blind_all will set :blind to all rooms/roads" do
         | 
| 94 | 
            +
                  @board.init_blind_all(:none)
         | 
| 95 | 
            +
                  @board.areas.each do |a|
         | 
| 96 | 
            +
                    a.blind_level_none?.should be_true
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                  @board.init_blind_all(:blind)
         | 
| 100 | 
            +
                  @board.areas.each do |a|
         | 
| 101 | 
            +
                    a.blind_level_blind?.should be_true
         | 
| 102 | 
            +
                  end
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                it "#init_blind_normal will set :blind to roads, :open to rooms" do
         | 
| 106 | 
            +
                  @board.init_blind_normal
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                  @room.blind_level_open?.should be_true
         | 
| 109 | 
            +
                  @road1.blind_level_blind?.should be_true
         | 
| 110 | 
            +
                  @road2.blind_level_blind?.should be_true
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                it "#init_blind will set blind_level each rooms/roads as blind_mode" do
         | 
| 114 | 
            +
                  @board.instance_eval do
         | 
| 115 | 
            +
                    @blind_mode = Board::BLIND_MODE_NONE
         | 
| 116 | 
            +
                  end
         | 
| 117 | 
            +
                  @board.init_blind
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                  @room.blind_level_none?.should be_true
         | 
| 120 | 
            +
                  @road1.blind_level_none?.should be_true
         | 
| 121 | 
            +
                  @road2.blind_level_none?.should be_true
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                  @board.instance_eval do
         | 
| 124 | 
            +
                    @blind_mode = Board::BLIND_MODE_NORMAL
         | 
| 125 | 
            +
                  end
         | 
| 126 | 
            +
                  @board.init_blind
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                  @room.blind_level_open?.should be_true
         | 
| 129 | 
            +
                  @road1.blind_level_blind?.should be_true
         | 
| 130 | 
            +
                  @road2.blind_level_blind?.should be_true
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                  @board.instance_eval do
         | 
| 133 | 
            +
                    @blind_mode = Board::BLIND_MODE_BLIND
         | 
| 134 | 
            +
                  end
         | 
| 135 | 
            +
                  @board.init_blind
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                  @room.blind_level_blind?.should be_true
         | 
| 138 | 
            +
                  @road1.blind_level_blind?.should be_true
         | 
| 139 | 
            +
                  @road2.blind_level_blind?.should be_true
         | 
| 140 | 
            +
                end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                it "#set_blind_mode will set blind_mode, and init_blind" do
         | 
| 143 | 
            +
                  @board.blind_mode?.should be_false
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                  @board.set_blind_mode(Board::BLIND_MODE_NONE)
         | 
| 146 | 
            +
                  @board.blind_mode.should == Board::BLIND_MODE_NONE
         | 
| 147 | 
            +
                  @board.blind_mode?.should be_true
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                  @room.blind_level_none?.should be_true
         | 
| 150 | 
            +
                  @road1.blind_level_none?.should be_true
         | 
| 151 | 
            +
                  @road2.blind_level_none?.should be_true
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                  @board.set_blind_mode(Board::BLIND_MODE_NORMAL)
         | 
| 154 | 
            +
                  @board.blind_mode.should == Board::BLIND_MODE_NORMAL
         | 
| 155 | 
            +
                  @board.blind_mode?.should be_true
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                  @room.blind_level_open?.should be_true
         | 
| 158 | 
            +
                  @road1.blind_level_blind?.should be_true
         | 
| 159 | 
            +
                  @road2.blind_level_blind?.should be_true
         | 
| 160 | 
            +
             | 
| 161 | 
            +
                  @board.set_blind_mode(Board::BLIND_MODE_BLIND)
         | 
| 162 | 
            +
                  @board.blind_mode.should == Board::BLIND_MODE_BLIND
         | 
| 163 | 
            +
                  @board.blind_mode?.should be_true
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                  @room.blind_level_blind?.should be_true
         | 
| 166 | 
            +
                  @road1.blind_level_blind?.should be_true
         | 
| 167 | 
            +
                  @road2.blind_level_blind?.should be_true
         | 
| 168 | 
            +
             | 
| 169 | 
            +
                  @board.set_blind_mode
         | 
| 170 | 
            +
                  @board.blind_mode.should == Board::BLIND_MODE_NORMAL
         | 
| 171 | 
            +
                  @board.blind_mode?.should be_true
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                  @room.blind_level_open?.should be_true
         | 
| 174 | 
            +
                  @road1.blind_level_blind?.should be_true
         | 
| 175 | 
            +
                  @road2.blind_level_blind?.should be_true
         | 
| 176 | 
            +
                end
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                it "#fill_blind will fill blind_data as each area's blind_level" do
         | 
| 179 | 
            +
                  @board.set_blind_mode
         | 
| 180 | 
            +
                  @board.fill_blind
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  @board.areas.each do |r|
         | 
| 183 | 
            +
                    r.each do |x, y|
         | 
| 184 | 
            +
                      @board.blind_data[x][y].should == :blind
         | 
| 185 | 
            +
                    end
         | 
| 186 | 
            +
                  end
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                  @board.set_blind_mode(:none)
         | 
| 189 | 
            +
                  @board.fill_blind
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                  @board.areas.each do |r|
         | 
| 192 | 
            +
                    r.each do |x, y|
         | 
| 193 | 
            +
                      @board.blind_data[x][y].should == :none
         | 
| 194 | 
            +
                    end
         | 
| 195 | 
            +
                  end
         | 
| 196 | 
            +
                end
         | 
| 197 | 
            +
             | 
| 198 | 
            +
                it "#dark? judge this point is :dark now" do
         | 
| 199 | 
            +
                  @board.set_blind_mode
         | 
| 200 | 
            +
                  @room.set_blind(:dark)
         | 
| 201 | 
            +
                  @room.blind_level_dark?.should be_true
         | 
| 202 | 
            +
                  @board.fill_blind
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                  @room.each.all?{|x, y| @board.dark?(x, y)}.should be_true
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                  tx, ty = @room.random_point
         | 
| 207 | 
            +
                  @board.blind_data[tx][ty] = :none
         | 
| 208 | 
            +
                  @board.dark?(tx, ty).should be_false
         | 
| 209 | 
            +
                end
         | 
| 210 | 
            +
             | 
| 211 | 
            +
                it "#fill_dark_before_cancel" do
         | 
| 212 | 
            +
                  @board.set_blind_mode
         | 
| 213 | 
            +
                  @room.set_blind(:dark)
         | 
| 214 | 
            +
                  @room.blind_level_dark?.should be_true
         | 
| 215 | 
            +
                  @board.fill_blind
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                  5.times do
         | 
| 218 | 
            +
                    tx, ty = @room.random_point
         | 
| 219 | 
            +
                    @board.blind_data[tx][ty] = :none
         | 
| 220 | 
            +
                  end
         | 
| 221 | 
            +
                  @room.each.all?{|x, y| @board.dark?(x, y)}.should be_false
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                  @board.instance_eval do
         | 
| 224 | 
            +
                    fill_dark_before_cancel
         | 
| 225 | 
            +
                  end
         | 
| 226 | 
            +
                  @room.each.all?{|x, y| @board.dark?(x, y)}.should be_true
         | 
| 227 | 
            +
                end
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                it "#open_blind will clear blind stat recursive" do
         | 
| 230 | 
            +
                  @board.set_blind_mode(Board::BLIND_MODE_BLIND)
         | 
| 231 | 
            +
                  @board.fill_blind
         | 
| 232 | 
            +
             | 
| 233 | 
            +
                  @board.open_blind(10, 4, 0)
         | 
| 234 | 
            +
                  @board.blind_data[10][4].should == :none
         | 
| 235 | 
            +
                  @board.blind_data[10][3].should == :blind
         | 
| 236 | 
            +
                  @board.blind_data[10][5].should == :blind
         | 
| 237 | 
            +
             | 
| 238 | 
            +
                  @board.open_blind(10, 4, 1)
         | 
| 239 | 
            +
                  @board.blind_data[10][4].should == :none
         | 
| 240 | 
            +
                  @board.blind_data[10][3].should == :none
         | 
| 241 | 
            +
                  @board.blind_data[10][5].should == :none
         | 
| 242 | 
            +
                  @board.blind_data[10][2].should == :blind
         | 
| 243 | 
            +
                  @board.blind_data[10][6].should == :blind
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                  @board.open_blind(10, 4, 2)
         | 
| 246 | 
            +
                  @board.blind_data[10][4].should == :none
         | 
| 247 | 
            +
                  @board.blind_data[10][3].should == :none
         | 
| 248 | 
            +
                  @board.blind_data[10][2].should == :none
         | 
| 249 | 
            +
                  @board.blind_data[10][1].should == :blind
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                  @board.blind_data[10][5].should == :none
         | 
| 252 | 
            +
                  @board.blind_data[9][5].should == :none
         | 
| 253 | 
            +
                  @board.blind_data[10][6].should == :none
         | 
| 254 | 
            +
                  @board.blind_data[11][5].should == :none
         | 
| 255 | 
            +
             | 
| 256 | 
            +
                  @board.blind_data[8][5].should == :blind
         | 
| 257 | 
            +
                  @board.blind_data[12][5].should == :blind
         | 
| 258 | 
            +
                  @board.blind_data[9][6].should == :blind
         | 
| 259 | 
            +
                  @board.blind_data[11][6].should == :blind
         | 
| 260 | 
            +
                  @board.blind_data[10][7].should == :blind
         | 
| 261 | 
            +
                end
         | 
| 262 | 
            +
             | 
| 263 | 
            +
                it "#open_blind will clear blind all of area for :open" do
         | 
| 264 | 
            +
                  @board.set_blind_mode
         | 
| 265 | 
            +
                  @board.fill_blind
         | 
| 266 | 
            +
             | 
| 267 | 
            +
                  @board.open_blind(10, 4, 1)
         | 
| 268 | 
            +
                  @board.blind_data[10][4].should == :none
         | 
| 269 | 
            +
                  @board.blind_data[10][3].should == :none
         | 
| 270 | 
            +
                  @board.blind_data[10][5].should == :none
         | 
| 271 | 
            +
                  @board.blind_data[10][2].should == :blind
         | 
| 272 | 
            +
             | 
| 273 | 
            +
                  @room.each do |x, y|
         | 
| 274 | 
            +
                    @board.blind_data[x][y].should == :none
         | 
| 275 | 
            +
                  end
         | 
| 276 | 
            +
                end
         | 
| 277 | 
            +
             | 
| 278 | 
            +
                it "#open_blind will clear blind, and turn to dark for opened point" do
         | 
| 279 | 
            +
                  @board.set_blind_mode
         | 
| 280 | 
            +
                  @room.set_blind(:dark)
         | 
| 281 | 
            +
                  @board.fill_blind
         | 
| 282 | 
            +
             | 
| 283 | 
            +
                  # 1歩目
         | 
| 284 | 
            +
                  @board.open_blind(10, 5, 1)
         | 
| 285 | 
            +
             | 
| 286 | 
            +
                  @board.blind_data[10][4].should == :none
         | 
| 287 | 
            +
             | 
| 288 | 
            +
                  @board.blind_data[10][5].should == :none
         | 
| 289 | 
            +
                  @board.blind_data[9][5].should == :none
         | 
| 290 | 
            +
                  @board.blind_data[11][5].should == :none
         | 
| 291 | 
            +
                  @board.blind_data[10][6].should == :none
         | 
| 292 | 
            +
             | 
| 293 | 
            +
                  # 2歩目
         | 
| 294 | 
            +
                  @board.open_blind(10, 6, 1)
         | 
| 295 | 
            +
                  @board.blind_data[10][4].should == :none
         | 
| 296 | 
            +
             | 
| 297 | 
            +
                  @board.blind_data[10][6].should == :none
         | 
| 298 | 
            +
                  @board.blind_data[9][6].should == :none
         | 
| 299 | 
            +
                  @board.blind_data[11][6].should == :none
         | 
| 300 | 
            +
                  @board.blind_data[10][5].should == :none
         | 
| 301 | 
            +
                  @board.blind_data[10][7].should == :none
         | 
| 302 | 
            +
             | 
| 303 | 
            +
                  @board.blind_data[9][5].should == :dark
         | 
| 304 | 
            +
                  @board.blind_data[11][5].should == :dark
         | 
| 305 | 
            +
                end
         | 
| 306 | 
            +
             | 
| 307 | 
            +
                it "#visible?/#invisible?" do
         | 
| 308 | 
            +
                  @board.set_blind_mode
         | 
| 309 | 
            +
                  @road2.set_blind(:dark)
         | 
| 310 | 
            +
                  @board.fill_blind
         | 
| 311 | 
            +
             | 
| 312 | 
            +
                  @board.open_blind(10, 4, 1)
         | 
| 313 | 
            +
                  @board.visible?(10, 4).should be_true
         | 
| 314 | 
            +
                  @board.visible?(10, 3).should be_true
         | 
| 315 | 
            +
                  @board.visible?(10, 5).should be_true
         | 
| 316 | 
            +
                  @board.visible?(10, 2).should be_false
         | 
| 317 | 
            +
                  @board.invisible?(10, 2).should be_true
         | 
| 318 | 
            +
             | 
| 319 | 
            +
                  @room.each do |x, y|
         | 
| 320 | 
            +
                    @board.visible?(x, y).should be_true
         | 
| 321 | 
            +
                    @board.invisible?(x, y).should be_false
         | 
| 322 | 
            +
                  end
         | 
| 323 | 
            +
             | 
| 324 | 
            +
                  # dark
         | 
| 325 | 
            +
                  tx, ty = @road2.random_point
         | 
| 326 | 
            +
                  @board.visible?(tx, ty).should be_false
         | 
| 327 | 
            +
                  @board.invisible?(tx, ty).should be_true
         | 
| 328 | 
            +
             | 
| 329 | 
            +
                  # out of range
         | 
| 330 | 
            +
                  @board.visible?(30, 30).should be_false
         | 
| 331 | 
            +
                  @board.invisible?(30, 30).should be_true
         | 
| 332 | 
            +
                end
         | 
| 333 | 
            +
             | 
| 334 | 
            +
              end
         | 
| 335 | 
            +
             | 
| 336 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version | |
| 4 4 | 
             
              prerelease: false
         | 
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 0
         | 
| 7 | 
            -
              -  | 
| 7 | 
            +
              - 2
         | 
| 8 8 | 
             
              - 0
         | 
| 9 | 
            -
              version: 0. | 
| 9 | 
            +
              version: 0.2.0
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - parrot_studio
         | 
| @@ -14,24 +14,11 @@ autorequire: | |
| 14 14 | 
             
            bindir: bin
         | 
| 15 15 | 
             
            cert_chain: []
         | 
| 16 16 |  | 
| 17 | 
            -
            date: 2010- | 
| 17 | 
            +
            date: 2010-05-13 00:00:00 +09:00
         | 
| 18 18 | 
             
            default_executable: 
         | 
| 19 | 
            -
            dependencies: 
         | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
              prerelease: false
         | 
| 23 | 
            -
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 24 | 
            -
                requirements: 
         | 
| 25 | 
            -
                - - ">="
         | 
| 26 | 
            -
                  - !ruby/object:Gem::Version 
         | 
| 27 | 
            -
                    segments: 
         | 
| 28 | 
            -
                    - 1
         | 
| 29 | 
            -
                    - 2
         | 
| 30 | 
            -
                    - 9
         | 
| 31 | 
            -
                    version: 1.2.9
         | 
| 32 | 
            -
              type: :development
         | 
| 33 | 
            -
              version_requirements: *id001
         | 
| 34 | 
            -
            description: "    This gem is part of RDGC - Ruby(Random) Dungeon Game Core.\n    RDGC is core of random dungeon game (like rogue), make dungeon, manage mnsters etc.\n"
         | 
| 19 | 
            +
            dependencies: []
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            description: "    This gem is part of RDGC - Ruby(Random) Dungeon Game Core.\n    RDGC is core of random dungeon game (like rogue), make dungeon, manage monsters etc.\n"
         | 
| 35 22 | 
             
            email: parrot@users.sourceforge.jp
         | 
| 36 23 | 
             
            executables: []
         | 
| 37 24 |  | 
| @@ -53,8 +40,10 @@ files: | |
| 53 40 | 
             
            - lib/rdgc/maker/dungeon_maker.rb
         | 
| 54 41 | 
             
            - lib/rdgc/maker/temp_block.rb
         | 
| 55 42 | 
             
            - lib/rdgc/map/area.rb
         | 
| 43 | 
            +
            - lib/rdgc/map/blind_area.rb
         | 
| 56 44 | 
             
            - lib/rdgc/map/block.rb
         | 
| 57 45 | 
             
            - lib/rdgc/map/board.rb
         | 
| 46 | 
            +
            - lib/rdgc/map/direction.rb
         | 
| 58 47 | 
             
            - lib/rdgc/map/road.rb
         | 
| 59 48 | 
             
            - lib/rdgc/map/room.rb
         | 
| 60 49 | 
             
            - lib/rdgc/map/tile.rb
         | 
| @@ -72,6 +61,8 @@ files: | |
| 72 61 | 
             
            - spec/rdgc/map/04_room_spec.rb
         | 
| 73 62 | 
             
            - spec/rdgc/map/05_block_spec.rb
         | 
| 74 63 | 
             
            - spec/rdgc/map/06_board_spec.rb
         | 
| 64 | 
            +
            - spec/rdgc/map/07_direction_spec.rb
         | 
| 65 | 
            +
            - spec/rdgc/map/08_blind_area_spec.rb
         | 
| 75 66 | 
             
            - spec/rdgc/util/01_config_spec.rb
         | 
| 76 67 | 
             
            - spec/rdgc/util/02_random_util_spec.rb
         | 
| 77 68 | 
             
            - spec/spec.opts
         | 
| @@ -116,6 +107,8 @@ test_files: | |
| 116 107 | 
             
            - spec/rdgc/map/06_board_spec.rb
         | 
| 117 108 | 
             
            - spec/rdgc/map/01_tile_spec.rb
         | 
| 118 109 | 
             
            - spec/rdgc/map/03_road_spec.rb
         | 
| 110 | 
            +
            - spec/rdgc/map/08_blind_area_spec.rb
         | 
| 111 | 
            +
            - spec/rdgc/map/07_direction_spec.rb
         | 
| 119 112 | 
             
            - spec/rdgc/map/05_block_spec.rb
         | 
| 120 113 | 
             
            - spec/rdgc/map/02_area_spec.rb
         | 
| 121 114 | 
             
            - spec/rdgc/maker/02_divide_temp_block_spec.rb
         |