2016-04-30 4 views
-2

Ich versuche, ein Schlachtschiff-Spiel in Ruby zu machen, aber wenn ich versuche, eine Instanz des Spielbretts zu erstellen, bekomme ich "falsche Anzahl von Argumenten, 0 für 1". Ich sehe nicht, wo ich falsch liege, da die Initialisierungsdefinition Argumente akzeptiert.Ruby falsche Anzahl von Argumenten in Klasse Instantiierung

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) 

Antwort

6

Sie haben einen Tippfehler in Ihrem Code. Sie sollten statt intitalize

mit initialize werden, und ich glaube, dass der Fehler, den Sie wäre gewesen wäre immer ArgumentError: wrong number of arguments (1 for 0)

Welche wegen Ihrer Tippfehler ist, wurde die Standardklasse initialize Methode verwendet, die nicht in sich nehmen irgendwelche Argumente.

Und etwas ohne Bezug, dass ich in Ihrem Code bemerkt. Sie haben eine Methode mit dem Namen count definiert und verwenden Variablen mit dem Namen count. Dies ist ein Code-Geruch und ich würde vorschlagen, die Methode anders zu benennen, weil auf der anderen Seite dies einige Fehler verursachen könnte, die Sie schwer zu debuggen finden könnten.

Verwandte Themen