2016-04-30 33 views
-2

我想在Ruby中製作一個戰艦遊戲,但是當我嘗試創建遊戲板的實例時,我得到「錯誤的參數數量,0爲1」。由於初始化定義清楚地接受了參數,我沒有看到我要去哪裏出錯。Ruby在類中的參數錯誤

class Board 

    attr_reader :grid, :default_grid 

    def intitalize(grid = self.class.default_grid, random = false) 
    @grid = grid 
    make_random_board if random 
    end 

    def self.default_grid 
    grid = Array.new(10){Array.new(10)} 
    end 

    def count 
    grid.flatten.count{|x| x == :s} 
    end 

    def self.random 
    self.new(self.default_grid, true) 
    end 

    def empty?(position = nil) 
    return true if position.nil? 
    else 
    false 
    end 

    def full? 
    grid.flatten.none?(&:nil?) 
    end 

    def place_random_ship 
     if full? 
     raise "error, board is full" 
     end 

     space = [rand(grid.length),rand(grid.length)] 
     until empty?(space) 
      space = [rand(grid.length),rand(grid.length)] 
     end 
     self[space] = :s 
    end 

    def make_random_board(count = 10) 
    count.times do 
     place_random_ship 
    end 
    end 

end 

emptygrid = Array.new(2){Array.new(2)} 
myGame = Board.new(emptygrid) 

回答

6

您的代碼中存在拼寫錯誤。您應該使用initialize代替intitalize

,我相信你可能已經發現了錯誤會ArgumentError: wrong number of arguments (1 for 0)

這是因爲你的錯字的,使用了默認類initialize方法,它不參加任何參數。

和我在代碼中注意到的東西無關。您已經定義了一個名爲count的方法,並使用名爲count的變量。這是一種代碼異味,我會建議以不同的方式命名這個方法,因爲在這一行中,這可能會導致一些錯誤,您可能會發現很難調試。