# Grid of monsters.
class Grid
# width of the current grid
- var width: Int
+ var width: Int is noinit
# maximum width of the grid
var max_width: Int
# height of the current grid
- var height: Int
+ var height: Int is noinit
# maximum height of the grid
var max_height: Int
# the data grid
private var grid = new Array[Array[Tile]]
- init(mw,mh,nm: Int)
- do
- self.max_width = mw
- self.max_height = mh
- self.nb_monsters = mh
- clear
- end
+ init do clear
# Reinitialize the grid with new empty tiles and monsters info
fun clear
fun save: String
do
var res = ""
- var str = ".#ABCDEFGHI"
+ var str = ".abcdefghi#ABCDEFGHI"
for y in [0..height[ do
var rle = 0
var last: nullable Int = null
for x in [0..width[ do
var t = self.grid[x][y]
- var tk = 0
- if t.fixed then tk = t.kind + 1
+ var tk = t.kind
+ if t.fixed then tk += 10
if tk == last and rle<9 then
rle += 1
else
x += 1
else if c == '#' then
var t = self.get(x,y)
+ assert t != null
t.fixed = true
x += 1
else if c >= 'A' and c <= 'I' then
t.update(c.ascii-'A'.ascii+1)
t.fixed = true
x += 1
+ else if c >= 'a' and c <= 'i' then
+ var t = self.get(x,y)
+ assert t != null
+ t.update(c.ascii-'a'.ascii+1)
+ x += 1
else if c >= '1' and c <= '9' then
rle = c.to_i
else
if x>0 then y += 1
if x > mx then mx = x
if y > my then my = y
- if mx<3 or my<3 or mx>=max_width or my>=max_height then
+ if mx<3 or my<3 or mx>max_width or my>max_height then
return false
end
self.resize(mx,my)