2017-10-09 104 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