我正在编写此脚本来构建井字游戏。这仅仅是开始(尚未转弯)。如果先前的输入无效,我想让用户再次输入。
def display_board(board)
first_row = " #{board[0]} | #{board[1]} | #{board[2]} "
second_row = " #{board[3]} | #{board[4]} | #{board[5]} "
third_row = " #{board[6]} | #{board[7]} | #{board[8]} "
row_divider = "-----------"
puts first_row
puts row_divider
puts second_row
puts row_divider
puts third_row
end
def valid_move?(board,index)
if (index >= 0) && (index <= board.length - 1) && (position_taken?(board,index) != FALSE)
return TRUE
else
return FALSE
end
end
def input_to_index(user_input)
index = user_input.to_i - 1
return index
end
def move(board, index, character = "X")
board[index] = character
end
def position_taken?(board,index)
if (board[index] == "X") || (board[index]=="O")
return FALSE
end
end
def turn(board)
puts "Please enter 1-9:"
user_input = gets.strip
index = input_to_index(user_input)
while valid_move?(board,index) == FALSE
puts "invalid"
turn(board)
end
move(board, index, character = "X")
display_board(board)
end
我陷入了while循环中。如果我输入了一个无效的输入,然后输入了一个有效的输入,则它将通过while循环运行,而不是结束程序。应该是真的如果我使用if语句而不是while循环,则此问题已解决,但我想学习更好地使用while循环。
答案 0 :(得分:0)
因为您从“ turn”(外部)调用“ turn”(内部),然后调用的内部“ turn”有效,但外部的board
和index
“转弯”没有变化。
尝试一下:
def turn(board)
loop do
puts "Please enter 1-9:"
user_input = gets.strip
index = input_to_index(user_input)
if valid_move?(board,index) == TRUE
break
end
puts "invalid"
end
move(board, index, character = "X")
display_board(board)
end