parent
fce896c7a1
commit
13e41a2d43
@ -0,0 +1,94 @@
|
|||||||
|
require "minitest"
|
||||||
|
|
||||||
|
class Combat
|
||||||
|
end
|
||||||
|
|
||||||
|
class Grid
|
||||||
|
def self.parse(s)
|
||||||
|
occupied = {}
|
||||||
|
s.chomp.lines.each.with_index do |row, y|
|
||||||
|
row.chomp.chars.each.with_index do |pos, x|
|
||||||
|
case pos
|
||||||
|
when ?#
|
||||||
|
occupied[[y, x]] = :wall
|
||||||
|
when ?E
|
||||||
|
occupied[[y, x]] = Elf.new
|
||||||
|
when ?G
|
||||||
|
occupied[[y, x]] = Goblin.new
|
||||||
|
when ?.
|
||||||
|
else
|
||||||
|
fail "Invalid character: #{pos.inspect}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.new(occupied)
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize(occupied)
|
||||||
|
@occupied = occupied
|
||||||
|
end
|
||||||
|
|
||||||
|
def [](pos)
|
||||||
|
y, x = pos
|
||||||
|
@occupied[[y, x]]
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_s
|
||||||
|
max_y = @occupied.keys.map(&:first).max
|
||||||
|
max_x = @occupied.keys.map(&:last).max
|
||||||
|
(0..max_y).map {|y|
|
||||||
|
(0..max_x).map {|x|
|
||||||
|
case @occupied[[y, x]]
|
||||||
|
when :wall
|
||||||
|
?#
|
||||||
|
when Elf
|
||||||
|
?E
|
||||||
|
when Goblin
|
||||||
|
?G
|
||||||
|
when nil
|
||||||
|
?.
|
||||||
|
else
|
||||||
|
fail "Unexpected object: #{@occupied[[y, x]]}"
|
||||||
|
end
|
||||||
|
}.join
|
||||||
|
}.join(?\n)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class TestGrid < Minitest::Test
|
||||||
|
def test_parse
|
||||||
|
grid = Grid.parse(<<~GRID)
|
||||||
|
#######
|
||||||
|
#E..G.#
|
||||||
|
#...#.#
|
||||||
|
#.G.#G#
|
||||||
|
#######
|
||||||
|
GRID
|
||||||
|
|
||||||
|
assert_equal :wall, grid[[0,0]]
|
||||||
|
assert_equal :wall, grid[[2,4]]
|
||||||
|
assert_equal :wall, grid[[4,6]]
|
||||||
|
|
||||||
|
assert_instance_of Elf, grid[[1,1]]
|
||||||
|
assert_instance_of Goblin, grid[[1,4]]
|
||||||
|
assert_instance_of Goblin, grid[[3,5]]
|
||||||
|
|
||||||
|
assert_nil grid[[1,2]]
|
||||||
|
assert_nil grid[[2,5]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Unit
|
||||||
|
end
|
||||||
|
|
||||||
|
class Elf < Unit
|
||||||
|
end
|
||||||
|
|
||||||
|
class Goblin < Unit
|
||||||
|
end
|
||||||
|
|
||||||
|
if __FILE__ == $0
|
||||||
|
require "minitest/autorun" and exit if ENV["TEST"]
|
||||||
|
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in new issue