Как создать 2D массив объектов в Ruby? - PullRequest
0 голосов
/ 29 июля 2010

Я создаю карту для своей игры в жанре roguelike и уже наткнулся на проблему. Я хочу создать двумерный массив объектов. В моей предыдущей игре на C ++ я сделал это:

class tile; //found in another file.

tile theMap[MAP_WIDTH][MAP_HEIGHT];

Я не могу понять, как мне это сделать с Руби.

Ответы [ 4 ]

4 голосов
/ 29 июля 2010
theMap = Array.new(MAP_HEIGHT) { Array.new(MAP_WIDTH) { Tile.new } }
2 голосов
/ 29 июля 2010

2D массивы - не пот

array = [[1,2],[3,4],[5,6]]
 => [[1, 2], [3, 4], [5, 6]] 
array[0][0]
 => 1 
array.flatten
 => [1, 2, 3, 4, 5, 6] 
array.transpose
 => [[1, 3, 5], [2, 4, 6]] 

Для загрузки 2D-массивов попробуйте что-то вроде:

rows, cols = 2,3
mat = Array.new(rows) { Array.new(cols) }
1 голос
/ 29 июля 2010

Использовать массивы массивов.

board = [
 [ 1, 2, 3 ],
 [ 4, 5, 6 ]
]

x = Array.new(3){|i| Array.new(3){|j| i+j}}

Также загляните в класс Matrix:

require 'matrix'
Matrix.build(3,3){|i, j| i+j}
0 голосов
/ 29 июля 2010
# Let's define some class
class Foo
  # constructor
  def initialize(smthng)
    @print_me = smthng
  end
  def print
    puts @print_me
  end
# Now let's create 2×2 array with Foo objects
the_map = [
[Foo.new("Dark"), Foo.new("side")],
[Foo.new("of the"), Foo.new("spoon")] ]

# Now to call one of the object's methods just do something like
the_map[0][0].print # will print "Dark"
the_map[1][1].print # will print "spoon"
...