```Thx. Don't quite understand that code. I tried plugging in some nils but
didn't work. Do I just need to assign nil values to the cells outside
the bounds of my array for the program to ignore them?

Here's what I've got so far. At the moment everything is wrapping. I
need it to wrap left and right, but to be capped top and bottom.

class Array2D

attr_accessor :width, :height

def initialize(width, height)
@width = width
@height = height
@data = Array.new(@width) { Array.new(@height) }
end

# Returns adjacent cell of given 2D array index x,y, in the given
direction z, where z = 0 is no direction (the cell in the middle), and z
= 1-8 are the surrounding cells.
def [](x, y, z)
x = x % @width  # modulus % allows wrapping
y = y % @height
if z == 0
@data[x][y]
elsif z == 1
@data[x][y+1]
elsif z == 2
@data[x+1][y+1]
elsif z == 3
@data[x+1][y]
elsif z == 4
@data[x+1][y-1]
elsif z == 5
@data[x][y-1]
elsif z == 6
@data[x-1][y-1]
elsif z == 7
@data[x-1][y]
elsif z == 8
@data[x-1][y+1]
end
end

# Allows the allocation of values to adjacent cell of given 2D array
index x,y, in the given direction z, where z = 0 is no direction (the
cell in the middle), and z = 1-8 are the surrounding cells.
def []=(x, y, z, value)
x = x % @width # modulus % allows wrapping
y = y % @height
if z == 0
@data[x][y] = value
elsif z == 1
@data[x][y+1] = value
elsif z == 2
@data[x+1][y+1] = value
elsif z == 3
@data[x+1][y] = value
elsif z == 4
@data[x+1][y-1] = value
elsif z == 5
@data[x][y-1] = value
elsif z == 6
@data[x-1][y-1] = value
elsif z == 7
@data[x-1][y] = value
elsif z == 8
@data[x-1][y+1] = value
end
end

end

# This method replaces contents of 9 cells in a square configuration
at a random location on the 2D array.
def form_plates
x = rand(@cols)
y = rand(@rows)
Array2D[x,y,0] = "X "
Array2D[x,y,1] = "X "
Array2D[x,y,2] = "X "
Array2D[x,y,3] = "X "
Array2D[x,y,4] = "X "
Array2D[x,y,5] = "X "
Array2D[x,y,6] = "X "
Array2D[x,y,7] = "X "
Array2D[x,y,8] = "X "
end
--
Posted via http://www.ruby-forum.com/.

```