2017-10-09 107 views
0

这是我的方法,应该检查检查队友。其中一部分工作不正常。虽然@board [] [] =元素在我尝试更改元素被迭代到字符串时发生作用,但没有任何反应。它保留了它的任何对象。使用.each不能更改正在迭代的元素吗?国际象棋游戏,改变正在迭代的对象。

@board[move[0]][move[1]] = element 
element = " " 

@board是一个阵列数组,填充字符串和棋子对象。如果检查结果为真,该方法应该遍历每一个可能的移动,以查看是否有任何违规检查。

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 

回答

0

您正在修改element这是行[]中对象的本地副本。我想你想修改行[]。

row.each_with_index do |element, index| 

,然后修改行中的元素:

row[index] = " " 
通过行迭代时,您可以改用的 each each_with_index