Ruby 我如何使我的井字游戏程序不跳过玩家回合?
我写了一个tic-tac-toe程序。问题是,当用户输入无效坐标时,用户会收到通知,但会跳过轮到他的位置。例如:如果玩家“x”输入有效坐标,而玩家“o”输入有效坐标,则会通知玩家“o”,但他/她的回合将被跳过,玩家“x”将再次进入。我如何解决这个问题,让玩家“o”有机会进入有效坐标 这是我的密码:Ruby 我如何使我的井字游戏程序不跳过玩家回合?,ruby,class,if-statement,tic-tac-toe,Ruby,Class,If Statement,Tic Tac Toe,我写了一个tic-tac-toe程序。问题是,当用户输入无效坐标时,用户会收到通知,但会跳过轮到他的位置。例如:如果玩家“x”输入有效坐标,而玩家“o”输入有效坐标,则会通知玩家“o”,但他/她的回合将被跳过,玩家“x”将再次进入。我如何解决这个问题,让玩家“o”有机会进入有效坐标 这是我的密码: class Game def initialize @board=Array.new @board[1]="1 __|" @board[2]="__" @boa
class Game
def initialize
@board=Array.new
@board[1]="1 __|"
@board[2]="__"
@board[3]="|__"
@board[4]="\n2 __|"
@board[5]="__"
@board[6]="|__"
@board[7]="\n3 |"
@board[8]=" "
@board[9]="| "
@turn="o"
@win_status = false
end
def turn
@turn
end
def show_board
puts " 1 2 3"
@board.each do |i|
print i
end
puts ""
end
def set_turn #switches turns
if @turn == "x"
@turn = "o"
else @turn == "o"
@turn = "x"
end
end
def make_move
puts "Enter x coordinate"
x=gets.to_i
puts "Enter y coordinate"
y=gets.to_i
if y==1 && x==1
@board[1]="1 _"+@turn+"|"
elsif y==2 && x==1
@board[2]="_"+@turn
elsif y==3 && x==1
@board[3]="|_"+@turn
elsif y==1 && x==2
@board[4]="\n2 _"+@turn+"|"
elsif y==2 && x==2
@board[5]="_"+@turn
elsif y==3 && x==2
@board[6]="|_"+@turn
elsif y==1 && x==3
@board[7]="\n3 "+@turn+"|"
elsif y==2 && x==3
@board[8]=" "+@turn
elsif y==3 && x==3
@board[9]="| "+@turn+" \n"
else
puts "you entered an invalid coordinate"
end
end
def win_combo
return [[@board[1][4] + @board[2][1] + @board[3][2]], [@board[4][5] + @board[5][1] + @board[6][2]], [@board[7][5] + @board[8][1] + @board[9][2]],[@board[1][4] + @board[4][5] + @board[7][5]], [@board[2][1] + @board[5][1] + @board[8][1]], [@board[3][2] + @board[6][2] + @board[9][2]], [@board[1][4] + @board[5][1] + @board[9][2]], [@board[3][2] + @board[5][1] + @board[7][5]]]
end
def check_win
#if some row or column or diagonal is "xxx" or "ooo" then set @win_status = true
self.win_combo.each do |arr|
str = arr.join
if str == "xxx"
puts "X Wins!"
return true
elsif str == "ooo"
puts "O Wins!"
return true
end
end
return false
end
g = Game.new
while g.check_win != true
g.show_board
g.set_turn
g.make_move
end
end
您可以再次调用make_move来提示用户输入新坐标
puts "you entered an invalid coordinate"
make_move
您可以再次调用make_move来提示用户输入新坐标
puts "you entered an invalid coordinate"
make_move
您可以再次调用make_move来提示用户输入新坐标
puts "you entered an invalid coordinate"
make_move
您可以再次调用make_move来提示用户输入新坐标
puts "you entered an invalid coordinate"
make_move
一旦你知道一个玩家 已输入无效的移动
else
puts "you entered an invalid coordinate"
make_move
end
一旦你知道一个玩家 已输入无效的移动
else
puts "you entered an invalid coordinate"
make_move
end
一旦你知道一个玩家 已输入无效的移动
else
puts "you entered an invalid coordinate"
make_move
end
一旦你知道一个玩家 已输入无效的移动
else
puts "you entered an invalid coordinate"
make_move
end
查看make_move中当用户输入无效坐标时触发的条件。在该代码被触发后,make_move的执行就结束了,所以它会进入你的g.check_win循环 将您的函数看作是可以重用的部分。只要您希望当前用户进行移动,就会调用make_move。在make_move告诉用户其输入无效后,如何再次执行此功能
我给你一个提示:函数可以自己调用。看看make\u move中的条件,当用户输入无效坐标时,会触发该条件。在该代码被触发后,make_move的执行就结束了,所以它会进入你的g.check_win循环 将您的函数看作是可以重用的部分。只要您希望当前用户进行移动,就会调用make_move。在make_move告诉用户其输入无效后,如何再次执行此功能
我给你一个提示:函数可以自己调用。看看make\u move中的条件,当用户输入无效坐标时,会触发该条件。在该代码被触发后,make_move的执行就结束了,所以它会进入你的g.check_win循环 将您的函数看作是可以重用的部分。只要您希望当前用户进行移动,就会调用make_move。在make_move告诉用户其输入无效后,如何再次执行此功能
我给你一个提示:函数可以自己调用。看看make\u move中的条件,当用户输入无效坐标时,会触发该条件。在该代码被触发后,make_move的执行就结束了,所以它会进入你的g.check_win循环 将您的函数看作是可以重用的部分。只要您希望当前用户进行移动,就会调用make_move。在make_move告诉用户其输入无效后,如何再次执行此功能
我给你一个提示:函数可以自己调用。与你的问题无关,但请注意,目前你可以覆盖单元格。假设在1,1号牢房里有一个X,下一个玩家也玩1,1号牢房现在有一个O。是的,我知道。我打算稍后再讨论这个问题,但有什么建议吗?这个问题似乎离题了,因为它是一个编写代码的请求。与您的问题无关,但请注意,当前您可以覆盖单元格。假设在1,1号牢房里有一个X,下一个玩家也玩1,1号牢房现在有一个O。是的,我知道。我打算稍后再讨论这个问题,但有什么建议吗?这个问题似乎离题了,因为它是一个编写代码的请求。与您的问题无关,但请注意,当前您可以覆盖单元格。假设在1,1号牢房里有一个X,下一个玩家也玩1,1号牢房现在有一个O。是的,我知道。我打算稍后再讨论这个问题,但有什么建议吗?这个问题似乎离题了,因为它是一个编写代码的请求。与您的问题无关,但请注意,当前您可以覆盖单元格。假设在1,1号牢房里有一个X,下一个玩家也玩1,1号牢房现在有一个O。是的,我知道。我打算稍后再讨论这个问题,但有什么建议吗?这个问题似乎离题了,因为它是一个编写代码的请求。