Trying to write Python code in Ruby but no luck with nested lists. Here is the Python code:
class Tile:
def init(self, block_path)
self.block_path = block_path
def map():
new_map = [ [ Tile(False) for y in range(0, 30) ] for x in range(0, 30) ]
new_map[10][10].block_path = True
new_map[20][20].block_path = True
return new_map
Here is the Ruby code but is doesn’t work:
class Tile
attr_accessor :blocks_path
def initialize(blocks_path)
@blocks_path = blocks_path
end
end
def map()
new_map = [[for j in 0…29 do j end], for i in 0…29 do Tile.new(false) end]
new_map[10][10].blocks_path = true
new_map[20][20].blocks_path = true
return new_map
end
Please help
pcl
2
You can make multi-dimensional arrays directly, using blocks:
2.7.2 :002 > table = Array.new(3) {Array.new(5)}
=> [[nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil,...
2.7.2 :003 > table[0][1] = "a"
=> "a"
2.7.2 :004 > table
=> [[nil, "a", nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil]]
To make a new tile at each position, add that as a block to the second call. Does this do what you want for new_map:
new_map = Array.new(30) {Array.new(30) {Tile.new(false)}}
https://docs.ruby-lang.org/en/3.0.0/Array.html
BigBMP
3
Ideally I want to reproduce this.
pcl
4
Ideally I want to reproduce this.
OK, but where are you getting stuck? I showed you an equivalent statement for making new_map.
Ranges in Ruby are not so different to Python, just count the dots:
for x in (0...30)
# etc
end
BigBMP
5
I get errors when trying to call the map: map_to_draw[x][y].block_path == True:
pcl
6
what is True
?
If you want the boolean true value, you want true
, like you wrote in your first post.
(NB: Python True/False vs Ruby true/false!)
That is what I meant ‘true’, Python code creeping in.