-1

配列をオブジェクトで埋める関数を作成しようとしていますが、何か問題があります。

row1 = []

class Tile
    def initialize(type)
        @type = type
    end
end

def FillRow1

    [1..10].each {
        random = rand(1..3)
        if random == 1 row1.(Tile.new("land") end 
        else if random == 2 row1.(Tile.new("Water") end
        else ifrandom == 3 row1.(Tile.new("empty") end
    }
    row1
end
4

6 に答える 6

4

構文が間違っています

    [1..10].each {
        random = rand(1..3)
        if random == 1 then row1.push(Tile.new("land")) end 
        else if random == 2 then row1.push(Tile.new("Water")) end
        else ifrandom == 3 then row1.push(Tile.new("empty") end
    }

これはうまくいくでしょう。

しかし、よりクリーンな解決策は次のようになります。

types = ["Land","Water","Empty"]
10.times{ row1 << Tile.new(types[rand(0..2)]) }
于 2012-10-05T11:42:38.903 に答える
0

2番目のelseが間違っている場合は、randomとifの間にスペースが必要です。

于 2012-10-05T11:53:06.563 に答える
0
a= ["land", "water", "empty"]
data= (1..10).map{ a[rand(3)] }
p data
于 2012-10-05T11:54:02.460 に答える
0

1行のオプション:

10.times.map{ Tile.new(["land","water","empty"][rand(3)]) }
于 2012-10-05T12:13:22.623 に答える
0

Rubyの最近のバージョン(> = 1.9.3)には、メソッド#sampleが付属しています。配列の一部です。これを使用して、配列の大きささえ知らなくても、配列からランダムな要素を取得できます。

class Tile
    TILE_TYPES = %w(land water empty)

    def initialize(type)
        @type = type
    end

    def to_s
        "Tile of type: #{@type}"
    end
end

# Generate 10 tiles
rows = (1..10).map do 
    Tile.new Tile::TILE_TYPES.sample
end

puts rows
#=> Tile of type: empty
#   Tile of type: land
#   ...

# If you want to pick more then 1 random element you can also do
puts Tile::TILE_TYPES.sample(3)
于 2012-10-05T12:26:30.650 に答える
0
class Tile
  def initialize(type)
    @type = type
  end
end

types = %w(land water empty)

row = Array.new(10){ Tile.new(types.sample) }
于 2012-10-05T18:16:12.537 に答える