国际象棋游戏,改变正在迭代的对象。

时间:2017-10-09 22:31:01

标签: ruby

这是我应该检查检查配对的方法。其中一部分工作不正常。虽然@board [] [] =元素在我尝试将“元素”(正在迭代的元素)更改为字符串时起作用,但没有任何反应。它保留了它的任何对象。是否无法使用.each?

更改正在迭代的元素
@board[move[0]][move[1]] = element 
element = " "

@board是一个数组数组,填充了字符串和棋子对象。如果check为true,则该方法应该迭代每个可能的移动以查看是否有任何中断检查。

  def check_mate(color) 
    @board.each do |row|
      row.each do |element|
        if element == " "
        elsif element.color != color 
          elsif element.possible_moves(@board).each do |move|
            if check(color) == true
              save_game
              @board[move[0]][move[1]] = element 
              element = " "
              display
              if check(color) == true 
                load_game
              elsif check(color) != true 
                return true 
                break
              end
            else return true   
            end 
          end
        end
      end
    end   
  end 

1 个答案:

答案 0 :(得分:0)

您正在修改element,它是行[]中对象的本地副本。我想你想修改row []。在迭代行时,您可以使用each_with_index代替each

row.each_with_index do |element, index|

然后修改行中的元素:

row[index] = " "